From 122f862eff5ac6cdeb778bafd1be3f8b1fc4771a Mon Sep 17 00:00:00 2001 From: Arjan van de Ven Date: Wed, 30 Jan 2008 13:34:07 +0100 Subject: [PATCH] --- yaml --- r: 80531 b: refs/heads/master c: 3c1df68b848b39270752ff8d4b956cc4a4dce0f6 h: refs/heads/master i: 80529: c4e806495871cc7c8d86edb8054bdf44b36ecef3 80527: 6d71f35bd48facfe9e11aa63bd3aaac0ce7a356e v: v3 --- [refs] | 2 +- trunk/arch/x86/mm/init_32.c | 7 +++++++ trunk/arch/x86/mm/init_64.c | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index cb198f5f9017..5cc62a538911 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 488fd99588bf23da951b524a806e44feaa1aa366 +refs/heads/master: 3c1df68b848b39270752ff8d4b956cc4a4dce0f6 diff --git a/trunk/arch/x86/mm/init_32.c b/trunk/arch/x86/mm/init_32.c index 0d3369b900e9..4d1156545194 100644 --- a/trunk/arch/x86/mm/init_32.c +++ b/trunk/arch/x86/mm/init_32.c @@ -780,6 +780,13 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end) { unsigned long addr; + /* + * We just marked the kernel text read only above, now that + * we are going to free part of that, we need to make that + * writeable first. + */ + set_memory_rw(begin, (end - begin) >> PAGE_SHIFT); + for (addr = begin; addr < end; addr += PAGE_SIZE) { ClearPageReserved(virt_to_page(addr)); init_page_count(virt_to_page(addr)); diff --git a/trunk/arch/x86/mm/init_64.c b/trunk/arch/x86/mm/init_64.c index 9b69fa54a831..f97ace7a55e5 100644 --- a/trunk/arch/x86/mm/init_64.c +++ b/trunk/arch/x86/mm/init_64.c @@ -570,6 +570,7 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end) * 2Mb kernel mapping just for this debug feature. */ if (begin >= __START_KERNEL_map) { + set_memory_rw(begin, (end - begin)/PAGE_SIZE); set_memory_np(begin, (end - begin)/PAGE_SIZE); set_memory_nx(begin, (end - begin)/PAGE_SIZE); }