[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] workaround for bug#197: second try
Thanks for trying out the last patch. While the previous workaround worked for me, it did not for others. Looking into domain_pause(), we can see that vcpu_sleep_sync() is called on each vcpu: /* * We can be sure that the VCPU is finally descheduled after the running * flag is cleared and the scheduler lock is released. */ while ( test_bit(_VCPUF_running, &v->vcpu_flags) && !domain_runnable(v) && spin_is_locked(&schedule_data[v->processor].schedule_lock) ) cpu_relax(); If we are to believe the comment, (which makes sense), then the while loop code is broken. That is, this function will spin until *any* of the three tests returns false rather than waiting until *all* tests are false. This patch switches the &&s to ||s and inverts the domain_runnable() check. I believe we want to spin while 1) vcpu_running flag is up 2) the domain is runnable and 3) the scheduler lock is held. -- Ryan Harper Software Engineer; Linux Technology Center IBM Corp., Austin, Tx (512) 838-9253 T/L: 678-9253 ryanh@xxxxxxxxxx diffstat output: schedule.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) --- # # fix logic to match comments. ie. we want to spin until # 1) the running flag is down, # 2) the domain isnt runnable (pausecnt > 0) # 3) the scheduler lock isnt held # # Signed-off-by: Ryan Harper <ryanh@xxxxxxxxxx> # diff -r 413c911e5780 xen/common/schedule.c --- a/xen/common/schedule.c Mon Sep 12 12:48:33 2005 +++ b/xen/common/schedule.c Tue Sep 13 09:46:36 2005 @@ -214,8 +214,8 @@ * flag is cleared and the scheduler lock is released. */ while ( test_bit(_VCPUF_running, &v->vcpu_flags) - && !domain_runnable(v) - && spin_is_locked(&schedule_data[v->processor].schedule_lock) ) + || domain_runnable(v) + || spin_is_locked(&schedule_data[v->processor].schedule_lock) ) cpu_relax(); sync_vcpu_execstate(v); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |