[PATCH V3 08/10] powerpc/mm/hash: Increase VA range to 128TB

Michal Suchánek msuchanek at suse.de
Tue Mar 7 02:20:14 AEDT 2017


On Mon, 06 Mar 2017 09:07:48 +0530
"Aneesh Kumar K.V" <aneesh.kumar at linux.vnet.ibm.com> wrote:

> "Aneesh Kumar K.V" <aneesh.kumar at linux.vnet.ibm.com> writes:
> 
> > Michal Suchánek <msuchanek at suse.de> writes:
> >  
> >> Hello,
> >>
> >> On Sun, 19 Feb 2017 15:37:15 +0530
> >> "Aneesh Kumar K.V" <aneesh.kumar at linux.vnet.ibm.com> wrote:
> >>  
> >>> We update the hash linux page table layout such that we can
> >>> support 512TB. But we limit the TASK_SIZE to 128TB. We can switch
> >>> to 128TB by default without conditional because that is the max
> >>> virtual address supported by other architectures. We will later
> >>> add a mechanism to on-demand increase the application's effective
> >>> address range to 512TB.
> >>> 
> >>> Having the page table layout changed to accommodate 512TB  makes
> >>> testing large memory configuration easier with less code changes
> >>> to kernel
> >>> 
> >>> Signed-off-by: Aneesh Kumar K.V
> >>> <aneesh.kumar at linux.vnet.ibm.com>  
> >
> > ....
> >  
> >> index b64daf124fee..c7ca70dc3ba5 100644  
> >>> --- a/arch/powerpc/kernel/paca.c
> >>> +++ b/arch/powerpc/kernel/paca.c
> >>> @@ -253,8 +253,15 @@ void copy_mm_to_paca(struct mm_struct *mm)
> >>>  	get_paca()->mm_ctx_id = context->id;
> >>>  #ifdef CONFIG_PPC_MM_SLICES
> >>>  	get_paca()->mm_ctx_low_slices_psize =
> >>> context->low_slices_psize;
> >>> +	/*
> >>> +	 * We support upto 128TB for now. Hence copy only 128/2
> >>> bytes.
> >>> +	 * Later when we support tasks with different max
> >>> effective
> >>> +	 * address, we can optimize this based on mm->task_size.
> >>> +	 */
> >>> +	BUILD_BUG_ON(TASK_SIZE_USER64 != TASK_SIZE_128TB);  
> >>
> >> Can this be handled by KConfig?
> >> Above I see   
> >
> > I am reworking the series so that we depend on mm->task_size. Will
> > send a new version soon.
> >
> >
> >  
> >>> +#ifdef CONFIG_PPC_BOOK3S_64
> >>> +#define TASK_SIZE_USER64 TASK_SIZE_128TB
> >>> +#else
> >>> +#define TASK_SIZE_USER64 TASK_SIZE_64TB
> >>> +#endif  
> >> and   
> >>> #ifdef CONFIG_PPC_MM_SLICES
> >>> ILD_BUG_ON(TASK_SIZE_USER64 != TASK_SIZE_128TB)  
> >>
> >> which boils down to
> >> #ifndef CONFIG_PPC_BOOK3S_64
> >> #ifdef CONFIG_PPC_MM_SLICES
> >> #error TASK_SIZE_USER64 != TASK_SIZE_128TB
> >>
> >>  
> >>>  	memcpy(&get_paca()->mm_ctx_high_slices_psize,
> >>> -	       &context->high_slices_psize, SLICE_ARRAY_SIZE);
> >>> +	       &context->high_slices_psize, TASK_SIZE_128TB >>
> >>> 41);  
> >>
> >> Can we avoid magic numbers, please?
> >>  
> >
> > Since array is 4 bytes per each TB which is documented else where.  
> 
> 4 bits per teach TB.
> 
It is certainly nicer to have a macro for it. You can then see what the
number is from the macro name or grep it and find the definition and
the explanation.

Thanks

Michal


More information about the Linuxppc-dev mailing list