https://github.com/torvalds/linux
Revision 0d3e4d4fade6b04e933b11e69e80044f35e9cd60 authored by Marc Zyngier on 05 January 2015, 21:13:24 UTC, committed by Christoffer Dall on 29 January 2015, 22:24:57 UTC
When handling a fault in stage-2, we need to resync I$ and D$, just
to be sure we don't leave any old cache line behind.

That's very good, except that we do so using the *user* address.
Under heavy load (swapping like crazy), we may end up in a situation
where the page gets mapped in stage-2 while being unmapped from
userspace by another CPU.

At that point, the DC/IC instructions can generate a fault, which
we handle with kvm->mmu_lock held. The box quickly deadlocks, user
is unhappy.

Instead, perform this invalidation through the kernel mapping,
which is guaranteed to be present. The box is much happier, and so
am I.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
1 parent 363ef89
History
Tip revision: 0d3e4d4fade6b04e933b11e69e80044f35e9cd60 authored by Marc Zyngier on 05 January 2015, 21:13:24 UTC
arm/arm64: KVM: Use kernel mapping to perform invalidation on page fault
Tip revision: 0d3e4d4
File Mode Size
basic
coccinelle
dtc
genksyms
kconfig
ksymoops
mod
package
rt-tester
selinux
tracing
.gitignore -rw-r--r-- 116 bytes
Kbuild.include -rw-r--r-- 10.9 KB
Lindent -rwxr-xr-x 460 bytes
Makefile -rw-r--r-- 1.4 KB
Makefile.asm-generic -rw-r--r-- 683 bytes
Makefile.build -rw-r--r-- 13.4 KB
Makefile.clean -rw-r--r-- 2.9 KB
Makefile.dtbinst -rw-r--r-- 1.4 KB
Makefile.extrawarn -rw-r--r-- 2.4 KB
Makefile.fwinst -rw-r--r-- 2.0 KB
Makefile.headersinst -rw-r--r-- 4.7 KB
Makefile.help -rw-r--r-- 68 bytes
Makefile.host -rw-r--r-- 4.5 KB
Makefile.lib -rw-r--r-- 13.7 KB
Makefile.modbuiltin -rw-r--r-- 1.8 KB
Makefile.modinst -rw-r--r-- 1.2 KB
Makefile.modpost -rw-r--r-- 5.2 KB
Makefile.modsign -rw-r--r-- 1005 bytes
analyze_suspend.py -rwxr-xr-x 117.6 KB
asn1_compiler.c -rw-r--r-- 33.8 KB
bloat-o-meter -rwxr-xr-x 1.9 KB
bootgraph.pl -rwxr-xr-x 6.3 KB
checkincludes.pl -rwxr-xr-x 1.8 KB
checkkconfigsymbols.py -rw-r--r-- 4.6 KB
checkpatch.pl -rwxr-xr-x 152.5 KB
checkstack.pl -rwxr-xr-x 5.4 KB
checksyscalls.sh -rwxr-xr-x 5.6 KB
checkversion.pl -rwxr-xr-x 1.9 KB
cleanfile -rwxr-xr-x 3.4 KB
cleanpatch -rwxr-xr-x 5.0 KB
coccicheck -rwxr-xr-x 4.6 KB
config -rwxr-xr-x 4.5 KB
conmakehash.c -rw-r--r-- 6.0 KB
decode_stacktrace.sh -rwxr-xr-x 3.0 KB
decodecode -rwxr-xr-x 2.1 KB
depmod.sh -rwxr-xr-x 1.7 KB
diffconfig -rwxr-xr-x 3.7 KB
docproc.c -rw-r--r-- 13.8 KB
export_report.pl -rwxr-xr-x 4.5 KB
extract-ikconfig -rwxr-xr-x 1.6 KB
extract-vmlinux -rwxr-xr-x 1.6 KB
gcc-goto.sh -rwxr-xr-x 495 bytes
gcc-ld -rwxr-xr-x 676 bytes
gcc-version.sh -rwxr-xr-x 822 bytes
gcc-x86_32-has-stack-protector.sh -rwxr-xr-x 184 bytes
gcc-x86_64-has-stack-protector.sh -rwxr-xr-x 200 bytes
gen_initramfs_list.sh -rwxr-xr-x 7.9 KB
get_maintainer.pl -rwxr-xr-x 57.3 KB
gfp-translate -rwxr-xr-x 1.7 KB
headerdep.pl -rwxr-xr-x 3.5 KB
headers.sh -rwxr-xr-x 477 bytes
headers_check.pl -rwxr-xr-x 3.6 KB
headers_install.sh -rwxr-xr-x 1.3 KB
kallsyms.c -rw-r--r-- 16.5 KB
kernel-doc -rwxr-xr-x 72.1 KB
ld-version.sh -rwxr-xr-x 205 bytes
link-vmlinux.sh -rwxr-xr-x 5.7 KB
makelst -rwxr-xr-x 773 bytes
markup_oops.pl -rwxr-xr-x 8.1 KB
mkcompile_h -rwxr-xr-x 2.5 KB
mkmakefile -rwxr-xr-x 1.2 KB
mksysmap -rwxr-xr-x 1.3 KB
mkuboot.sh -rwxr-xr-x 379 bytes
mkversion -rw-r--r-- 74 bytes
module-common.lds -rw-r--r-- 737 bytes
namespace.pl -rwxr-xr-x 13.0 KB
objdiff -rwxr-xr-x 2.7 KB
patch-kernel -rwxr-xr-x 9.9 KB
pnmtologo.c -rw-r--r-- 11.9 KB
profile2linkerlist.pl -rwxr-xr-x 375 bytes
recordmcount.c -rw-r--r-- 12.4 KB
recordmcount.h -rw-r--r-- 16.4 KB
recordmcount.pl -rwxr-xr-x 17.7 KB
setlocalversion -rwxr-xr-x 3.9 KB
show_delta -rwxr-xr-x 3.0 KB
sign-file -rwxr-xr-x 12.2 KB
sortextable.c -rw-r--r-- 7.6 KB
sortextable.h -rw-r--r-- 5.5 KB
spelling.txt -rw-r--r-- 20.8 KB
tags.sh -rwxr-xr-x 10.2 KB
unifdef.c -rw-r--r-- 34.8 KB
ver_linux -rwxr-xr-x 3.1 KB
xz_wrap.sh -rwxr-xr-x 562 bytes

back to top