[Intel-gfx] [PATCH 1/2] drm/i915/display: use fetch_and_zero if applicable

Andrzej Hajda andrzej.hajda at intel.com
Thu Dec 8 16:26:50 UTC 2022


On 08.12.2022 16:44, Tvrtko Ursulin wrote:
> 
> On 08/12/2022 15:02, Jani Nikula wrote:
>> On Thu, 08 Dec 2022, "Vivi, Rodrigo" <rodrigo.vivi at intel.com> wrote:
>>> On Thu, 2022-12-08 at 14:32 +0200, Jani Nikula wrote:
>>>> On Thu, 08 Dec 2022, Andrzej Hajda <andrzej.hajda at intel.com> wrote:
>>>>> Simplify the code.
>>>>
>>>> Personally, I absolutely hate fetch_and_zero().
>>>>
>>>> I understand the point, but there are two main traps:
>>>>
>>>> First, the name implies atomicity, which there is none at all.
>>>>
>>>> Second, the name implies it's part of a kernel core header, which it
>>>> isn't, and this just amplifies the first point.
>>>>
>>>> It's surprising and misleading, and those are not things I like about
>>>> interfaces in the kernel.
>>>>
>>>> I would not like to see this proliferate. If fetch_and_zero() was
>>>> atomic
>>>> *and* part of a core kernel header, it would be a different matter.
>>>> But
>>>> I don't think that's going to happen, exactly because it won't be
>>>> atomic
>>>> and the name implies it is.
>>>
>>> +1 here.
>>>
>>> Please let's go the other way around and try to kill macros like this.
>>>
>>> we either kill or we ensure this gets accepted in the core kernel
>>> libraries.
>>
>> Agreed. I'd be fine with either:
>>
>> 1) Get something like this accepted in core kernel headers:
>>
>> #define fetch_and_zero(ptr) xchg(ptr, 0)
>>
>> 2) Do this in i915:
>>
>> @@
>> expression E;
>> @@
>>
>> - fetch_and_zero(E)
>> + xchg(E, 0)
> 
> We don't need atomic so both solution would IMO be bad.

Heh, too late, already sent :)

> 
> We could propose __fetch_and_zero and fetch_and_zero, to mimic 
> __set_bit/set_bit&co for some consistency in terms of atomic vs 
> non-atomic API flavour?
> 

Or non-atomic xchg


> Assuming of course people will think that the long-ish name of the 
> utility macro brings an overall positive cost benefit.
> 
> Worth a try I guess.
> 
> First step I think we need a cocci script for finding the open coded 
> "fetch and zero" pattern. Not my forte but I can try if no one else has 
> an immediate solution or desire to drive the attempt.

About 1600 patterns:
x = y;
y = 0;

but I guess there could be more:
x = xchg(&y, 0);

x = y;
...
y = 0;

custom macros

Regards
Andrzej


> 
> Regards,
> 
> Tvrtko



More information about the Intel-gfx mailing list