From: Keir Fraser <keir.xen@gmail.com>
To: henanwxr <henanwxr@163.com>, xen-devel@lists.xensource.com
Subject: Re: Is the Guest OS in non-paging protected mode when VM first execute vmlaunch?
Date: Sat, 21 May 2011 23:08:08 +0100 [thread overview]
Message-ID: <C9FDF658.1AC1C%keir.xen@gmail.com> (raw)
In-Reply-To: <1305994127711-4415142.post@n5.nabble.com>
On 21/05/2011 17:08, "henanwxr" <henanwxr@163.com> 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@lists.xensource.com
> http://lists.xensource.com/xen-devel
prev parent reply other threads:[~2011-05-21 22:08 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-21 16:08 Is the Guest OS in non-paging protected mode when VM first execute vmlaunch? henanwxr
2011-05-21 22:08 ` Keir Fraser [this message]
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=C9FDF658.1AC1C%keir.xen@gmail.com \
--to=keir.xen@gmail.com \
--cc=henanwxr@163.com \
--cc=xen-devel@lists.xensource.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.