powerpc/64s/radix: Enable HAVE_ARCH_HUGE_VMAP
This sets the HAVE_ARCH_HUGE_VMAP option, and defines the required page table functions. This enables huge (2MB and 1GB) ioremap mappings. I don't have a benchmark for this change, but huge vmap will be used by a later core kernel change to enable huge vmalloc memory mappings. This improves cached `git diff` performance by about 5% on a 2-node POWER9 with 32MB size dentry cache hash. Profiling git diff dTLB misses with a vanilla kernel: 81.75% git [kernel.vmlinux] [k] __d_lookup_rcu 7.21% git [kernel.vmlinux] [k] strncpy_from_user 1.77% git [kernel.vmlinux] [k] find_get_entry 1.59% git [kernel.vmlinux] [k] kmem_cache_free 40,168 dTLB-miss 0.100342754 seconds time elapsed With powerpc huge vmalloc: 2,987 dTLB-miss 0.095933138 seconds time elapsed Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
d38153f9cc
commit
d909f9109c
@@ -274,6 +274,14 @@ extern unsigned long __vmalloc_end;
|
||||
#define VMALLOC_START __vmalloc_start
|
||||
#define VMALLOC_END __vmalloc_end
|
||||
|
||||
static inline unsigned int ioremap_max_order(void)
|
||||
{
|
||||
if (radix_enabled())
|
||||
return PUD_SHIFT;
|
||||
return 7 + PAGE_SHIFT; /* default from linux/vmalloc.h */
|
||||
}
|
||||
#define IOREMAP_MAX_ORDER ioremap_max_order()
|
||||
|
||||
extern unsigned long __kernel_virt_start;
|
||||
extern unsigned long __kernel_virt_size;
|
||||
extern unsigned long __kernel_io_start;
|
||||
|
Reference in New Issue
Block a user