[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |