[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.