freebsd-dev/sys/arm
Svatopluk Kraus d18f8e22ec Take into account race conditions in case of accessed or modified bit
emulation in fast path of data/prefetch abort common routine. Process
these bits only if related page table entries are consistent with
provided abort info. In case of inconsistency, do nothing and let
processor to signal new abort if still needed.

The mapping related to an abort may be a subject of change concurrently.
The situation is more evident on multicore machines. Mapping may be
removed on one core while being used on another one before TLB flush
happened. Memory swapping process may be an example. Or, two or more
aborts may be signaled for the same page on more cores concurrently.
While an abort on one core may cause a promotion of related mapping,
an abort on another core may be inconsistent then as related mapping
was promoted. A question is how much real the issue may be on single
core machine. However, it's better to play safe even for these machines.

This change may solve some "PT2MAP abort" panics reported rarely.
The revision of pmap_fault() was initiated thanks to stack backtrace
provided by Bob Prohaska (fbsd at www.zefox.net).

While here, INVARIANTS block was changed. The previous check had iffy
value as only one entry from many was checked from L2 page table.

Reviewed by:	mmel
MFC after:	3 weeks
2017-11-02 14:08:38 +00:00
..
allwinner Allwinner: Fix compilation 2017-10-19 21:34:53 +00:00
altera/socfpga Tag all armv7 kernels as such in their machine config line. 2017-10-05 23:01:50 +00:00
amlogic/aml8726 Tag all armv7 kernels as such in their machine config line. 2017-10-05 23:01:50 +00:00
annapurna/alpine Tag all armv7 kernels as such in their machine config line. 2017-10-05 23:01:50 +00:00
arm Take into account race conditions in case of accessed or modified bit 2017-11-02 14:08:38 +00:00
at91 Defer attaching and probing iicbus and its children until interrupts are 2017-09-13 16:54:27 +00:00
broadcom/bcm2835 Tag all armv7 kernels as such in their machine config line. 2017-10-05 23:01:50 +00:00
cavium/cns11xx Allow setting access-width for UART registers. 2017-02-27 20:08:42 +00:00
cloudabi32 Move struct syscall_args syscall arguments parameters container into 2017-06-12 21:03:23 +00:00
conf Update several more URLs 2017-10-29 08:17:03 +00:00
freescale Fix imx6 hdmi init after r323553, which used a config_intrhook to defer the 2017-10-08 18:38:22 +00:00
include Add a 'place holder' arm struct efi_fb until a real one comes 2017-10-26 16:36:27 +00:00
lpc Add and use a MMC_DECLARE_BRIDGE macro for declaring mmc(4) bridges 2017-03-07 22:42:44 +00:00
mv Tag all armv7 kernels as such in their machine config line. 2017-10-05 23:01:50 +00:00
nvidia tegra: Do not define early printf function 2017-10-19 20:52:17 +00:00
qemu Tag all armv7 kernels as such in their machine config line. 2017-10-05 23:01:50 +00:00
ralink [arm] [rt1310] add initial RT1310 SoC code. 2017-05-06 06:14:46 +00:00
rockchip Tag all armv7 kernels as such in their machine config line. 2017-10-05 23:01:50 +00:00
samsung/exynos Tag all armv7 kernels as such in their machine config line. 2017-10-05 23:01:50 +00:00
ti Tag all armv7 kernels as such in their machine config line. 2017-10-05 23:01:50 +00:00
versatile Move the simple armv6 only timer drivers to require MULTIDELAY to help 2017-07-04 18:07:09 +00:00
xilinx Tag all armv7 kernels as such in their machine config line. 2017-10-05 23:01:50 +00:00
xscale i81342 is little endian, not big endian. 2017-09-19 20:33:22 +00:00