Messages in this thread | | | From | Thomas Gleixner <> | Subject | Re: [PATCH v2] x86/kvm: Disable KVM_ASYNC_PF_SEND_ALWAYS | Date | Sat, 07 Mar 2020 20:01:04 +0100 |
| |
Andy Lutomirski <luto@kernel.org> writes: > On Sat, Mar 7, 2020 at 7:47 AM Thomas Gleixner <tglx@linutronix.de> wrote: >> The host knows exactly when it injects a async PF and it can store CR2 >> and reason of that async PF in flight. >> >> On the next VMEXIT it checks whether apf_reason is 0. If apf_reason is 0 >> then it knows that the guest has read CR2 and apf_reason. All good >> nothing to worry about. >> >> If not it needs to be careful. >> >> As long as the apf_reason of the last async #PF is not cleared by the >> guest no new async #PF can be injected. That's already correct because >> in that case IF==0 which prevents a nested async #PF. >> >> If MCE, NMI trigger a real pagefault then the #PF injection needs to >> clear apf_reason and set the correct CR2. When that #PF returns then the >> old CR2 and apf_reason need to be restored. > > How is the host supposed to know when the #PF returns? Intercepting > IRET sounds like a bad idea and, in any case, is not actually a > reliable indication that #PF returned.
The host does not care about the IRET. It solely has to check whether apf_reason is 0 or not. That way it knows that the guest has read CR2 and apf_reason.
Thanks,
tglx
| |