powerpc: DEBUG_PAGEALLOC for 32 bits
PATCH 3/4 powerpc: DEBUG_PAGEALLOC for 32 bits
Here's an implementation of DEBUG_PAGEALLOC for ppc32. It disables BAT mapping and is only tested with Hash table based processor though it shouldn't be too hard to adapt it to others.
Signed-off-by Benjamin Herrenschmidt <[email protected]>
arch/powerpc/Kconfig.debug | 9 ++++++ arch/powerpc/mm/init_32.c | 4 +++ arch/powerpc/mm/pgtable_32.c | 52 +++++++++++++++++++++++++++++++++++++++ arch/powerpc/mm/ppc_mmu_32.c | 4 ++- include/asm-powerpc/cacheflush.h | 6 ++++ 5 files changed, 74 insertions(+), 1 deletion(-)
arch/powerpc/Kconfig.debug +9 -0
@@ -18,6 +18,15 @@ config DEBUG_STACK_USAGE This option will slow down process creation somewhat. +config DEBUG_PAGEALLOC + bool "Debug page memory allocations" + depends on DEBUG_KERNEL && !SOFTWARE_SUSPEND && PPC32 + help + Unmap pages from the kernel linear mapping after free_pages(). + This results in a large slowdown, but helps to find certain types + of memory corruptions. + + config HCALL_STATS bool "Hypervisor call instrumentation" depends on PPC_PSERIES && DEBUG_FS
arch/powerpc/mm/init_32.c +4 -0
@@ -115,6 +115,10 @@ void MMU_setup(void)if (strstr (cmd_line,"noltlbs" )) { __map_without_ltlbs =1 ; } +#ifdef CONFIG_DEBUG_PAGEALLOC + __map_without_bats =1 ; + __map_without_ltlbs =1 ; +#endif }/*
arch/powerpc/mm/pgtable_32.c +52 -0
55 lines not on this page · raw message
arch/powerpc/mm/ppc_mmu_32.c +3 -1
@@ -85,8 +85,10 @@ unsigned long __init mmu_mapin_ram(void)unsigned long max_size = (256 <<20 );unsigned long align; -if (__map_without_bats) +if (__map_without_bats) { +printk (KERN_DEBUG "RAM mapped without BATs\n" );return 0 ; + }/* Set up BAT2 and if necessary BAT3 to cover RAM. */
include/asm-powerpc/cacheflush.h +6 -0
@@ -64,6 +64,12 @@ extern void flush_dcache_phys_range(unsi memcpy(dst, src, len) + +#ifdef CONFIG_DEBUG_PAGEALLOC +/* internal debugging function */ +void kernel_map_pages (struct page *page,int numpages,int enable); +#endif +#endif /* __KERNEL__ */ #endif /* _ASM_POWERPC_CACHEFLUSH_H */