On 29.09.2020 17:44, Paul Durrant wrote:
>> From: Xen-devel <xen-devel-boun...@lists.xenproject.org> On Behalf Of Jan 
>> Beulich
>> Sent: 28 September 2020 11:57
>>
>> @@ -81,7 +82,7 @@ static uint8_t get_xen_consumer(xen_even
>>      for ( i = 0; i < ARRAY_SIZE(xen_consumers); i++ )
>>      {
>>          if ( xen_consumers[i] == NULL )
>> -            xen_consumers[i] = fn;
>> +            (void)cmpxchg(&xen_consumers[i], NULL, fn);
>>          if ( xen_consumers[i] == fn )
> 
> Why not use the return from cmpxchg() to determine success and break
> out of the loop rather than re-accessing the global array?

That's an option, in which case I wouldn't be sure anymore whether
adding __read_mostly to the definition of xen_consumers[] is
appropriate. This way, otoh, the (LOCKed on x86) write isn't even
attempted when the slot already holds non-NULL.

Jan

Reply via email to