mirror of
https://github.com/torvalds/linux.git
synced 2024-11-29 07:31:29 +00:00
x86/kvm: Update the comment about asynchronous page fault in exc_page_fault()
KVM was switched to interrupt-based mechanism for 'page ready' event delivery in Linux-5.8 (see commit2635b5c4a0
("KVM: x86: interrupt based APF 'page ready' event delivery")) and #PF (ab)use for 'page ready' event delivery was removed. Linux guest switched to this new mechanism exclusively in 5.9 (see commitb1d405751c
("KVM: x86: Switch KVM guest to using interrupts for page ready APF delivery")) so it is not possible to get #PF for a 'page ready' event even when the guest is running on top of an older KVM (APF mechanism won't be enabled). Update the comment in exc_page_fault() to reflect the new reality. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Message-Id: <20201002154313.1505327-1-vkuznets@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
8f116a6c73
commit
66af4f5cb1
@ -1446,11 +1446,14 @@ DEFINE_IDTENTRY_RAW_ERRORCODE(exc_page_fault)
|
||||
prefetchw(¤t->mm->mmap_lock);
|
||||
|
||||
/*
|
||||
* KVM has two types of events that are, logically, interrupts, but
|
||||
* are unfortunately delivered using the #PF vector. These events are
|
||||
* "you just accessed valid memory, but the host doesn't have it right
|
||||
* now, so I'll put you to sleep if you continue" and "that memory
|
||||
* you tried to access earlier is available now."
|
||||
* KVM uses #PF vector to deliver 'page not present' events to guests
|
||||
* (asynchronous page fault mechanism). The event happens when a
|
||||
* userspace task is trying to access some valid (from guest's point of
|
||||
* view) memory which is not currently mapped by the host (e.g. the
|
||||
* memory is swapped out). Note, the corresponding "page ready" event
|
||||
* which is injected when the memory becomes available, is delived via
|
||||
* an interrupt mechanism and not a #PF exception
|
||||
* (see arch/x86/kernel/kvm.c: sysvec_kvm_asyncpf_interrupt()).
|
||||
*
|
||||
* We are relying on the interrupted context being sane (valid RSP,
|
||||
* relevant locks not held, etc.), which is fine as long as the
|
||||
|
Loading…
Reference in New Issue
Block a user