WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Is the Guest OS in non-paging protected mode when VM first e

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] Is the Guest OS in non-paging protected mode when VM first execute vmlaunch?
From: henanwxr <henanwxr@xxxxxxx>
Date: Sat, 21 May 2011 09:08:47 -0700 (PDT)
Delivery-date: Sat, 21 May 2011 09:09:53 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
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?
2、I found guest os was set in paging and protected mode in function of
construct_vmcs().
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

<Prev in Thread] Current Thread [Next in Thread>