|
|
|
|
|
|
|
|
|
|
xen-devel
[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
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-devel] RE: [PATCH] workaround for bug#197: second try,
Puthiyaparambil, Aravindh <=
|
|
|
|
|