diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/mm/init_32.c | 7 | ||||
-rw-r--r-- | arch/x86/mm/init_64.c | 1 |
2 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index 0d3369b900e9..4d1156545194 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c | |||
@@ -780,6 +780,13 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end) | |||
780 | { | 780 | { |
781 | unsigned long addr; | 781 | unsigned long addr; |
782 | 782 | ||
783 | /* | ||
784 | * We just marked the kernel text read only above, now that | ||
785 | * we are going to free part of that, we need to make that | ||
786 | * writeable first. | ||
787 | */ | ||
788 | set_memory_rw(begin, (end - begin) >> PAGE_SHIFT); | ||
789 | |||
783 | for (addr = begin; addr < end; addr += PAGE_SIZE) { | 790 | for (addr = begin; addr < end; addr += PAGE_SIZE) { |
784 | ClearPageReserved(virt_to_page(addr)); | 791 | ClearPageReserved(virt_to_page(addr)); |
785 | init_page_count(virt_to_page(addr)); | 792 | init_page_count(virt_to_page(addr)); |
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 9b69fa54a831..f97ace7a55e5 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
@@ -570,6 +570,7 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end) | |||
570 | * 2Mb kernel mapping just for this debug feature. | 570 | * 2Mb kernel mapping just for this debug feature. |
571 | */ | 571 | */ |
572 | if (begin >= __START_KERNEL_map) { | 572 | if (begin >= __START_KERNEL_map) { |
573 | set_memory_rw(begin, (end - begin)/PAGE_SIZE); | ||
573 | set_memory_np(begin, (end - begin)/PAGE_SIZE); | 574 | set_memory_np(begin, (end - begin)/PAGE_SIZE); |
574 | set_memory_nx(begin, (end - begin)/PAGE_SIZE); | 575 | set_memory_nx(begin, (end - begin)/PAGE_SIZE); |
575 | } | 576 | } |