|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xen: Simplify callers of boot_vcpu(). In VCPUOP_up, check
# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1327054435 0
# Node ID a3f67482c3216681394c857729e0f08315cbe46a
# Parent 2273ef2083d4a369044bdd8677635e0c0c3ae594
xen: Simplify callers of boot_vcpu(). In VCPUOP_up, check
is_initialised under the per-domain lock.
Signed-off-by: Keir Fraser <keir@xxxxxxx>
---
diff -r 2273ef2083d4 -r a3f67482c321 xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c Thu Jan 19 13:09:23 2012 +0000
+++ b/xen/arch/x86/hvm/hvm.c Fri Jan 20 10:13:55 2012 +0000
@@ -685,11 +685,7 @@
}
/* Need to init this vcpu before loading its contents */
- rc = 0;
- domain_lock(d);
- if ( !v->is_initialised )
- rc = boot_vcpu(d, vcpuid, NULL);
- domain_unlock(d);
+ rc = boot_vcpu(d, vcpuid, NULL);
if ( rc != 0 )
return rc;
diff -r 2273ef2083d4 -r a3f67482c321 xen/common/compat/domain.c
--- a/xen/common/compat/domain.c Thu Jan 19 13:09:23 2012 +0000
+++ b/xen/common/compat/domain.c Fri Jan 20 10:13:55 2012 +0000
@@ -46,11 +46,7 @@
break;
}
- domain_lock(d);
- rc = -EEXIST;
- if ( !v->is_initialised )
- rc = boot_vcpu(d, vcpuid, cmp_ctxt);
- domain_unlock(d);
+ rc = boot_vcpu(d, vcpuid, cmp_ctxt);
xfree(cmp_ctxt);
break;
diff -r 2273ef2083d4 -r a3f67482c321 xen/common/domain.c
--- a/xen/common/domain.c Thu Jan 19 13:09:23 2012 +0000
+++ b/xen/common/domain.c Fri Jan 20 10:13:55 2012 +0000
@@ -781,10 +781,13 @@
int boot_vcpu(struct domain *d, int vcpuid, vcpu_guest_context_u ctxt)
{
struct vcpu *v = d->vcpu[vcpuid];
+ int rc;
- BUG_ON(v->is_initialised);
+ domain_lock(d);
+ rc = v->is_initialised ? -EEXIST : arch_set_info_guest(v, ctxt);
+ domain_unlock(d);
- return arch_set_info_guest(v, ctxt);
+ return rc;
}
void vcpu_reset(struct vcpu *v)
@@ -844,23 +847,23 @@
return -EFAULT;
}
- domain_lock(d);
- rc = -EEXIST;
- if ( !v->is_initialised )
- rc = boot_vcpu(d, vcpuid, ctxt);
- domain_unlock(d);
+ rc = boot_vcpu(d, vcpuid, ctxt);
free_vcpu_guest_context(ctxt);
break;
- case VCPUOP_up:
+ case VCPUOP_up: {
+ bool_t wake = 0;
+ domain_lock(d);
if ( !v->is_initialised )
- return -EINVAL;
-
- if ( test_and_clear_bit(_VPF_down, &v->pause_flags) )
+ rc = -EINVAL;
+ else
+ wake = test_and_clear_bit(_VPF_down, &v->pause_flags);
+ domain_unlock(d);
+ if ( wake )
vcpu_wake(v);
-
break;
+ }
case VCPUOP_down:
if ( !test_and_set_bit(_VPF_down, &v->pause_flags) )
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |