Re: [PATCH 1/2] compiler.h: Introduce ptr_eq() to preserve address dependency

Jonas Oberhauser
2024-09-30T11:27:15Z

Am 9/28/2024 um 4:49 PM schrieb Alan Stern:
> On Sat, Sep 28, 2024 at 09:51:27AM -0400, Mathieu Desnoyers wrote:
>> Compiler CSE and SSA GVN optimizations can cause the address dependency
>> of addresses returned by rcu_dereference to be lost when comparing those
>> pointers with either constants or previously loaded pointers.
>>
>> Introduce ptr_eq() to compare two addresses while preserving the address
>> dependencies for later use of the address. It should be used when
>> comparing an address returned by rcu_dereference().
>>
>> This is needed to prevent the compiler CSE and SSA GVN optimizations
>> from replacing the registers holding @a or @b based on their
>
> "Replacing" isn't the right word. What the compiler does is use one
> rather than the other. Furthermore, the compiler can play these games
> even with values that aren't in registers.
>
> You should just say: "... from using @a (or @b) in places where the
> source refers to @b (or @a) (based on the fact that after the
> comparison, the two are known to be equal), which does not ..."

I should also point out that it is not enough to prevent the compiler
from using @a instead of @b.

It must also be prevented from assigning @b=@a, which it is often
allowed to do after finding @a==@b.

Best wishes,
jonas