1
linux/arch/mips/mm
David Daney 6dd9344cfc MIPS: Implement Read Inhibit/eXecute Inhibit
The SmartMIPS ASE specifies how Read Inhibit (RI) and eXecute Inhibit
(XI) bits in the page tables work.  The upper two bits of EntryLo{0,1}
are RI and XI when the feature is enabled in the PageGrain register.
SmartMIPS only covers 32-bit systems.  Cavium Octeon+ extends this to
64-bit systems by continuing to place the RI and XI bits in the top of
EntryLo even when EntryLo is 64-bits wide.

Because we need to carry the RI and XI bits in the PTE, the layout of
the PTE is changed.  There is a two instruction overhead in the TLB
refill hot path to get the EntryLo bits into the proper position.
Also the TLB load exception has to probe the TLB to check if RI or XI
caused the exception.

Also of note is that the layout of the PTE bits is done at compile and
runtime rather than statically.  In the 32-bit case this allows for
the same number of PFN bits as before the patch as the _PAGE_HUGE is
not supported in 32-bit kernels (we have _PAGE_NO_EXEC and
_PAGE_NO_READ instead of _PAGE_READ and _PAGE_HUGE).

The patch is tested on Cavium Octeon+, but should also work on 32-bit
systems with the Smart-MIPS ASE.

Signed-off-by: David Daney <ddaney@caviumnetworks.com>
To: linux-mips@linux-mips.org
Patchwork: http://patchwork.linux-mips.org/patch/952/
Patchwork: http://patchwork.linux-mips.org/patch/956/
Patchwork: http://patchwork.linux-mips.org/patch/962/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2010-02-27 12:53:26 +01:00
..
c-octeon.c MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
c-r3k.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
c-r4k.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
c-tx39.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
cache.c MIPS: Implement Read Inhibit/eXecute Inhibit 2010-02-27 12:53:26 +01:00
cerr-sb1.c MIPS: Sibyte: Use hweight8 instead of counting bits 2009-12-17 01:57:16 +00:00
cex-gen.S
cex-oct.S MIPS: Add Cavium OCTEON processor support files to arch/mips/cavium-octeon. 2009-01-11 09:57:21 +00:00
cex-sb1.S
dma-default.c MIPS: Add DMA declare coherent memory support 2009-11-13 18:10:37 +01:00
extable.c MIPS: Eleminate filenames from comments 2009-08-03 17:52:40 +01:00
fault.c MIPS: Implement Read Inhibit/eXecute Inhibit 2010-02-27 12:53:26 +01:00
highmem.c MIPS: Highmem: Fix build error 2010-02-22 21:42:11 +01:00
hugetlbpage.c MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
init.c MIPS: Implement Read Inhibit/eXecute Inhibit 2010-02-27 12:53:26 +01:00
ioremap.c MIPS: Use BUG_ON() where possible. 2009-03-30 14:49:44 +02:00
Makefile MIPS: Add support files for hugetlbfs. 2009-06-17 11:06:30 +01:00
page.c MIPS: Move arch/mips/mm/uasm.h to arch/mips/include/asm/uasm.h 2010-02-27 12:53:19 +01:00
pgtable-32.c
pgtable-64.c MIPS: Two-level pagetables for 64-bit kernels with 64KB pages. 2010-02-27 12:53:03 +01:00
sc-ip22.c MIPS: IP22: Make indy_sc_ops variable static 2008-11-20 19:42:33 +00:00
sc-mips.c MIPS: MIPSxx SC: Avoid destructive invalidation on partial L2 cachelines. 2009-09-30 21:47:00 +02:00
sc-r5k.c
sc-rm7k.c MIPS: IP32: Two symbols can become static 2009-05-14 13:50:24 +01:00
tlb-r3k.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
tlb-r4k.c MIPS: Implement Read Inhibit/eXecute Inhibit 2010-02-27 12:53:26 +01:00
tlb-r8k.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
tlbex-fault.S
tlbex.c MIPS: Implement Read Inhibit/eXecute Inhibit 2010-02-27 12:53:26 +01:00
uasm.c MIPS: Add TLBR and ROTR to uasm. 2010-02-27 12:53:25 +01:00