Maxim Levitsky <mlevi...@redhat.com> 于2019年9月26日周四 下午4:31写道:
> On Thu, 2019-09-26 at 15:52 +0800, Li Qiang wrote: > > Hi Paolo and all, > > > > There are some question about the emulation for real mode in kvm/qemu. > For all the > > question I suppose the 'unstrict guest' is not enabled. > > > > 1. how the protected mode CPU emulate the real mode? It seems it uses > vm86, however, vm86 is not available in x86_64 CPU? So what's the > 'to_vmx(vcpu)->rmode.vm86_active' here vm86 means? > > > > Hi Maxim, Thanks for your kind reply. > As far as I know it, modern intel's cpus support so called unrestricted > guest mode, which allows guest to be basically in any mode, > Right, but I also want to know the secret when the 'unstrict guest' is disabled. So I suppose the 'unstrict guest' is not enabled for these questions. > as long as EPT paging is used (that is guest can be in real mode with > no paging, but EPT has to be enabled). > The 'vm86_active' is probably lefover support for cpus that don't support > EPT and/or the unrestricted guest mode, > where KVM tried to use the good old vm86 mode to > for real mode virtualization. > > > > 2. Does the guest's real mode code run directly in native CPU? It seems > 'vmx->emulation_required' is also be false, it the vmx_vcpu_run will do a > switch to guest. > > Same as above > > > > > 3. How the EPT work in guest real mode? The EPT is for GVA->GPA->HPA, > however there is no GVA, seems the identity mapping does something. But > there also some confusion for me. For example the real > > mode uses CS*4 + IP to address the code. Who does this calculation? In > the kernel emulator? > > EPT sits underneath the guest's paging mode, which in case of real mode is > 1:1 mapping. > It seems when the 'unstrict guest' is enabled, there is no identity mapping table. Thanks, Li Qiang > Thus CS<<4 + IP would be the guest physical address and it will be looked > up in the EPT to translate to the real physical address. > > > > Best regards, > Maxim Levitsky > >