https://github.com/torvalds/linux
Revision 9a6e7c39810e4a8bc7fc95056cefb40583fe07ef authored by Wanpeng Li on 14 September 2017, 10:54:16 UTC, committed by Radim Krčmář on 14 September 2017, 16:43:43 UTC
qemu-system-x86-8600  [004] d..1  7205.687530: kvm_entry: vcpu 2
qemu-system-x86-8600  [004] ....  7205.687532: kvm_exit: reason EXCEPTION_NMI rip 0xffffffffa921297d info ffffeb2c0e44e018 80000b0e
qemu-system-x86-8600  [004] ....  7205.687532: kvm_page_fault: address ffffeb2c0e44e018 error_code 0
qemu-system-x86-8600  [004] ....  7205.687620: kvm_try_async_get_page: gva = 0xffffeb2c0e44e018, gfn = 0x427e4e
qemu-system-x86-8600  [004] .N..  7205.687628: kvm_async_pf_not_present: token 0x8b002 gva 0xffffeb2c0e44e018
    kworker/4:2-7814  [004] ....  7205.687655: kvm_async_pf_completed: gva 0xffffeb2c0e44e018 address 0x7fcc30c4e000
qemu-system-x86-8600  [004] ....  7205.687703: kvm_async_pf_ready: token 0x8b002 gva 0xffffeb2c0e44e018
qemu-system-x86-8600  [004] d..1  7205.687711: kvm_entry: vcpu 2

After running some memory intensive workload in guest, I catch the kworker
which completes the GUP too quickly, and queues an "Page Ready" #PF exception
after the "Page not Present" exception before the next vmentry as the above
trace which will result in #DF injected to guest.

This patch fixes it by clearing the queue for "Page not Present" if "Page Ready"
occurs before the next vmentry since the GUP has already got the required page
and shadow page table has already been fixed by "Page Ready" handler.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Fixes: 7c90705bf2a3 ("KVM: Inject asynchronous page fault into a PV guest if page is swapped out.")
[Changed indentation and added clearing of injected. - Radim]
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
1 parent 648d453
History
Tip revision: 9a6e7c39810e4a8bc7fc95056cefb40583fe07ef authored by Wanpeng Li on 14 September 2017, 10:54:16 UTC
KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously
Tip revision: 9a6e7c3
File Mode Size
9p
adfs
affs
afs
autofs4
befs
bfs
btrfs
cachefiles
ceph
cifs
coda
configfs
cramfs
crypto
debugfs
devpts
dlm
ecryptfs
efivarfs
efs
exofs
exportfs
ext2
ext4
f2fs
fat
freevxfs
fscache
fuse
gfs2
hfs
hfsplus
hostfs
hpfs
hugetlbfs
isofs
jbd2
jffs2
jfs
kernfs
lockd
minix
ncpfs
nfs
nfs_common
nfsd
nilfs2
nls
notify
ntfs
ocfs2
omfs
openpromfs
orangefs
overlayfs
proc
pstore
qnx4
qnx6
quota
ramfs
reiserfs
romfs
squashfs
sysfs
sysv
tracefs
ubifs
udf
ufs
xfs
Kconfig -rw-r--r-- 7.1 KB
Kconfig.binfmt -rw-r--r-- 7.2 KB
Makefile -rw-r--r-- 4.2 KB
aio.c -rw-r--r-- 46.4 KB
anon_inodes.c -rw-r--r-- 4.9 KB
attr.c -rw-r--r-- 9.2 KB
bad_inode.c -rw-r--r-- 5.3 KB
binfmt_aout.c -rw-r--r-- 10.8 KB
binfmt_elf.c -rw-r--r-- 62.8 KB
binfmt_elf_fdpic.c -rw-r--r-- 47.0 KB
binfmt_em86.c -rw-r--r-- 2.8 KB
binfmt_flat.c -rw-r--r-- 27.8 KB
binfmt_misc.c -rw-r--r-- 18.3 KB
binfmt_script.c -rw-r--r-- 3.0 KB
block_dev.c -rw-r--r-- 53.2 KB
buffer.c -rw-r--r-- 94.0 KB
char_dev.c -rw-r--r-- 16.6 KB
compat.c -rw-r--r-- 5.1 KB
compat_binfmt_elf.c -rw-r--r-- 3.4 KB
compat_ioctl.c -rw-r--r-- 45.4 KB
coredump.c -rw-r--r-- 21.3 KB
dax.c -rw-r--r-- 40.4 KB
dcache.c -rw-r--r-- 94.7 KB
dcookies.c -rw-r--r-- 6.9 KB
direct-io.c -rw-r--r-- 38.5 KB
drop_caches.c -rw-r--r-- 1.6 KB
eventfd.c -rw-r--r-- 12.9 KB
eventpoll.c -rw-r--r-- 63.8 KB
exec.c -rw-r--r-- 46.1 KB
fcntl.c -rw-r--r-- 22.5 KB
fhandle.c -rw-r--r-- 6.8 KB
file.c -rw-r--r-- 23.2 KB
file_table.c -rw-r--r-- 8.6 KB
filesystems.c -rw-r--r-- 6.5 KB
fs-writeback.c -rw-r--r-- 70.5 KB
fs_pin.c -rw-r--r-- 2.0 KB
fs_struct.c -rw-r--r-- 3.3 KB
inode.c -rw-r--r-- 54.8 KB
internal.h -rw-r--r-- 4.5 KB
ioctl.c -rw-r--r-- 17.3 KB
iomap.c -rw-r--r-- 24.9 KB
libfs.c -rw-r--r-- 30.6 KB
locks.c -rw-r--r-- 73.7 KB
mbcache.c -rw-r--r-- 11.8 KB
mount.h -rw-r--r-- 3.8 KB
mpage.c -rw-r--r-- 20.6 KB
namei.c -rw-r--r-- 120.9 KB
namespace.c -rw-r--r-- 83.8 KB
no-block.c -rw-r--r-- 688 bytes
nsfs.c -rw-r--r-- 5.6 KB
open.c -rw-r--r-- 28.4 KB
pipe.c -rw-r--r-- 27.3 KB
pnode.c -rw-r--r-- 15.3 KB
pnode.h -rw-r--r-- 1.9 KB
posix_acl.c -rw-r--r-- 21.4 KB
proc_namespace.c -rw-r--r-- 7.8 KB
read_write.c -rw-r--r-- 46.6 KB
readdir.c -rw-r--r-- 11.2 KB
select.c -rw-r--r-- 34.8 KB
seq_file.c -rw-r--r-- 22.7 KB
signalfd.c -rw-r--r-- 9.2 KB
splice.c -rw-r--r-- 40.0 KB
stack.c -rw-r--r-- 2.5 KB
stat.c -rw-r--r-- 19.1 KB
statfs.c -rw-r--r-- 9.4 KB
super.c -rw-r--r-- 38.9 KB
sync.c -rw-r--r-- 9.9 KB
timerfd.c -rw-r--r-- 13.3 KB
userfaultfd.c -rw-r--r-- 48.1 KB
utimes.c -rw-r--r-- 7.1 KB
xattr.c -rw-r--r-- 23.3 KB

back to top