[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] RE: [PATCH] workaround for bug#197: second try
Ryan, This patch has fixed the race condition that I was seeing. Thanks Aravindh > -----Original Message----- > From: Ryan Harper [mailto:ryanh@xxxxxxxxxx] > Sent: Tuesday, September 13, 2005 2:22 PM > To: xen-devel@xxxxxxxxxxxxxxxxxxx > Cc: Puthiyaparambil, Aravindh; Dan Smith > Subject: [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 |