]> xenbits.xensource.com Git - xen.git/commitdiff
[IA64] vti domain save/restore: make vmx_vcpu_set_rr() accept non-current
authorAlex Williamson <alex.williamson@hp.com>
Fri, 12 Oct 2007 20:36:37 +0000 (14:36 -0600)
committerAlex Williamson <alex.williamson@hp.com>
Fri, 12 Oct 2007 20:36:37 +0000 (14:36 -0600)
make vmx_vcpu_set_rr accept non-current vcpu for setting vcpu context.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
xen/arch/ia64/vmx/vmx_vcpu.c

index 4308d3666189dd902eeeaf8c48324c37d93b84b9..63d2e945fa0800ee378d23057c0c79f1284511f8 100644 (file)
@@ -171,23 +171,25 @@ IA64FAULT vmx_vcpu_set_rr(VCPU *vcpu, u64 reg, u64 val)
     VMX(vcpu,vrr[reg>>VRN_SHIFT]) = val;
     switch((u64)(reg>>VRN_SHIFT)) {
     case VRN7:
-        vmx_switch_rr7(vrrtomrr(vcpu,val),
-                       (void *)vcpu->arch.vhpt.hash, pal_vaddr );
+        if (likely(vcpu == current))
+            vmx_switch_rr7(vrrtomrr(vcpu,val),
+                           (void *)vcpu->arch.vhpt.hash, pal_vaddr );
        break;
     case VRN4:
         rrval = vrrtomrr(vcpu,val);
         vcpu->arch.metaphysical_saved_rr4 = rrval;
-        if (is_virtual_mode(vcpu))
+        if (is_virtual_mode(vcpu) && likely(vcpu == current))
             ia64_set_rr(reg,rrval);
         break;
     case VRN0:
         rrval = vrrtomrr(vcpu,val);
         vcpu->arch.metaphysical_saved_rr0 = rrval;
-        if (is_virtual_mode(vcpu))
+        if (is_virtual_mode(vcpu) && likely(vcpu == current))
             ia64_set_rr(reg,rrval);
         break;
     default:
-        ia64_set_rr(reg,vrrtomrr(vcpu,val));
+        if (likely(vcpu == current))
+            ia64_set_rr(reg,vrrtomrr(vcpu,val));
         break;
     }