powerpc/mm/32s: Use BATs for STRICT_KERNEL_RWX
[linux-2.6-microblaze.git] / arch / powerpc / mm / pgtable_32.c
index a000768..6e56a62 100644 (file)
@@ -353,7 +353,10 @@ void mark_initmem_nx(void)
        unsigned long numpages = PFN_UP((unsigned long)_einittext) -
                                 PFN_DOWN((unsigned long)_sinittext);
 
-       change_page_attr(page, numpages, PAGE_KERNEL);
+       if (v_block_mapped((unsigned long)_stext) + 1)
+               mmu_mark_initmem_nx();
+       else
+               change_page_attr(page, numpages, PAGE_KERNEL);
 }
 
 #ifdef CONFIG_STRICT_KERNEL_RWX
@@ -362,6 +365,11 @@ void mark_rodata_ro(void)
        struct page *page;
        unsigned long numpages;
 
+       if (v_block_mapped((unsigned long)_sinittext)) {
+               mmu_mark_rodata_ro();
+               return;
+       }
+
        page = virt_to_page(_stext);
        numpages = PFN_UP((unsigned long)_etext) -
                   PFN_DOWN((unsigned long)_stext);