From: Gleb Natapov <gleb@redhat.com>
To: "Zhang, Yang Z" <yang.z.zhang@intel.com>
Cc: Jan Kiszka <jan.kiszka@web.de>,
Paolo Bonzini <pbonzini@redhat.com>, kvm <kvm@vger.kernel.org>,
Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>,
"Nakajima, Jun" <jun.nakajima@intel.com>,
Arthur Chunqi Li <yzt356@gmail.com>
Subject: Re: [PATCH v2 5/8] KVM: nVMX: Fix guest CR3 read-back on VM-exit
Date: Tue, 6 Aug 2013 17:41:17 +0300 [thread overview]
Message-ID: <20130806144117.GD8218@redhat.com> (raw)
In-Reply-To: <A9667DDFB95DB7438FA9D7D576C3D87E0A8DD16B@SHSMSX104.ccr.corp.intel.com>
On Tue, Aug 06, 2013 at 02:12:51PM +0000, Zhang, Yang Z wrote:
> Gleb Natapov wrote on 2013-08-06:
> > On Tue, Aug 06, 2013 at 11:44:41AM +0000, Zhang, Yang Z wrote:
> >> Gleb Natapov wrote on 2013-08-06:
> >>> On Tue, Aug 06, 2013 at 10:39:59AM +0200, Jan Kiszka wrote:
> >>>> From: Jan Kiszka <jan.kiszka@siemens.com>
> >>>>
> >>>> If nested EPT is enabled, the L2 guest may change CR3 without any exits.
> >>>> We therefore have to read the current value from the VMCS when
> >>>> switching to L1. However, if paging wasn't enabled, L0 tracks
> >>>> L2's CR3, and
> >>>> GUEST_CR3 rather contains the real-mode identity map. So we need
> >>>> to retrieve CR3 from the architectural state after conditionally
> >>>> updating it - and this is what kvm_read_cr3 does.
> >>>>
> >>> I have a headache from trying to think about it already, but
> >>> shouldn't
> >>> L1 be the one who setups identity map for L2? I traced what
> >>> vmcs_read64(GUEST_CR3)/kvm_read_cr3(vcpu) return here and do not
> >>> see
> >> Here is my understanding:
> >> In vmx_set_cr3(), if enabled ept, it will check whether target vcpu
> >> is enabling
> > paging. When L2 running in real mode, then target vcpu is not enabling
> > paging and it will use L0's identity map for L2. If you read GUEST_CR3
> > from VMCS, then you may get the L2's identity map not L1's.
> >>
> > Yes, but why it makes sense to use L0 identity map for L2? I didn't see
> > different vmcs_read64(GUEST_CR3)/kvm_read_cr3(vcpu) values because L0
> > and L1 use the same identity map address. When I changed identity
> > address L1 configures vmcs_read64(GUEST_CR3)/kvm_read_cr3(vcpu) are
> > indeed different, but the real CR3 L2 uses points to L0 identity map. If
> > I zero L1 identity map page L2 still works.
> >
> If L2 in real mode, then L2PA == L1PA. So L0's identity map also works if L2 is in real mode.
>
That not the point. It may work accidentally for kvm on kvm, but what
if other hypervisor plays different tricks and builds different ident map
for its guest?
--
Gleb.
next prev parent reply other threads:[~2013-08-06 14:41 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-06 8:39 [PATCH v2 0/8] KVM: nVMX: Enable unrestricted guest mode and fix some nEPT issues Jan Kiszka
2013-08-06 8:39 ` [PATCH v2 1/8] KVM: nEPT: Advertise WB type EPTP Jan Kiszka
2013-08-06 8:39 ` [PATCH v2 2/8] KVM: nVMX: Fix up VM_ENTRY_IA32E_MODE control feature reporting Jan Kiszka
2013-08-06 9:10 ` Gleb Natapov
2013-08-06 8:39 ` [PATCH v2 3/8] KVM: nVMX: Replace kvm_set_cr0 with vmx_set_cr0 in load_vmcs12_host_state Jan Kiszka
2013-08-06 8:39 ` [PATCH v2 4/8] KVM: nVMX: Enable unrestricted guest mode support Jan Kiszka
2013-08-06 8:39 ` [PATCH v2 5/8] KVM: nVMX: Fix guest CR3 read-back on VM-exit Jan Kiszka
2013-08-06 10:12 ` Gleb Natapov
2013-08-06 10:25 ` Jan Kiszka
2013-08-06 10:31 ` Gleb Natapov
2013-08-06 11:44 ` Gleb Natapov
2013-08-06 11:44 ` Zhang, Yang Z
2013-08-06 14:02 ` Gleb Natapov
2013-08-06 14:12 ` Zhang, Yang Z
2013-08-06 14:41 ` Gleb Natapov [this message]
2013-08-06 15:04 ` Zhang, Yang Z
2013-08-06 15:48 ` Jan Kiszka
2013-08-06 15:53 ` Gleb Natapov
2013-08-06 15:57 ` Jan Kiszka
2013-08-07 12:39 ` Gleb Natapov
2013-08-07 12:46 ` Jan Kiszka
2013-08-07 13:32 ` Paolo Bonzini
2013-08-07 13:38 ` Gleb Natapov
2013-08-07 13:54 ` Paolo Bonzini
2013-08-07 13:59 ` Jan Kiszka
2013-08-06 8:40 ` [PATCH v2 6/8] KVM: nVMX: Load nEPT state after EFER Jan Kiszka
2013-08-06 8:40 ` [PATCH v2 7/8] KVM: nVMX: Implement support for EFER saving on VM-exit Jan Kiszka
2013-08-06 8:40 ` [PATCH v2 8/8] KVM: nVMX: Update mmu.base_role.nxe after EFER loading on VM-entry/exit Jan Kiszka
2013-08-07 14:06 ` [PATCH v2 0/8] KVM: nVMX: Enable unrestricted guest mode and fix some nEPT issues Paolo Bonzini
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=20130806144117.GD8218@redhat.com \
--to=gleb@redhat.com \
--cc=jan.kiszka@web.de \
--cc=jun.nakajima@intel.com \
--cc=kvm@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=xiaoguangrong@linux.vnet.ibm.com \
--cc=yang.z.zhang@intel.com \
--cc=yzt356@gmail.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;
as well as URLs for NNTP newsgroup(s).