|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] Re: [PATCH RFC 02/12] x86/ticketlock: convert spin loop to C
>>> On 02.08.10 at 17:17, Jeremy Fitzhardinge <jeremy@xxxxxxxx> wrote:
> On 08/02/2010 08:07 AM, Peter Zijlstra wrote:
>> On Fri, 2010-07-16 at 18:03 -0700, Jeremy Fitzhardinge wrote:
>>> + asm volatile (LOCK_PREFIX "xaddw %w0, %1\n"
>>> + : "+Q" (inc), "+m" (lock->slock) : : "memory", "cc");
>> "+Q" (inc->slock)
>>
>>> + for (;;) {
>>> + if (inc.tickets.head == inc.tickets.tail)
>>> + return;
>>> + cpu_relax();
>>> + inc.tickets.head = ACCESS_ONCE(lock->tickets.head);
>>> + }
>>> + barrier(); /* make sure nothing creeps before the lock
> is taken */
>>> }
>> How will it ever get to that barrier() ?
>
> The compiler treats this as being:
You certainly mean "the compiler currently treats this as being:" - I
don't think there's a guarantee it'll always be doing so.
> for (;;) {
> if (inc.tickets.head == inc.tickets.tail)
> goto out;
> ...
> }
> out: barrier();
> }
>
> (Which would probably be a reasonable way to clarify the code.)
I therefore think it needs to be written this way.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|