linux/arch
David S. Miller f4142cba4e sparc64: Force the execute bit in OpenFirmware's translation entries.
In the OF 'translations' property, the template TTEs in the mappings
never specify the executable bit.  This is the case even though some
of these mappings are for OF's code segment.

Therefore, we need to force the execute bit on in every mapping.

This problem can only really trigger on Niagara/sun4v machines and the
history behind this is a little complicated.

Previous to sun4v, the sun4u TTE entries lacked a hardware execute
permission bit.  So OF didn't have to ever worry about setting
anything to handle executable pages.  Any valid TTE loaded into the
I-TLB would be respected by the chip.

But sun4v Niagara chips have a real hardware enforced executable bit
in their TTEs.  So it has to be set or else the I-TLB throws an
instruction access exception with type code 6 (protection violation).

We've been extremely fortunate to not get bitten by this in the past.

The best I can tell is that the OF's mappings for it's executable code
were mapped using permanent locked mappings on sun4v in the past.
Therefore, the fact that we didn't have the exec bit set in the OF
translations we would use did not matter in practice.

Thanks to Greg Onufer for helping me track this down.

Signed-off-by: David S. Miller <davem@davemloft.net>
2011-09-29 12:18:59 -07:00
..
alpha All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
arm Merge branch 'rmobile-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-3.x 2011-08-29 13:37:17 -07:00
avr32 All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
blackfin All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
cris All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
frv All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
h8300 All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
ia64 All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
m32r All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
m68k All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
microblaze All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
mips All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
mn10300 All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
openrisc
parisc Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/parisc-2.6 2011-08-04 06:36:20 -10:00
powerpc arch/powerpc/sysdev/fsl_rio.c: correct IECSR register clear value 2011-08-25 18:51:06 -07:00
s390 All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
score
sh Merge branch 'sh-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-3.x 2011-08-29 13:34:48 -07:00
sparc sparc64: Force the execute bit in OpenFirmware's translation entries. 2011-09-29 12:18:59 -07:00
tile Merge branch 'apei-release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2011-08-03 21:53:27 -10:00
um
unicore32 Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2011-07-29 23:35:05 -07:00
x86 All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
xtensa All Arch: remove linkage for sys_nfsservctl system call 2011-08-26 15:09:58 -07:00
.gitignore
Kconfig Add Kconfig option ARCH_HAVE_NMI_SAFE_CMPXCHG 2011-08-03 11:12:37 -04:00