Schedule shutdown fix
PATCH 1/1 Schedule shutdown fix
domain_shutdown() needs to call raise_softirq(SCHEDULE_SOFTIRQ). This forces the current vcpu to be rescheduled and paused. Without this, during live migrate, if another vcpu has defer_shutdown==1 then the current vcpu can return from domain_shutdown(),
do a vmenter, and continue running guest code, "resume" code that should only be running on the receiving node!
xen/common/domain.c +1 -0
@@ -415,6 +415,7 @@ void domain_shutdown(struct domain *d, u__domain_finalise_shutdown (d);spin_unlock (&d->shutdown_lock); +raise_softirq (SCHEDULE_SOFTIRQ ); }void domain_resume (struct domain *d)
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel
Probably better fixed by calling vcpu_sleep_nosync() a bit more aggressively. I'll sort out a fix based around that. Nice catch!
-- Keir
Quoted 24 lines · Ben Guthro
domain_shutdown()needs to callraise_softirq(SCHEDULE_SOFTIRQ). This forces the current vcpu to be rescheduled and paused. Without this, during live migrate, if another vcpu has defer_shutdown==1 then the current vcpu can return fromdomain_shutdown(),
do a vmenter, and continue running guest code, "resume" code that should only be running on the receiving node!Signed-off-by Robert Phillips <[email protected]>Signed-off-by Ben Guthro <[email protected]>diff -r
4674efa621d4xen/common/domain.cxen/common/domain.c +1
-0@@ -415,6 +415,7 @@ void domain_shutdown(struct domain *d, u__domain_finalise_shutdown (d);spin_unlock (&d->shutdown_lock); +raise_softirq (SCHEDULE_SOFTIRQ ); }void domain_resume (struct domain *d)_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel