Loading arch/s390/Kconfig.debug +8 −0 Original line number Diff line number Diff line Loading @@ -6,4 +6,12 @@ config TRACE_IRQFLAGS_SUPPORT source "lib/Kconfig.debug" config DEBUG_PAGEALLOC bool "Debug page memory allocations" depends on DEBUG_KERNEL help Unmap pages from the kernel linear mapping after free_pages(). This results in a slowdown, but helps to find certain types of memory corruptions. endmenu arch/s390/kernel/traps.c +4 −1 Original line number Diff line number Diff line Loading @@ -272,6 +272,9 @@ void die(const char * str, struct pt_regs * regs, long err) #endif #ifdef CONFIG_SMP printk("SMP "); #endif #ifdef CONFIG_DEBUG_PAGEALLOC printk("DEBUG_PAGEALLOC"); #endif printk("\n"); notify_die(DIE_OOPS, str, regs, err, current->thread.trap_no, SIGSEGV); Loading arch/s390/mm/init.c +27 −0 Original line number Diff line number Diff line Loading @@ -167,6 +167,33 @@ void __init mem_init(void) PFN_ALIGN((unsigned long)&_eshared) - 1); } #ifdef CONFIG_DEBUG_PAGEALLOC void kernel_map_pages(struct page *page, int numpages, int enable) { pgd_t *pgd; pud_t *pud; pmd_t *pmd; pte_t *pte; unsigned long address; int i; for (i = 0; i < numpages; i++) { address = page_to_phys(page + i); pgd = pgd_offset_k(address); pud = pud_offset(pgd, address); pmd = pmd_offset(pud, address); pte = pte_offset_kernel(pmd, address); if (!enable) { ptep_invalidate(address, pte); continue; } *pte = mk_pte_phys(address, __pgprot(_PAGE_TYPE_RW)); /* Flush cpu write queue. */ mb(); } } #endif void free_initmem(void) { unsigned long addr; Loading include/asm-s390/cacheflush.h +4 −0 Original line number Diff line number Diff line Loading @@ -24,4 +24,8 @@ #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ memcpy(dst, src, len) #ifdef CONFIG_DEBUG_PAGEALLOC void kernel_map_pages(struct page *page, int numpages, int enable); #endif #endif /* _S390_CACHEFLUSH_H */ Loading
arch/s390/Kconfig.debug +8 −0 Original line number Diff line number Diff line Loading @@ -6,4 +6,12 @@ config TRACE_IRQFLAGS_SUPPORT source "lib/Kconfig.debug" config DEBUG_PAGEALLOC bool "Debug page memory allocations" depends on DEBUG_KERNEL help Unmap pages from the kernel linear mapping after free_pages(). This results in a slowdown, but helps to find certain types of memory corruptions. endmenu
arch/s390/kernel/traps.c +4 −1 Original line number Diff line number Diff line Loading @@ -272,6 +272,9 @@ void die(const char * str, struct pt_regs * regs, long err) #endif #ifdef CONFIG_SMP printk("SMP "); #endif #ifdef CONFIG_DEBUG_PAGEALLOC printk("DEBUG_PAGEALLOC"); #endif printk("\n"); notify_die(DIE_OOPS, str, regs, err, current->thread.trap_no, SIGSEGV); Loading
arch/s390/mm/init.c +27 −0 Original line number Diff line number Diff line Loading @@ -167,6 +167,33 @@ void __init mem_init(void) PFN_ALIGN((unsigned long)&_eshared) - 1); } #ifdef CONFIG_DEBUG_PAGEALLOC void kernel_map_pages(struct page *page, int numpages, int enable) { pgd_t *pgd; pud_t *pud; pmd_t *pmd; pte_t *pte; unsigned long address; int i; for (i = 0; i < numpages; i++) { address = page_to_phys(page + i); pgd = pgd_offset_k(address); pud = pud_offset(pgd, address); pmd = pmd_offset(pud, address); pte = pte_offset_kernel(pmd, address); if (!enable) { ptep_invalidate(address, pte); continue; } *pte = mk_pte_phys(address, __pgprot(_PAGE_TYPE_RW)); /* Flush cpu write queue. */ mb(); } } #endif void free_initmem(void) { unsigned long addr; Loading
include/asm-s390/cacheflush.h +4 −0 Original line number Diff line number Diff line Loading @@ -24,4 +24,8 @@ #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ memcpy(dst, src, len) #ifdef CONFIG_DEBUG_PAGEALLOC void kernel_map_pages(struct page *page, int numpages, int enable); #endif #endif /* _S390_CACHEFLUSH_H */