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-changelog

[Xen-changelog] Add one more parameter to __vmread_vcpu and clean some c

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Add one more parameter to __vmread_vcpu and clean some code.
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sat, 08 Oct 2005 09:02:11 +0000
Delivery-date: Sat, 08 Oct 2005 08:59:48 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 801b2bd7ef2ef3a200b1034d363b429a01a08896
# Parent  a4df9003c54d7c1d6b6b6e108403352f4a7f63d2
Add one more parameter to __vmread_vcpu and clean some code.

Signed-off-by: Xin Xiaohui <Xiaohui.xin@xxxxxxxxx>
Signed-off-by: Li Chengyuan <Chengyuan.li@xxxxxxxxx>
Signed-off-by: Nakajima Jun <jun.nakajima@xxxxxxxxx>

diff -r a4df9003c54d -r 801b2bd7ef2e xen/arch/x86/vmx.c
--- a/xen/arch/x86/vmx.c        Sat Oct  8 08:51:43 2005
+++ b/xen/arch/x86/vmx.c        Sat Oct  8 08:54:06 2005
@@ -425,12 +425,13 @@
 static void vmx_do_no_device_fault(void)
 {
     unsigned long cr0;
+    struct vcpu *v = current;
 
     clts();
     setup_fpu(current);
-    __vmread_vcpu(CR0_READ_SHADOW, &cr0);
+    __vmread_vcpu(v, CR0_READ_SHADOW, &cr0);
     if (!(cr0 & X86_CR0_TS)) {
-        __vmread_vcpu(GUEST_CR0, &cr0);
+        __vmread_vcpu(v, GUEST_CR0, &cr0);
         cr0 &= ~X86_CR0_TS;
         __vmwrite(GUEST_CR0, cr0);
     }
@@ -1347,6 +1348,7 @@
 {
     unsigned int gp, cr;
     unsigned long value;
+    struct vcpu *v = current;
 
     switch (exit_qualification & CONTROL_REG_ACCESS_TYPE) {
     case TYPE_MOV_TO_CR:
@@ -1369,17 +1371,17 @@
         clts();
         setup_fpu(current);
 
-        __vmread_vcpu(GUEST_CR0, &value);
+        __vmread_vcpu(v, GUEST_CR0, &value);
         value &= ~X86_CR0_TS; /* clear TS */
         __vmwrite(GUEST_CR0, value);
 
-        __vmread_vcpu(CR0_READ_SHADOW, &value);
+        __vmread_vcpu(v, CR0_READ_SHADOW, &value);
         value &= ~X86_CR0_TS; /* clear TS */
         __vmwrite(CR0_READ_SHADOW, value);
         break;
     case TYPE_LMSW:
         TRACE_VMEXIT(1,TYPE_LMSW);
-        __vmread_vcpu(CR0_READ_SHADOW, &value);
+        __vmread_vcpu(v, CR0_READ_SHADOW, &value);
         value = (value & ~0xF) |
             (((exit_qualification & LMSW_SOURCE_DATA) >> 16) & 0xF);
         return vmx_set_cr0(value);
diff -r a4df9003c54d -r 801b2bd7ef2e xen/arch/x86/vmx_io.c
--- a/xen/arch/x86/vmx_io.c     Sat Oct  8 08:51:43 2005
+++ b/xen/arch/x86/vmx_io.c     Sat Oct  8 08:54:06 2005
@@ -891,7 +891,7 @@
     struct vcpu *v = current;
 
     highest_vector = find_highest_pending_irq(v, &intr_type);
-    __vmread_vcpu(CPU_BASED_VM_EXEC_CONTROL, &cpu_exec_control);
+    __vmread_vcpu(v, CPU_BASED_VM_EXEC_CONTROL, &cpu_exec_control);
 
     if (highest_vector == -1) {
         disable_irq_window(cpu_exec_control);
diff -r a4df9003c54d -r 801b2bd7ef2e xen/include/asm-x86/vmx.h
--- a/xen/include/asm-x86/vmx.h Sat Oct  8 08:51:43 2005
+++ b/xen/include/asm-x86/vmx.h Sat Oct  8 08:54:06 2005
@@ -314,10 +314,8 @@
 }
 
 
-static always_inline void __vmwrite_vcpu(unsigned long field, unsigned long 
value)
-{
-    struct vcpu *v = current;
-
+static always_inline void __vmwrite_vcpu(struct vcpu *v, unsigned long field, 
unsigned long value)
+{
     switch(field) {
     case CR0_READ_SHADOW:
        v->arch.arch_vmx.cpu_shadow_cr0 = value;
@@ -334,10 +332,8 @@
     }
 }
 
-static always_inline void __vmread_vcpu(unsigned long field, unsigned long 
*value)
-{
-    struct vcpu *v = current;
-
+static always_inline void __vmread_vcpu(struct vcpu *v, unsigned long field, 
unsigned long *value)
+{
     switch(field) {
     case CR0_READ_SHADOW:
        *value = v->arch.arch_vmx.cpu_shadow_cr0;
@@ -352,24 +348,15 @@
        printk("__vmread_cpu: invalid field %lx\n", field);
        break;
     }
-
-   /* 
-    * __vmwrite() can be used for non-current vcpu, and it's possible that
-    * the vcpu field is not initialized at that case.
-    * 
-    */
-    if (!*value) {
-       __vmread(field, value);
-       __vmwrite_vcpu(field, *value);
-    }
 }
 
 static inline int __vmwrite (unsigned long field, unsigned long value)
 {
     unsigned long eflags;
+    struct vcpu *v = current;
 
     __asm__ __volatile__ ( VMWRITE_OPCODE
-                           MODRM_EAX_ECX       
+                           MODRM_EAX_ECX
                            :
                            : "a" (field) , "c" (value)
                            : "memory");
@@ -381,7 +368,7 @@
     case CR0_READ_SHADOW:
     case GUEST_CR0:
     case CPU_BASED_VM_EXEC_CONTROL:
-       __vmwrite_vcpu(field, value);
+       __vmwrite_vcpu(v, field, value);
        break;
     }
 
@@ -437,13 +424,14 @@
 static inline void vmx_stts(void)
 {
     unsigned long cr0;
-
-    __vmread_vcpu(GUEST_CR0, &cr0);
+    struct vcpu *v = current;
+
+    __vmread_vcpu(v, GUEST_CR0, &cr0);
     if (!(cr0 & X86_CR0_TS)) {
         __vmwrite(GUEST_CR0, cr0 | X86_CR0_TS);
     }
 
-    __vmread_vcpu(CR0_READ_SHADOW, &cr0);
+    __vmread_vcpu(v, CR0_READ_SHADOW, &cr0);
     if (!(cr0 & X86_CR0_TS))
        __vm_set_bit(EXCEPTION_BITMAP, EXCEPTION_BITMAP_NM);
 }
@@ -453,7 +441,7 @@
 {
     unsigned long cr0;
 
-    __vmread_vcpu(CR0_READ_SHADOW, &cr0);
+    __vmread_vcpu(v, CR0_READ_SHADOW, &cr0);
     return (cr0 & X86_CR0_PE) && (cr0 & X86_CR0_PG);
 }
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Add one more parameter to __vmread_vcpu and clean some code., Xen patchbot -unstable <=