sparc64: Force the execute bit in OpenFirmware's translation entries.
[pandora-kernel.git] / arch / sparc / mm / init_64.c
index adfac23..8e073d8 100644 (file)
@@ -511,6 +511,11 @@ static void __init read_obp_translations(void)
                for (i = 0; i < prom_trans_ents; i++)
                        prom_trans[i].data &= ~0x0003fe0000000000UL;
        }
+
+       /* Force execute bit on.  */
+       for (i = 0; i < prom_trans_ents; i++)
+               prom_trans[i].data |= (tlb_type == hypervisor ?
+                                      _PAGE_EXEC_4V : _PAGE_EXEC_4U);
 }
 
 static void __init hypervisor_tlb_lock(unsigned long vaddr,
@@ -1618,18 +1623,20 @@ static void ktsb_phys_patch(void)
 {
        extern unsigned int __swapper_tsb_phys_patch;
        extern unsigned int __swapper_tsb_phys_patch_end;
-       extern unsigned int __swapper_4m_tsb_phys_patch;
-       extern unsigned int __swapper_4m_tsb_phys_patch_end;
        unsigned long ktsb_pa;
 
        ktsb_pa = kern_base + ((unsigned long)&swapper_tsb[0] - KERNBASE);
        patch_one_ktsb_phys(&__swapper_tsb_phys_patch,
                            &__swapper_tsb_phys_patch_end, ktsb_pa);
 #ifndef CONFIG_DEBUG_PAGEALLOC
+       {
+       extern unsigned int __swapper_4m_tsb_phys_patch;
+       extern unsigned int __swapper_4m_tsb_phys_patch_end;
        ktsb_pa = (kern_base +
                   ((unsigned long)&swapper_4m_tsb[0] - KERNBASE));
        patch_one_ktsb_phys(&__swapper_4m_tsb_phys_patch,
                            &__swapper_4m_tsb_phys_patch_end, ktsb_pa);
+       }
 #endif
 }