[VMX] Replace vmx_load_cr2() with direct write to %cr2.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 31 Oct 2006 13:26:49 +0000 (13:26 +0000)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 31 Oct 2006 13:26:49 +0000 (13:26 +0000)
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/hvm/vmx/vmx.c
xen/arch/x86/hvm/vmx/x86_32/exits.S
xen/arch/x86/hvm/vmx/x86_64/exits.S
xen/arch/x86/x86_32/asm-offsets.c
xen/arch/x86/x86_64/asm-offsets.c

index f617385c736109af6ecfe702ef7a4099fdfd00e6..895612518db520653e6a05025150a7a151f33b93 100644 (file)
@@ -2419,14 +2419,6 @@ asmlinkage void vmx_vmexit_handler(struct cpu_user_regs *regs)
     }
 }
 
-asmlinkage void vmx_load_cr2(void)
-{
-    struct vcpu *v = current;
-
-    local_irq_disable();
-    asm volatile("mov %0,%%cr2": :"r" (v->arch.hvm_vmx.cpu_cr2));
-}
-
 asmlinkage void vmx_trace_vmentry(void)
 {
     TRACE_5D(TRC_VMX_VMENTRY + current->vcpu_id,
index d0ef963b862dcf47615de7791872d581ab979679..144dd174d4786325075bc2f495d52563eb690ed6 100644 (file)
@@ -105,7 +105,8 @@ ENTRY(vmx_asm_do_vmentry)
         jnz  vmx_process_softirqs
 
         call vmx_intr_assist
-        call vmx_load_cr2
+        movl VCPU_vmx_cr2(%ebx),%eax
+        movl %eax,%cr2
         call vmx_trace_vmentry
 
         cmpl $0,VCPU_vmx_launched(%ebx)
index 275e8938b262a426cd01e3872fa32499646138ad..d427ac2cd5d36805ccf02389f365da693fd2217f 100644 (file)
@@ -115,7 +115,8 @@ ENTRY(vmx_asm_do_vmentry)
         jnz   vmx_process_softirqs
 
         call vmx_intr_assist
-        call vmx_load_cr2
+        movq VCPU_vmx_cr2(%rbx),%rax
+        movq %rax,%cr2
         call vmx_trace_vmentry
 
         cmpl $0,VCPU_vmx_launched(%rbx)
index 36197ef9e84f10937448da2b473568216f134dcf..4153b9f96798f469a80ef39725f714deea551051 100644 (file)
@@ -86,6 +86,7 @@ void __dummy__(void)
     BLANK();
 
     OFFSET(VCPU_vmx_launched, struct vcpu, arch.hvm_vmx.launched);
+    OFFSET(VCPU_vmx_cr2, struct vcpu, arch.hvm_vmx.cpu_cr2);
     BLANK();
 
     OFFSET(VMCB_rax, struct vmcb_struct, rax);
index 5e958156788b6568d4215d295a844c6b2fecdb62..41f93fe9c5fa4cfe87a42494625e8dcc793f98c0 100644 (file)
@@ -80,6 +80,7 @@ void __dummy__(void)
     BLANK();
 
     OFFSET(VCPU_vmx_launched, struct vcpu, arch.hvm_vmx.launched);
+    OFFSET(VCPU_vmx_cr2, struct vcpu, arch.hvm_vmx.cpu_cr2);
     BLANK();
 
     OFFSET(VMCB_rax, struct vmcb_struct, rax);