Sean, understood with many thanks!

Good luck,
Harry

On Wed, Jul 28, 2021 at 3:01 PM Sean Christopherson <sea...@google.com> wrote:
>
> On Wed, Jul 28, 2021, harry harry wrote:
> > Sean, sorry for the late reply. Thanks for your careful explanations.
> >
> > > For emulation of any instruction/flow that starts with a guest virtual 
> > > address.
> > > On Intel CPUs, that includes quite literally any "full" instruction 
> > > emulation,
> > > since KVM needs to translate CS:RIP to a guest physical address in order 
> > > to fetch
> > > the guest's code stream.  KVM can't avoid "full" emulation unless the 
> > > guest is
> > > heavily enlightened, e.g. to avoid string I/O, among many other things.
> >
> > Do you mean the emulated MMU is needed when it *only* wants to
> > translate GVAs to GPAs in the guest level?
>
> Not quite, though gva_to_gpa() is the main use.  The emulated MMU is also 
> used to
> inject guest #PF and to load/store guest PDTPRs.
>
> > In such cases, the hardware MMU cannot be used because hardware MMU
> > can only translate GVAs to HPAs, right?
>
> Sort of.  The hardware MMU does translate GVA to GPA, but the GPA value is not
> visible to software (unless the GPA->HPA translation faults).  That's also 
> true
> for VA to PA (and GVA to HPA).  Irrespective of virtualization, x86 ISA 
> doesn't
> provide an instruction to retrive the PA for a given VA.
>
> If such an instruction did exist, and it was to be usable for a VMM to do a
> GVA->GPA translation, the magic instruction would need to take all MMU params 
> as
> operands, e.g. CR0, CR3, CR4, and EFER.  When KVM is active (not the guest), 
> the
> hardware MMU is loaded with the host MMU configuration, not the guest.  In 
> both
> VMX and SVM, vCPU state is mostly ephemeral in the sense that it ceases to 
> exist
> in hardware when the vCPU exits to the host.  Some state is retained in 
> hardware,
> e.g. TLB and cache entries, but those are associated with select properties of
> the vCPU, e.g. EPTP, CR3, etc..., not with the vCPU itself, i.e. not with the
> VMCS (VMX) / VMCB (SVM).

Reply via email to