|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2] events/fifo: don't spin indefinitely when setting LINK
On 11/11/13 16:38, Jan Beulich wrote:
>>>> On 11.11.13 at 17:03, David Vrabel <david.vrabel@xxxxxxxxxx> wrote:
>
>> + w = read_atomic(word);
>> +
>> + for ( try = 0; try < 4; try++ )
>> + {
>> + ret = try_set_link(word, &w, link);
>> + if ( ret >= 0 )
>> + {
>> + clear_bit(EVTCHN_FIFO_BUSY, word);
>
> Considering that this is another atomic operation, wouldn't it
> make sense to have the cmpxchg() at once clear the flag,
> and hence you'd need to clear it here only when ret == 0
> (which I understand isn't the common case)?
The common case (I believe, but haven't measured it) is the first
try_set_link() call without BUSY set.
In the loop, I suspect the mostly likely write by the guest is clearing
LINKED, i.e., ret == 0.
Still, it seems easy enough to have:
for ( try = 0; try < 4; try++ )
{
ret = try_set_link(word, &w, link);
if ( ret >= 0 )
{
if ( ret == 0 )
clear_bit(EVTCHN_FIFO_BUSY, word);
return ret;
}
}
David
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |