linux/arch/mips/include/asm
Markos Chandras f1014d1b79 MIPS: mm: Use the Hardware Page Table Walker if the core supports it
The Hardware Page Table Walker aims to speed up TLB refill exceptions
by handling them in the hardware level instead of having a software
TLB refill handler. However, a TLB refill exception can still be
thrown in certain cases such as, synchronus exceptions, or address
translation or memory errors during the HTW operation. As a result of
which, HTW must not be considered a complete replacement for the TLB
refill software handler, but rather a fast-path for it.
For HTW to work, the PWBase register must contain the task's page
global directory address so the HTW will kick in on TLB refill
exceptions.

Due to HTW being a separate engine embedded deep in the CPU pipeline,
we need to restart the HTW everytime a PTE changes to avoid HTW
fetching a old entry from the page tables. It's also necessary to
restart the HTW on context switches to prevent it from fetching a
page from the previous process. Finally, since HTW is using the
entryhi register to write the translations to the TLB, it's necessary
to stop the HTW whenever the entryhi changes (eg for tlb probe
perations) and enable it back afterwards.

== Performance ==

The following trivial test was used to measure the performance of the
HTW. Using the same root filesystem, the following command was used
to measure the number of tlb refill handler executions with and
without (using 'nohtw' kernel parameter) HTW support.  The kernel was
modified to use a scratch register as a counter for the TLB refill
exceptions.

find /usr -type f -exec ls -lh {} \;

HTW Enabled:
TLB refill exceptions: 12306

HTW Disabled:
TLB refill exceptions: 17805

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: Markos Chandras <markos.chandras@imgtec.com>
Patchwork: https://patchwork.linux-mips.org/patch/7336/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2014-08-02 00:06:39 +02:00
..
dec DEC: Document the R4k MB ASIC mini interrupt controller 2014-06-04 22:50:41 +02:00
emma MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
fw MIPS: malta: malta-memory: Add support for the 'ememsize' variable 2014-03-26 23:09:20 +01:00
ip32 MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
lasat MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
mach-ar7 Revert "MIPS: make CAC_ADDR and UNCAC_ADDR account for PHYS_OFFSET" 2013-07-01 15:10:58 +02:00
mach-ath79 mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
mach-au1x00 MIPS: Alchemy: remove old clock support 2014-07-30 14:12:00 +02:00
mach-bcm47xx MIPS: BCM47xx: Distinguish WRT54G series devices by boardtype 2014-07-30 22:16:02 +02:00
mach-bcm63xx MIPS: BCM63xx: Append irq line to irq_{stat,mask}* 2014-07-30 15:28:11 +02:00
mach-cavium-octeon MIPS: Octeon: Add twsi interrupt initialization for OCTEON 3XXX, 5XXX, 63XX 2014-06-04 22:50:42 +02:00
mach-cobalt MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
mach-db1x00 MIPS: Alchemy: fold mach-db1xxx/db1x00 headers into board code 2014-03-26 23:09:21 +01:00
mach-dec MIPS: DECstation CPU feature overrides 2013-10-29 21:24:46 +01:00
mach-emma2rh MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
mach-generic mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
mach-ip22 MIPS: IP22: This platform may come with either MIPS III or MIPS IV CPUs. 2014-05-23 15:10:59 +02:00
mach-ip27 MIPS: Remove unnecessary platform dma helper functions 2013-10-29 21:24:40 +01:00
mach-ip28 MIPS: Optimize current_cpu_type() for better code. 2013-09-17 18:50:53 +02:00
mach-ip32 MIPS: Remove unnecessary platform dma helper functions 2013-10-29 21:24:40 +01:00
mach-jazz mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
mach-jz4740 ASoC: jz4740: Improve build test coverage 2014-04-23 12:18:44 +01:00
mach-lantiq MIPS: Lantiq: Falcon: add cpu-feature-override.h 2013-09-03 23:22:16 +02:00
mach-lasat MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
mach-loongson MIPS: Loongson: Rename CONFIG_LEMOTE_MACH3A to CONFIG_LOONGSON_MACH3X 2014-07-30 21:47:33 +02:00
mach-loongson1 MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
mach-malta MIPS: Malta: add suspend state entry code 2014-05-30 21:01:09 +02:00
mach-netlogic MIPS: Netlogic: Fix uniprocessor compilation 2014-05-30 16:44:55 +02:00
mach-paravirt MIPS: Add code for new system 'paravirt' 2014-06-02 12:34:20 +02:00
mach-pmcs-msp71xx MIPS: MSP71xx: Remove checks for two macros 2014-05-23 15:12:39 +02:00
mach-pnx833x MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
mach-ralink MIPS: Ralink: Remove surviving RM9000 bits. 2014-05-23 15:12:40 +02:00
mach-rc32434 MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
mach-rm MIPS: PMC-Sierra Yosemite: Remove support. 2012-12-13 18:15:30 +01:00
mach-sead3 MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
mach-sibyte MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
mach-tx39xx MIPS: PMC-Sierra Yosemite: Remove support. 2012-12-13 18:15:30 +01:00
mach-tx49xx MIPS: PMC-Sierra Yosemite: Remove support. 2012-12-13 18:15:30 +01:00
mach-vr41xx MIPS: PMC-Sierra Yosemite: Remove support. 2012-12-13 18:15:30 +01:00
mips-boards Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-06-09 18:10:34 -07:00
netlogic MIPS: Add MSI support for XLP9XX 2014-05-30 16:51:02 +02:00
octeon MIPS: Octeon: Remove checks for CONFIG_CAVIUM_GDB 2014-05-23 15:12:39 +02:00
pci MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
sgi MIPS: IP22/IP28: Improve GIO support 2014-06-04 22:50:42 +02:00
sibyte MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
sn MIPS: IP27: Remove pfn_t. 2013-05-08 03:51:58 +02:00
txx9 MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
vr41xx MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
xtalk MIPS: IP27: Fix build errors with CONFIG_PCI disabled. 2013-06-21 18:07:00 +02:00
Kbuild MIPS: Remove asm/user.h 2014-08-02 00:06:37 +02:00
abi.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
addrspace.h MIPS: Add NUMA support for Loongson-3 2014-07-30 21:46:19 +02:00
amon.h MIPS: APRP: Code formatting clean-ups. 2014-01-22 20:19:02 +01:00
arch_hweight.h
asm-eva.h MIPS: asm: Add wrappers for EVA/non-EVA instructions 2014-03-26 23:09:12 +01:00
asm-offsets.h
asm.h MIPS: Fix gigaton of warning building with microMIPS. 2014-03-31 18:17:12 +02:00
asmmacro-32.h MIPS: Don't assume 64-bit FP registers for context switch 2014-03-26 23:09:10 +01:00
asmmacro-64.h MIPS: Support for 64-bit FP with O32 binaries 2014-01-13 23:40:56 +01:00
asmmacro.h MIPS: Add microMIPS MSA support. 2014-06-04 22:50:41 +02:00
atomic.h arch,mips: Convert smp_mb__*() 2014-04-18 14:20:38 +02:00
barrier.h arch,mips: Convert smp_mb__*() 2014-04-18 14:20:38 +02:00
bcache.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
bitops.h MIPS: asm/bitops.h: Guard CLZ with `.set mips32' 2014-07-30 15:51:55 +02:00
bmips.h MIPS: BMIPS: add a smp ops registration helper 2014-01-22 20:18:52 +01:00
bootinfo.h MIPS: Loongson 3: Add Lemote-3A machtypes definition 2014-03-31 18:17:12 +02:00
branch.h MIPS: Sort out mm_isBranchInstr. 2014-05-23 15:12:37 +02:00
break.h MIPS: Quit exporting kernel internel break codes to uapi/asm/break.h 2013-02-20 18:24:24 +01:00
bug.h
bugs.h
cache.h MIPS: Rename .data..mostly and properly handle it in linker script 2011-05-10 18:15:24 +01:00
cacheflush.h MIPS: add kmap_noncoherent to wire a cached non-coherent TLB entry 2014-05-28 16:20:14 +01:00
cacheops.h MIPS: fix case mismatch in local_r4k_flush_icache_range() 2014-01-15 14:19:42 +07:00
cevt-r4k.h MIPS: MSP: Fix build error 2011-05-10 18:15:24 +01:00
checksum.h MIPS: asm: checksum: Add MIPS specific csum_and_copy_from_user function 2014-03-26 23:09:17 +01:00
clkdev.h clk: Add common __clk_get(), __clk_put() implementations 2013-12-04 17:19:44 +01:00
clock.h MIPS: clock.h: Remove declaration of cpu_wait. 2013-05-22 01:34:25 +02:00
cmp.h MIPS: SMP: Remove plat_smp_ops cpus_done method. 2014-05-27 11:06:42 +02:00
cmpxchg.h MIPS: Fix gigaton of warning building with microMIPS. 2014-03-31 18:17:12 +02:00
compat-signal.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
compat.h Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2013-03-02 07:44:16 -08:00
compiler.h
cop2.h MIPS: Loongson-3: Enable the COP2 usage 2014-07-30 21:47:17 +02:00
cpu-features.h MIPS: cpu: Add new cpu option for Hardware Table Walker. 2014-08-02 00:06:38 +02:00
cpu-info.h MIPS: cpu-info: Change the cpu options variable to unsigned long long 2014-08-02 00:06:38 +02:00
cpu-type.h MIPS: OCTEON: Add OCTEON3 to __get_cpu_type 2014-05-30 21:01:11 +02:00
cpu.h MIPS: cpu: Add new cpu option for Hardware Table Walker. 2014-08-02 00:06:38 +02:00
debug.h
delay.h MIPS: Make __{,n,u}delay declarations match definitions and generic delay.h 2012-10-16 22:20:03 +02:00
device.h
div64.h
dma-coherence.h MIPS: improve checks for noncoherent DMA 2014-01-22 20:43:10 +01:00
dma-mapping.h MIPS: Loongson: Add swiotlb to support All-Memory DMA 2014-03-31 18:17:12 +02:00
dma.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
ds1287.h
dsp.h MIPS: DSP: Fix DSP mask for registers. 2013-01-24 13:20:09 +01:00
edac.h
elf.h MIPS: Remove old core dump functions 2014-08-02 00:06:37 +02:00
errno.h UAPI: (Scripted) Disintegrate arch/mips/include/asm 2012-10-09 09:47:14 +01:00
exec.h Disintegrate asm/system.h for MIPS 2012-03-28 18:30:02 +01:00
fb.h
fixmap.h MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
floppy.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
fpregdef.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
fpu.h MIPS: math-emu: Inline fpu_emulator_init_fpu() 2014-05-23 15:12:37 +02:00
fpu_emulator.h MIPS: math-emu: Add IEEE754 exception statistics to debugfs 2014-05-30 11:55:23 +02:00
ftrace.h MIPS: ftrace: Tweak safe_load()/safe_store() macros 2014-03-19 23:18:40 +01:00
futex.h MIPS: Fix gigaton of warning building with microMIPS. 2014-03-31 18:17:12 +02:00
gic.h MIPS: allow GIC clockevent device config from other CPUs 2014-05-02 16:39:11 +01:00
gio_device.h MIPS: IP22/IP28: Improve GIO support 2014-06-04 22:50:42 +02:00
gpio.h
gt64120.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
hardirq.h
hazards.h MIPS: Get rid of the use of .macro in C code. 2013-04-11 15:39:51 +02:00
highmem.h mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
hugetlb.h mm/hugetlb: add more arch-defined huge_pte functions 2013-04-29 15:54:33 -07:00
hw_irq.h atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
i8259.h
ide.h
idle.h MIPS: cpuidle wait instruction state 2014-05-28 16:20:34 +01:00
inst.h MIPS: MIPS16e: Support handling of delay slots. 2013-05-09 17:55:20 +02:00
io.h MIPS: Fix gigaton of warning building with microMIPS. 2014-03-31 18:17:12 +02:00
irq.h MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
irq_cpu.h MIPS: add irqdomain support for the CPU IRQ controller 2013-02-17 01:25:34 +01:00
irq_gt641xx.h
irq_regs.h
irqflags.h MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
isadep.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
jazz.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
jazzdma.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
jump_label.h compiler/gcc4: Add quirk for 'asm goto' miscompilation bug 2013-10-11 07:39:14 +02:00
kdebug.h
kexec.h MIPS: kdump: Add support 2012-12-13 16:46:47 +01:00
kgdb.h
kmap_types.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
kprobes.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
kvm_host.h MIPS: KVM: Whitespace fixes in kvm_mips_callbacks 2014-05-30 13:05:07 +02:00
kvm_para.h MIPS: Add functions for hypervisor call 2014-05-30 21:01:11 +02:00
linkage.h consolidate cond_syscall and SYSCALL_ALIAS declarations 2013-03-03 22:55:19 -05:00
local.h MIPS: Fix gigaton of warning building with microMIPS. 2014-03-31 18:17:12 +02:00
m48t37.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
mc146818-time.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
mc146818rtc.h
mips-cm.h MIPS: CM: use __raw_ memory access functions 2014-03-31 18:17:13 +02:00
mips-cpc.h MIPS: CPC: provide locking functions 2014-05-02 16:39:14 +01:00
mips_machine.h MIPS: move mips_{set,get}_machine_name() to a more generic place 2013-05-08 01:19:07 +02:00
mips_mt.h MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
mipsmtregs.h MIPS: MT: define write_c0_tchalt macro 2014-05-28 16:20:22 +01:00
mipsprom.h MIPS: SNI: Fix conflicting wrapper symbols for headers. 2011-10-20 15:00:18 +01:00
mipsregs.h MIPS: asm: Add register definitions for Hardware Table Walker 2014-08-02 00:06:38 +02:00
mmu.h
mmu_context.h MIPS: mm: Use the Hardware Page Table Walker if the core supports it 2014-08-02 00:06:39 +02:00
mmzone.h
module.h MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
msa.h Merge branch '3.15-fixes' into mips-for-linux-next 2014-06-04 22:53:02 +02:00
msc01_ic.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
nile4.h mips: Update the email address of Geert Uytterhoeven 2014-06-02 16:34:41 +02:00
paccess.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
page.h MIPS: asm: page: Allow __pa_symbol overrides 2014-03-26 23:09:18 +01:00
pci.h PCI: Turn pcibios_penalize_isa_irq() into a weak function 2014-05-27 16:23:58 -06:00
perf_event.h MIPS, Perf-events: Work with irq_work 2011-03-14 21:07:26 +01:00
pgalloc.h mips: handle pgtable_page_ctor() fail 2013-11-15 09:32:18 +09:00
pgtable-32.h MIPS: BCM47XX: Detect more then 128 MiB of RAM (HIGHMEM) 2014-07-30 23:27:02 +02:00
pgtable-64.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
pgtable-bits.h MIPS: Loongson: Add basic Loongson-3 definition 2014-03-31 18:17:12 +02:00
pgtable.h MIPS: mm: Use the Hardware Page Table Walker if the core supports it 2014-08-02 00:06:39 +02:00
pm-cps.h MIPS: pm-cps: add PM state entry code for CPS systems 2014-05-28 16:20:31 +01:00
pm.h Merge branch 'wip-mips-pm' of https://github.com/paulburton/linux into mips-for-linux-next 2014-05-29 15:08:23 +02:00
pmon.h
prefetch.h
processor.h MIPS: Basic MSA context switching support 2014-03-26 23:09:10 +01:00
prom.h mips: convert fdt pointers to opaque pointers 2014-04-30 00:59:13 -05:00
ptrace.h MIPS: ptrace: Fix user pt_regs definition, use in ptrace_{get, set}regs() 2014-08-02 00:06:37 +02:00
r4k-timer.h MIPS: Synchronize MIPS count one CPU at a time 2012-08-17 10:57:28 +02:00
r4kcache.h MIPS: Add minimal support for OCTEON3 to c-r4k.c 2014-05-30 21:01:10 +02:00
reboot.h
reg.h MIPS: asm/reg.h: Move to uapi 2014-08-02 00:06:38 +02:00
regdef.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
rtlx.h MIPS: APRP: Code formatting clean-ups. 2014-01-22 20:19:02 +01:00
seccomp.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
setup.h MIPS: Add 8250/16550 serial early printk driver 2013-10-29 21:24:36 +01:00
sgialib.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
sgiarcs.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
shmparam.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
sigcontext.h Revert "MIPS: Save/restore MSA context around signals" 2014-06-26 10:48:18 +01:00
siginfo.h UAPI: (Scripted) Disintegrate arch/mips/include/asm 2012-10-09 09:47:14 +01:00
signal.h Fix breakage in MIPS siginfo handling 2013-03-19 19:15:52 +01:00
sim.h mips: switch to generic sys_fork() and sys_clone() 2013-02-03 18:33:02 -05:00
smp-cps.h MIPS: pm-cps: Prevent use of mips_cps_* without CPS SMP 2014-07-30 20:47:39 +02:00
smp-ops.h MIPS: SMP: Remove plat_smp_ops cpus_done method. 2014-05-27 11:06:42 +02:00
smp.h MIPS: Support CPU topology files in sysfs 2014-07-30 21:45:39 +02:00
sni.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
socket.h UAPI: (Scripted) Disintegrate arch/mips/include/asm 2012-10-09 09:47:14 +01:00
sparsemem.h MIPS: Add NUMA support for Loongson-3 2014-07-30 21:46:19 +02:00
spinlock.h MIPS: Remove redundant instructions from arch_spin_{,try}lock. 2013-04-26 17:18:24 +02:00
spinlock_types.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
spram.h
stackframe.h MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
stackprotector.h MIPS: initial stack protector support 2013-07-01 15:10:48 +02:00
stacktrace.h MIPS: Add new unwind_stack variant 2011-06-15 14:35:33 +02:00
string.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
suspend.h PM / Hibernate: Remove arch_prepare_suspend() 2011-05-24 23:35:55 +02:00
switch_to.h MIPS: Basic MSA context switching support 2014-03-26 23:09:10 +01:00
syscall.h MIPS: Add new AUDIT_ARCH token for the N32 ABI on MIPS64 2014-05-14 01:39:54 +02:00
termios.h UAPI: (Scripted) Disintegrate arch/mips/include/asm 2012-10-09 09:47:14 +01:00
thread_info.h MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
time.h MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
timex.h MIPS: Implement random_get_entropy with CP0 Random 2014-05-30 18:21:30 +02:00
tlb.h MIPS: tlb: Set the EHINV bit for TLBINVF cores when invalidating the TLB 2014-01-22 20:18:59 +01:00
tlbdebug.h
tlbflush.h
tlbmisc.h MIPS: Fix Jazz 64-bit build error. 2011-12-07 22:01:45 +00:00
topology.h sched: Remove unused mc_capable() and smt_capable() 2014-03-11 12:05:45 +01:00
traps.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
txx9irq.h
txx9pio.h
txx9tmr.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
types.h UAPI: (Scripted) Disintegrate arch/mips/include/asm 2012-10-09 09:47:14 +01:00
uaccess.h MIPS: asm: uaccess: Add EVA support for str*_user operations 2014-03-26 23:09:16 +01:00
uasm.h MIPS: uasm: Add SLT uasm instruction 2014-06-26 10:48:19 +01:00
unaligned.h
unistd.h sys_sgetmask/sys_ssetmask: add CONFIG_SGETMASK_SYSCALL 2014-06-04 16:54:14 -07:00
vdso.h
vga.h MIPS: Fix VGA_MAP_MEM macro. 2013-09-18 17:13:58 +02:00
vpe.h Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-01-30 17:20:32 -08:00
war.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
watch.h
wbflush.h