[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Is the Guest OS in non-paging protected mode when VM first execute vmlaunch?
On 21/05/2011 17:08, "henanwxr" <henanwxr@xxxxxxx> wrote: > 1、Is the Guest OS in non-paging protected mode when VM first execute > vmlaunch? > If it is so, why not set it in paging protected mode, could I do this? I suppose, if you had reason to. Seems pointless though as you could set it up more easily from within the guest. > 2、I found guest os was set in paging and protected mode in function of > construct_vmcs(). You are mixing up two things: the CR0 the guest *thinks* it is running with, and the CR0 value it is *actually* running with. Actually we must always run non-root mode with paging enabled, but we hide that from the guest by running it on a hidden page table with 1:1 virt:phys mappings. So the v->arch.hvm_vcpu.guest_cr[0] value in the code below is the cr0 value the guest manages and sees. The v->arch.hvm_vcpu.hw_cr[0] is the value it actually runs with. If you don't understand the difference between these values, you'll get very confused! -- Keir > The flow is: > > //Xen-4.0/arch/x86/hvm/vmx/vmcs.c > construct_vmcs() > { > ……………….. > //here set CR0.PE > v->arch.hvm_vcpu.guest_cr[0] = X86_CR0_PE | X86_CR0_ET; > hvm_update_guest_cr(v, 0); > ………………… > } > > > > > // Then it calls function of hvm_update_guest_cr() in > /xen/include/asm-x86/hvm.h > static inline void hvm_update_guest_cr(struct vcpu *v, unsigned int cr) > { > hvm_funcs.update_guest_cr(v, cr); > } > > > > //hvm_funcs.update_guest_cr calls function of vmx_updata_guest_cr() > //in /arch/x86/hvm/vmx/vmx.c > static struct hvm_function_table __read_mostly vmx_function_table = { > .name = "VMX", > ………………………… > .update_host_cr3 = vmx_update_host_cr3, > .update_guest_cr = vmx_update_guest_cr, > …………………….. > } > > static void vmx_update_guest_cr(struct vcpu *v, unsigned int cr) > { > vmx_vmcs_enter(v); > > switch ( cr ) > { > case 0: { > int realmode; > unsigned long hw_cr0_mask = X86_CR0_NE; > > //here set CR0.PG and CR0.PE > if ( !vmx_unrestricted_guest(v) ) > hw_cr0_mask |= X86_CR0_PG | X86_CR0_PE; > ………………………….. > ………………………….. > v->arch.hvm_vcpu.hw_cr[0] = v->arch.hvm_vcpu.guest_cr[0] | > hw_cr0_mask; > //here write GUEST_CR0, is it in paging and protected mode ?? > __vmwrite(GUEST_CR0, v->arch.hvm_vcpu.hw_cr[0]); > __vmwrite(CR0_READ_SHADOW, v->arch.hvm_vcpu.guest_cr[0]); > …………. > } > > > -- > View this message in context: > http://xen.1045712.n5.nabble.com/Is-the-Guest-OS-in-non-paging-protected-mode- > when-VM-first-execute-vmlaunch-tp4415142p4415142.html > Sent from the Xen - Dev mailing list archive at Nabble.com. > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |