Re: [PATCH] x86/kvm: Update the comment about asynchronous page fault in exc_page_fault()

2020-10-19 Thread Paolo Bonzini
On 02/10/20 17:43, Vitaly Kuznetsov wrote:
> KVM was switched to interrupt-based mechanism for 'page ready' event
> delivery in Linux-5.8 (see commit 2635b5c4a0e4 ("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 commit b1d405751cd5 ("KVM: x86: Switch KVM guest to
> using interrupts for page ready APF delivery")) so it is not possible to
> get 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 
> ---
>  arch/x86/mm/fault.c | 13 -
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
> index 6e3e8a124903..3cf77592ac54 100644
> --- a/arch/x86/mm/fault.c
> +++ b/arch/x86/mm/fault.c
> @@ -1446,11 +1446,14 @@ DEFINE_IDTENTRY_RAW_ERRORCODE(exc_page_fault)
>   prefetchw(>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
> 

Queued, thanks.

Paolo



Re: [PATCH] x86/kvm: Update the comment about asynchronous page fault in exc_page_fault()

2020-10-05 Thread Vitaly Kuznetsov
Vitaly Kuznetsov  writes:

> KVM was switched to interrupt-based mechanism for 'page ready' event
> delivery in Linux-5.8 (see commit 2635b5c4a0e4 ("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 commit b1d405751cd5 ("KVM: x86: Switch KVM guest to
> using interrupts for page ready APF delivery")) so it is not possible to
> get older KVM (APF mechanism won't be enabled). Update the comment in
   
Sigh, this should have been

"to get #PF for a 'page ready' event even when the guest is running on
top of an older KVM"

or something like that but the part after "#" was eaten by git :-(

> exc_page_fault() to reflect the new reality.
>
> Signed-off-by: Vitaly Kuznetsov 
> ---
>  arch/x86/mm/fault.c | 13 -
>  1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
> index 6e3e8a124903..3cf77592ac54 100644
> --- a/arch/x86/mm/fault.c
> +++ b/arch/x86/mm/fault.c
> @@ -1446,11 +1446,14 @@ DEFINE_IDTENTRY_RAW_ERRORCODE(exc_page_fault)
>   prefetchw(>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

-- 
Vitaly



[PATCH] x86/kvm: Update the comment about asynchronous page fault in exc_page_fault()

2020-10-02 Thread Vitaly Kuznetsov
KVM was switched to interrupt-based mechanism for 'page ready' event
delivery in Linux-5.8 (see commit 2635b5c4a0e4 ("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 commit b1d405751cd5 ("KVM: x86: Switch KVM guest to
using interrupts for page ready APF delivery")) so it is not possible to
get 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 
---
 arch/x86/mm/fault.c | 13 -
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index 6e3e8a124903..3cf77592ac54 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -1446,11 +1446,14 @@ DEFINE_IDTENTRY_RAW_ERRORCODE(exc_page_fault)
prefetchw(>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
-- 
2.25.4