From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Wanpeng Li <kernellwp@gmail.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
kvm <kvm@vger.kernel.org>, Paolo Bonzini <pbonzini@redhat.com>,
Wanpeng Li <wanpeng.li@hotmail.com>
Subject: Re: [PATCH 3/4] KVM: async_pf: Force a nested vmexit if the injected #PF is async_pf
Date: Wed, 14 Jun 2017 14:52:22 +0200 [thread overview]
Message-ID: <20170614125221.GA2343@potion> (raw)
In-Reply-To: <CANRm+CzM2c_LD0MWHwj5RLdANnxdTzoL0G0uO1NKUiRZR0BEdw@mail.gmail.com>
2017-06-14 09:07+0800, Wanpeng Li:
> 2017-06-14 2:55 GMT+08:00 Radim Krčmář <rkrcmar@redhat.com>:
> > Using vcpu->arch.cr2 is suspicious as VMX doesn't update CR2 on VM
> > exits; isn't this going to change the CR2 visible in L2 guest after a
> > nested VM entry?
>
> Sorry, I don't fully understand the question. As you know this
> vcpu->arch.cr2 which includes token is set before async pf injection,
Yes, I'm thinking that setting vcpu->arch.cr2 is a mistake in this case.
> and L1 will intercept it from EXIT_QUALIFICATION during nested vmexit,
Right, so we do not need to have the token in CR2, because L1 is not
going to look at it.
> why it can change the CR2 visible in L2 guest after a nested VM entry?
Sorry, the situation is too convoluted to be expressed in one sentence:
1) L2 is running with CR2 = L2CR2
3) VMX exits (say, unrelated EXTERNAL_INTERRUPT) and L0 stores L2CR2 in
vcpu->arch.cr2
2) APF for L1 has completed
4) L0 KVM wants to inject APF and sets vcpu->arch.cr2 = APFT
5) L0 KVM does a nested VM exit to L1, EXIT_QUALIFICATION = APFT
6) L0 KVM enters L1 with CR2 = vcpu->arch.cr2 = APFT
7) L1 stores APFT as L2's CR2
8) L1 handles APF, maybe reschedules, but eventually comes back to this
L2's thread
9) after some time, L1 enters L2 with CR2 = APFT
10) L2 is running with CR2 = APTF
The original L2CR2 is lost and we'd introduce a bug if L2 wanted to look
at it, e.g. it was in a process of handling its #PF.
next prev parent reply other threads:[~2017-06-14 12:52 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-13 6:08 [PATCH 0/4] KVM: async_pf: Fix async_pf exception injection Wanpeng Li
2017-06-13 6:08 ` [PATCH 1/4] KVM: x86: Simple kvm_x86_ops->queue_exception parameter Wanpeng Li
2017-06-13 6:08 ` [PATCH 2/4] KVM: async_pf: Add L1 guest async_pf #PF vmexit handler Wanpeng Li
2017-06-13 6:08 ` [PATCH 3/4] KVM: async_pf: Force a nested vmexit if the injected #PF is async_pf Wanpeng Li
2017-06-13 18:55 ` Radim Krčmář
2017-06-14 1:07 ` Wanpeng Li
2017-06-14 12:52 ` Radim Krčmář [this message]
2017-06-14 13:02 ` Wanpeng Li
2017-06-14 13:20 ` Radim Krčmář
2017-06-14 13:27 ` Wanpeng Li
2017-06-14 13:32 ` Wanpeng Li
2017-06-14 14:32 ` Wanpeng Li
2017-06-14 16:18 ` Radim Krčmář
2017-06-15 2:43 ` Wanpeng Li
2017-06-13 6:08 ` [PATCH 4/4] KVM: async_pf: Let host know whether the guest support delivery async_pf as #PF vmexit Wanpeng Li
2017-06-13 18:19 ` Radim Krčmář
2017-06-14 1:01 ` Wanpeng Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170614125221.GA2343@potion \
--to=rkrcmar@redhat.com \
--cc=kernellwp@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=wanpeng.li@hotmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox