android_kernel_oneplus_msm8998/arch/mips/include/asm
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
..
dec
emma MIPS: Eleminate filenames from comments 2009-08-03 17:52:40 +01:00
fw
ip32
lasat MIPS: Lasat: Fix compilation 2009-09-17 20:07:42 +02:00
mach-ar7 MIPS: AR7: Implement clock API 2010-02-27 12:53:16 +01:00
mach-au1x00 MIPS: Alchemy: Remove prom_getcmdline() 2010-02-27 12:53:21 +01:00
mach-bcm47xx MIPS: BCM47xx: Fix gpio_direction_output 2009-06-17 11:06:28 +01:00
mach-bcm63xx MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
mach-cavium-octeon MIPS: Octeon: Set kernel_uses_llsc to false on non-SMP builds. 2009-09-17 20:07:50 +02:00
mach-cobalt Update Yoichi Yuasa's e-mail address 2009-07-03 15:45:29 +01:00
mach-db1x00 MIPS: Alchemy: Extended DB1200 board support. 2010-02-27 12:53:00 +01:00
mach-dec
mach-emma2rh
mach-generic MIPS: Pass struct device to plat_dma_addr_to_phys() 2009-06-17 11:06:24 +01:00
mach-ip22 MIPS: IP22/28: Switch over to RTC class driver 2008-10-15 12:46:51 +01:00
mach-ip27 MIPS: cpumask_of_node() should handle -1 as a node 2010-01-12 18:19:37 +01:00
mach-ip28 MIPS: IP22/28: Switch over to RTC class driver 2008-10-15 12:46:51 +01:00
mach-ip32 MIPS: Pass struct device to plat_dma_addr_to_phys() 2009-06-17 11:06:24 +01:00
mach-jazz MIPS: Pass struct device to plat_dma_addr_to_phys() 2009-06-17 11:06:24 +01:00
mach-lasat
mach-loongson MIPS: Loongson: Change the Email address of Wu Zhangjin 2010-02-27 12:53:12 +01:00
mach-malta MIPS: Malta: Remove pointless use use of CONFIG_CPU_HAS_LLSC 2009-09-17 20:07:49 +02:00
mach-mipssim
mach-pb1x00 MIPS: Alchemy: devboards: wire up new PCMCIA driver. 2010-02-27 12:52:51 +01:00
mach-pnx833x MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
mach-pnx8550
mach-powertv MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
mach-rc32434 MIPS: RB532: Cleanup cpu-features-overrides 2009-06-17 11:06:26 +01:00
mach-rm
mach-sibyte
mach-tx39xx
mach-tx49xx MIPS: RBTX4939: Add smc91x support 2008-10-27 16:18:27 +00:00
mach-vr41xx
mach-wrppmc
mach-yosemite
mips-boards MIPS: Bonito64: Make Loongson independent from Bonito64 code. 2009-12-17 01:57:06 +00:00
octeon MIPS: Cleanup switches with cases that can be merged 2010-02-27 12:53:14 +01:00
pci
pmc-sierra/msp71xx MIPS: msp71xx: remove unused prom_getcmdline() 2010-02-27 12:53:15 +01:00
sgi tree-wide: fix assorted typos all over the place 2009-12-04 15:39:55 +01:00
sibyte MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
sn MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
txx9 MIPS: TXx9: Remove forced serial console setting 2010-02-27 12:53:22 +01:00
vr41xx Update Yoichi Yuasa's e-mail address 2009-07-03 15:45:29 +01:00
xtalk
abi.h
addrspace.h
amon.h MIPS: CMP: activate CMP support 2009-07-03 15:45:26 +01:00
asm-offsets.h kbuild: move asm-offsets.h to include/generated 2009-12-12 13:08:14 +01:00
asm.h
asmmacro-32.h
asmmacro-64.h
asmmacro.h MIPS: Use EI/DI for MIPS R2. 2008-12-12 18:12:23 +00:00
atomic.h MIPS: New macro smp_mb__before_llsc. 2010-02-27 12:53:06 +01:00
auxvec.h
barrier.h MIPS: Octeon: Use optimized memory barrier primitives. 2010-02-27 12:53:06 +01:00
bcache.h
bitops.h MIPS: New macro smp_mb__before_llsc. 2010-02-27 12:53:06 +01:00
bitsperlong.h asm-generic: introduce asm/bitsperlong.h 2009-06-11 21:02:14 +02:00
bootinfo.h MIPS: Lemote 2F: Add Lynloong support 2009-12-17 01:57:18 +00:00
branch.h
break.h MIPS: Switch FPU emulator trap to BREAK instruction. 2008-10-30 14:44:34 +00:00
bug.h MIPS: Convert BUG() to use unreachable() 2009-12-05 09:10:12 -08:00
bugs.h MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
byteorder.h byteorder: make swab.h include asm/swab.h like a regular header 2009-01-14 19:56:50 -08:00
cache.h
cachectl.h
cacheflush.h block: add helpers to run flush_dcache_page() against a bio and a request's pages 2009-11-26 09:16:19 +01:00
cacheops.h
cevt-r4k.h MIPS: Have a heart for a lonely, lost header file ... 2008-10-15 12:46:49 +01:00
checksum.h MIPS: uaccess: Switch lock annotations to might_fault(). 2009-05-14 13:50:28 +01:00
clock.h MIPS: Loongson 2F: Add CPU frequency scaling support 2009-12-17 01:57:20 +00:00
cmp.h
cmpxchg.h MIPS: New macro smp_mb__before_llsc. 2010-02-27 12:53:06 +01:00
compat-signal.h
compat.h MIPS: Do not include seccomp.h from compat.h 2009-05-14 13:50:26 +01:00
compiler.h
cop2.h MIPS: Modularize COP2 handling 2009-12-17 01:57:30 +00:00
cpu-features.h MIPS: Implement Read Inhibit/eXecute Inhibit 2010-02-27 12:53:26 +01:00
cpu-info.h MIPS: 64-bit: Detect virtual memory size 2010-02-02 19:56:23 +01:00
cpu.h MIPS: Loongson 2F: Add CPU frequency scaling support 2009-12-17 01:57:20 +00:00
cputime.h
current.h
debug.h
delay.h MIPS: Fix potencial build error in <asm/delay.h> 2009-09-17 20:07:41 +02:00
device.h MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
div64.h MIPS: Rewrite <asm/div64.h> to work with gcc 4.4.0. 2009-05-14 13:50:29 +01:00
dma-mapping.h MIPS: Add DMA declare coherent memory support 2009-11-13 18:10:37 +01:00
dma.h
ds1287.h Update Yoichi Yuasa's e-mail address 2009-07-03 15:45:29 +01:00
dsp.h
edac.h
elf.h MIPS: Allow the auxv's elf_platform entry to be set. 2010-02-27 12:53:20 +01:00
emergency-restart.h
errno.h cfg80211: errno.h: define ERFKILL 2009-06-07 05:01:00 -07:00
fb.h
fcntl.h fix up O_SYNC comments 2009-12-17 11:03:24 -05:00
fixmap.h MIPS: Fix machine check exception in kmap_coherent() 2009-11-02 12:00:04 +01:00
floppy.h
fpregdef.h
fpu.h MIPS: Cleanup signal code initialization 2009-12-17 01:57:32 +00:00
fpu_emulator.h MIPS: Collect FPU emulator statistics per-CPU. 2009-12-17 01:57:08 +00:00
ftrace.h MIPS: Loongson: Change the Email address of Wu Zhangjin 2010-02-27 12:53:12 +01:00
futex.h
gcmpregs.h MIPS: GIC: Random fixes and enhancements. 2009-11-02 12:00:06 +01:00
gic.h MIPS: GIC: Random fixes and enhancements. 2009-11-02 12:00:06 +01:00
gpio.h
gt64120.h
hardirq.h MIPS: Convert to asm-generic/hardirq.h 2009-09-17 20:07:48 +02:00
hazards.h MIPS: Loongson 2 needs no hazard barriers. 2009-05-14 13:50:26 +01:00
highmem.h MIPS: Fix highmem. 2009-05-14 13:50:29 +01:00
hugetlb.h MIPS: Add support files for hugetlbfs. 2009-06-17 11:06:30 +01:00
hw_irq.h
i8253.h time: move PIT_TICK_RATE to linux/timex.h 2009-06-16 19:47:27 -07:00
i8259.h
ide.h
inst.h
io.h MIPS: add readl/write_be accessors 2010-02-27 12:53:12 +01:00
ioctl.h MIPS: ioctl.h: Cleanup. 2009-06-17 11:06:28 +01:00
ioctls.h
ipcbuf.h
irq.h MIPS: PowerTV: Fix support for timer interrupts with > 64 external IRQs 2010-01-28 00:03:31 +01:00
irq_cpu.h
irq_gt641xx.h Update Yoichi Yuasa's e-mail address 2009-07-03 15:45:29 +01:00
irq_regs.h
irqflags.h
isadep.h
jazz.h
jazzdma.h
Kbuild byteorder: make swab.h include asm/swab.h like a regular header 2009-01-14 19:56:50 -08:00
kdebug.h
kexec.h
kgdb.h
kmap_types.h kmap_types: make most arches use generic header file 2009-06-16 19:47:51 -07:00
kspd.h
linkage.h
local.h MIPS: Allow kernel use of LL/SC to be separate from the presence of LL/SC. 2009-09-17 20:07:50 +02:00
m48t37.h
mc146818-time.h mips: use bcd2bin/bin2bcd 2008-10-20 08:52:41 -07:00
mc146818rtc.h
mips_mt.h
mipsmtregs.h
mipsprom.h
mipsregs.h MIPS: Add accessor functions and bit definitions for c0_PageGrain 2010-02-27 12:53:25 +01:00
mman.h MIPS: Add missing definition for MADV_HWPOISON. 2009-12-01 16:21:25 +00:00
mmu.h
mmu_context.h MIPS: Put PGD in C0_CONTEXT for 64-bit R2 processors. 2009-12-17 01:57:01 +00:00
mmzone.h
module.h MIPS: Add Cavium OCTEON processor constants and CPU probe. 2009-01-11 09:57:22 +00:00
msc01_ic.h MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
msgbuf.h
mutex.h
nile4.h MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
paccess.h
page.h MIPS: Two-level pagetables for 64-bit kernels with 64KB pages. 2010-02-27 12:53:03 +01:00
param.h MIPS: Simplify param.h by using <asm-generic/param.h> 2010-02-27 12:53:04 +01:00
parport.h
pci.h PCI: remove pcibios_scan_all_fns() 2009-09-09 13:29:18 -07:00
percpu.h
pgalloc.h MIPS: Two-level pagetables for 64-bit kernels with 64KB pages. 2010-02-27 12:53:03 +01:00
pgtable-32.h MIPS: Implement Read Inhibit/eXecute Inhibit 2010-02-27 12:53:26 +01:00
pgtable-64.h MIPS: Implement Read Inhibit/eXecute Inhibit 2010-02-27 12:53:26 +01:00
pgtable-bits.h MIPS: Implement Read Inhibit/eXecute Inhibit 2010-02-27 12:53:26 +01:00
pgtable.h MIPS: Implement Read Inhibit/eXecute Inhibit 2010-02-27 12:53:26 +01:00
pmon.h
poll.h
posix_types.h
prefetch.h MIPS: NEC VR5500 processor support fixup 2009-03-11 21:11:07 +01:00
processor.h MIPS: Avoid clobbering struct pt_regs in kthreads 2009-08-03 17:52:41 +01:00
ptrace.h MIPS: Fix a typo in watchpoint register structure. 2009-01-30 21:32:58 +00:00
r4k-timer.h
r4kcache.h MIPS: Support 64-byte D-cache line size 2009-06-17 11:06:24 +01:00
reboot.h
reg.h MIPS: 64-bit: Fix o32 core dump 2009-07-03 15:45:27 +01:00
regdef.h
resource.h
rm9k-ocd.h
rtlx.h
scatterlist.h
seccomp.h MIPS: Fix TIF_32BIT undefined problem when seccomp is disabled 2009-03-13 23:07:59 +01:00
sections.h
segment.h
sembuf.h
serial.h
setup.h MIPS: Extend COMMAND_LINE_SIZE 2009-11-02 12:00:01 +01:00
sgialib.h MIPS: IP22: Remove an unused function 2009-12-17 01:56:56 +00:00
sgiarcs.h
sgidefs.h
shmbuf.h
shmparam.h
sigcontext.h headers_check fix: mips, sigcontext.h 2009-02-01 11:01:26 +05:30
siginfo.h
signal.h asm-generic: rename termios.h, signal.h and mman.h 2009-06-11 21:01:52 +02:00
sim.h
smp-ops.h cpumask: arch_send_call_function_ipi_mask: mips 2009-09-24 09:34:45 +09:30
smp.h MIPS: SMP: Inline arch_send_call_function_{single_ipi,ipi_mask} 2009-09-30 21:47:00 +02:00
smtc.h
smtc_ipi.h MIPS: SMTC: Avoid queing multiple reschedule IPIs 2009-11-02 12:00:06 +01:00
smtc_proc.h
smvp.h
sni.h
socket.h net: Generalize socket rx gap / receive queue overflow cmsg 2009-10-12 13:26:31 -07:00
sockios.h
sparsemem.h MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
spinlock.h MIPS: New macro smp_mb__before_llsc. 2010-02-27 12:53:06 +01:00
spinlock_types.h locking: Convert raw_rwlock to arch_rwlock 2009-12-14 23:55:32 +01:00
spram.h MIPS: SPRAM: Clean up support code a little 2009-11-02 12:00:05 +01:00
stackframe.h MIPS: Put PGD in C0_CONTEXT for 64-bit R2 processors. 2009-12-17 01:57:01 +00:00
stacktrace.h
stat.h
statfs.h
string.h
suspend.h MIPS: Add hibernation support 2009-06-17 11:06:31 +01:00
swab.h MIPS: Define __arch_swab64 for all mips r2 cpus 2009-07-03 15:45:25 +01:00
sysmips.h
system.h MIPS: New macro smp_mb__before_llsc. 2010-02-27 12:53:06 +01:00
termbits.h
termios.h MIPS: Add return value checks to user_termio_to_kernel_termios() 2009-01-30 21:32:57 +00:00
thread_info.h MIPS: Cleanup CONFIG_DEBUG_STACK_USAGE version of alloc_thread_info. 2009-11-02 12:00:01 +01:00
time.h mips: Use generic mult/shift factor calculation for clocks 2009-11-13 20:46:24 +01:00
timex.h
titan_dep.h
tlb.h
tlbdebug.h
tlbflush.h
topology.h
traps.h
txx9irq.h
txx9pio.h
txx9tmr.h
types.h asm-generic: introduce asm/bitsperlong.h 2009-06-11 21:02:14 +02:00
uaccess.h MIPS: Fix sparse warning in incompatiable argument type of clear_user. 2009-05-22 13:52:05 +01:00
uasm.h MIPS: Add TLBR and ROTR to uasm. 2010-02-27 12:53:25 +01:00
ucontext.h
unaligned.h MIPS: Avoid spurious make includecheck message 2009-09-30 21:47:02 +02:00
unistd.h MIPS: Wire up recvmmsg syscall 2009-12-01 16:15:49 -08:00
user.h
vga.h
vpe.h
war.h
watch.h
wbflush.h
xor.h