Commit 3d8810e0 authored by Michael Ellerman's avatar Michael Ellerman

powerpc/mm/hash: Increase vmalloc space to 512T with hash MMU

This patch updates the kernel non-linear virtual map to 512TB when
we're built with 64K page size and are using the hash MMU. We allocate
one context for the vmalloc region and hence the max virtual area size
is limited by the context map size (512TB for 64K and 64TB for 4K page
size).

This patch fixes boot failures with large amounts of system RAM where
we need large vmalloc space to handle per cpu allocations.
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Tested-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
parent ca6d5149
...@@ -40,22 +40,36 @@ ...@@ -40,22 +40,36 @@
#else #else
#define H_PUD_CACHE_INDEX (H_PUD_INDEX_SIZE) #define H_PUD_CACHE_INDEX (H_PUD_INDEX_SIZE)
#endif #endif
/* /*
* Define the address range of the kernel non-linear virtual area * Define the address range of the kernel non-linear virtual area. In contrast
* to the linear mapping, this is managed using the kernel page tables and then
* inserted into the hash page table to actually take effect, similarly to user
* mappings.
*/ */
#define H_KERN_VIRT_START ASM_CONST(0xD000000000000000) #define H_KERN_VIRT_START ASM_CONST(0xD000000000000000)
#define H_KERN_VIRT_SIZE ASM_CONST(0x0000400000000000) /* 64T */
/* /*
* The vmalloc space starts at the beginning of that region, and * Allow virtual mapping of one context size.
* occupies half of it on hash CPUs and a quarter of it on Book3E * 512TB for 64K page size
* (we keep a quarter for the virtual memmap) * 64TB for 4K page size
*/
#define H_KERN_VIRT_SIZE (1UL << MAX_EA_BITS_PER_CONTEXT)
/*
* 8TB IO mapping size
*/
#define H_KERN_IO_SIZE ASM_CONST(0x80000000000) /* 8T */
/*
* The vmalloc space starts at the beginning of the kernel non-linear virtual
* region, and occupies 504T (64K) or 56T (4K)
*/ */
#define H_VMALLOC_START H_KERN_VIRT_START #define H_VMALLOC_START H_KERN_VIRT_START
#define H_VMALLOC_SIZE ASM_CONST(0x380000000000) /* 56T */ #define H_VMALLOC_SIZE (H_KERN_VIRT_SIZE - H_KERN_IO_SIZE)
#define H_VMALLOC_END (H_VMALLOC_START + H_VMALLOC_SIZE) #define H_VMALLOC_END (H_VMALLOC_START + H_VMALLOC_SIZE)
#define H_KERN_IO_START H_VMALLOC_END #define H_KERN_IO_START H_VMALLOC_END
/* /*
* Region IDs * Region IDs
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment