[CRIU] [PATCH v2] compel/ppc64le: make task size detection more robust

Mike Rapoport rppt at linux.vnet.ibm.com
Mon Sep 4 10:29:47 MSK 2017


On Mon, Sep 04, 2017 at 08:55:39AM +0200, Laurent Dufour wrote:
> On 03/09/2017 09:27, Mike Rapoport wrote:
> > The recent changes to user address space limits in the Linux kernel break
> > the assumption that TASK_SIZE is 128TB. For now, the maximal task size on
> > ppc64le is 512TB and we need to detect it in runtime for compatibility with
> > older kernels.
> > 
> > Signed-off-by: Mike Rapoport <rppt at linux.vnet.ibm.com>
> > ---
> > v2: fix off-by-one
> > 
> >  compel/arch/ppc64/src/lib/infect.c | 20 +++++++++++++++++---
> >  1 file changed, 17 insertions(+), 3 deletions(-)
> > 
> > diff --git a/compel/arch/ppc64/src/lib/infect.c b/compel/arch/ppc64/src/lib/infect.c
> > index 8112588..1f1195e 100644
> > --- a/compel/arch/ppc64/src/lib/infect.c
> > +++ b/compel/arch/ppc64/src/lib/infect.c
> > @@ -2,6 +2,7 @@
> >  #include <sys/types.h>
> >  #include <sys/uio.h>
> >  #include <sys/user.h>
> > +#include <sys/mman.h>
> >  #include <stdint.h>
> >  #include <errno.h>
> >  #include <compel/plugins/std/syscall-codes.h>
> > @@ -9,6 +10,7 @@
> >  #include "errno.h"
> >  #include "log.h"
> >  #include "common/bug.h"
> > +#include "common/page.h"
> >  #include "infect.h"
> >  #include "infect-priv.h"
> > 
> > @@ -458,7 +460,19 @@ int arch_fetch_sas(struct parasite_ctl *ctl, struct rt_sigframe *s)
> >   *
> >   * NOTE: 32bit tasks are not supported.
> >   */
> > -#define TASK_SIZE_USER64	(0x0000400000000000UL)
> > -#define TASK_SIZE		TASK_SIZE_USER64
> > +#define TASK_SIZE_64TB  (0x0000400000000000UL)
> > +#define TASK_SIZE_128TB (0x0000800000000000UL)
> 
> Hi Mike,
> What's the need for defining TASK_SIZE_128TB ?
 
I've just copied the entire chunk from arch/powerpc/include/asm/processor.h :)

> > +#define TASK_SIZE_512TB (0x0002000000000000UL)
> > 
> > -unsigned long compel_task_size(void) { return TASK_SIZE; }
> > +#define TASK_SIZE_MIN TASK_SIZE_64TB
> > +#define TASK_SIZE_MAX TASK_SIZE_512TB
> > +
> > +unsigned long compel_task_size(void)
> > +{
> > +	unsigned long task_size;
> > +
> > +	for (task_size = TASK_SIZE_MIN; task_size < TASK_SIZE_MAX; task_size <<= 1)
> > +		if (munmap((void *)task_size, page_size()))
> > +			break;
> > +	return task_size;
> > +}
> > 
> 
> Except for minor TASK_SIZE_128TB's remarks:
> 
> Acked-by: Laurent Dufour <ldufour at linux.vnet.ibm.com>

-- 
Sincerely yours,
Mike.



More information about the CRIU mailing list