aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/mm/init_64.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-01-30 07:34:09 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:34:09 -0500
commitee01f1122ceb02a2c9b7142c5dd17b49e59ba774 (patch)
tree82f4d23f6857e2cc8e623295d3b06ab70c05fa10 /arch/x86/mm/init_64.c
parent1a4872529e13265d05ffae75b8d09697540016d2 (diff)
x86: init memory debugging
debug incorrect/late access to init memory, by permanently unmapping the init memory ranges. Depends on CONFIG_DEBUG_PAGEALLOC=y. Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/mm/init_64.c')
-rw-r--r--arch/x86/mm/init_64.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index f51180c02b8..e0c1e98ad1b 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -550,6 +550,16 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end)
550 if (begin >= end) 550 if (begin >= end)
551 return; 551 return;
552 552
553 /*
554 * If debugging page accesses then do not free this memory but
555 * mark them not present - any buggy init-section access will
556 * create a kernel page fault:
557 */
558#ifdef CONFIG_DEBUG_PAGEALLOC
559 printk(KERN_INFO "debug: unmapping init memory %08lx..%08lx\n",
560 begin, PAGE_ALIGN(end));
561 set_memory_np(begin, (end - begin) >> PAGE_SHIFT);
562#else
553 printk(KERN_INFO "Freeing %s: %luk freed\n", what, (end - begin) >> 10); 563 printk(KERN_INFO "Freeing %s: %luk freed\n", what, (end - begin) >> 10);
554 for (addr = begin; addr < end; addr += PAGE_SIZE) { 564 for (addr = begin; addr < end; addr += PAGE_SIZE) {
555 ClearPageReserved(virt_to_page(addr)); 565 ClearPageReserved(virt_to_page(addr));
@@ -575,6 +585,7 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end)
575 set_memory_nx(begin, (end - begin)/PAGE_SIZE); 585 set_memory_nx(begin, (end - begin)/PAGE_SIZE);
576 } 586 }
577#endif 587#endif
588#endif
578} 589}
579 590
580void free_initmem(void) 591void free_initmem(void)