Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2485579b authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky
Browse files

[S390] DEBUG_PAGEALLOC support for s390.

parent 01bc8ad1
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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
+4 −1
Original line number Diff line number Diff line
@@ -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);
+27 −0
Original line number Diff line number Diff line
@@ -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;
+4 −0
Original line number Diff line number Diff line
@@ -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 */