On 16/08/2022 13.14, Herbert Xu wrote: > Hector Martin <marcan@xxxxxxxxx> wrote: >> >> This has been broken since the dawn of time, and it was incompletely >> fixed by 346c09f80459, which added the necessary barriers in the work >> execution path but failed to account for the missing barrier in the >> test_and_set_bit() failure case. Fix it by switching to >> atomic_long_fetch_or(), which does have unconditional barrier semantics >> regardless of whether the bit was already set or not (this is actually >> just test_and_set_bit() minus the early exit path). > > test_and_set_bit is supposed to contain a full memory barrier. > If it doesn't then your arch is broken and needs to be fixed. > > Changing this one spot is pointless because such assumptions > are all over the kernel. Documentation/atomic_bitops.txt and the asm-generic implementaton disagree with you, so this isn't quite as simple as "your arch is broken" :-) - Hector