Subject: Re: [PATCH v4 2/8] powerpc/mm/hash64: Map all the kernel regions in the same 0xc range

From: "Aneesh Kumar K.V" <[email-masked]>
Date: Thu, 18 Apr 2019 09:17:24 +0530

On 4/17/19 6:29 PM, Aneesh Kumar K.V wrote:
> This patch maps vmalloc, IO and vmemap regions in the 0xc address range
> instead of the current 0xd and 0xf range. This brings the mapping closer
> to radix translation mode.
> 
> With hash 64K page size each of this region is 512TB whereas with 4K config
> we are limited by the max page table range of 64TB and hence there regions
> are of 16TB size.
> 
> The kernel mapping is now:
> 
>   On 4K hash
> 
>       kernel_region_map_size = 16TB
>       kernel vmalloc start   = 0xc000100000000000
>       kernel IO start        = 0xc000200000000000
>       kernel vmemmap start   = 0xc000300000000000
> 
> 64K hash, 64K radix and 4k radix:
> 
>       kernel_region_map_size = 512TB
>       kernel vmalloc start   = 0xc008000000000000
>       kernel IO start        = 0xc00a000000000000
>       kernel vmemmap start   = 0xc00c000000000000

I missed this when sending out the patch.

diff --git a/arch/powerpc/mm/pgtable-radix.c 
b/arch/powerpc/mm/pgtable-radix.c
index 263c3ff662c3..30fc0909f1d8 100644
--- a/arch/powerpc/mm/pgtable-radix.c
+++ b/arch/powerpc/mm/pgtable-radix.c
@@ -136,7 +136,7 @@ static int __map_kernel_page(unsigned long ea, 
unsigned long pa,
         BUILD_BUG_ON(TASK_SIZE_USER64 > RADIX_PGTABLE_RANGE);

  #ifdef CONFIG_PPC_64K_PAGES
-       BUILD_BUG_ON(RADIX_KERN_MAP_SIZE != MAX_EA_BITS_PER_CONTEXT);
+       BUILD_BUG_ON(RADIX_KERN_MAP_SIZE != (1UL << 
MAX_EA_BITS_PER_CONTEXT));
  #endif

         if (unlikely(!slab_is_available()))