powerpc: qspinlock: Enforce qnode writes prior to publishing to queue
authorRohan McLure <rmclure@linux.ibm.com>
Wed, 10 May 2023 03:31:08 +0000 (13:31 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 21 Jun 2023 05:13:57 +0000 (15:13 +1000)
commit6f3136326ee47ae2dd5dac9306c9b08ccbc7e81e
tree0eca854cfea9058613cfd0b83f6747b42eaa3252
parent03d44ee80eac980a869ed3d5637ed85de6fb957f
powerpc: qspinlock: Enforce qnode writes prior to publishing to queue

Annotate the release barrier and memory clobber (in effect, producing a
compiler barrier) in the publish_tail_cpu call. These barriers have the
effect of ensuring that qnode attributes are all written to prior to
publish the node to the waitqueue.

Even while the initial write to the 'locked' attribute is guaranteed to
terminate prior to the node being visible, KCSAN still complains that
the write is reorderable by the compiler. Issue a kcsan_release() to
inform KCSAN of the release barrier contained in publish_tail_cpu().

Signed-off-by: Rohan McLure <rmclure@linux.ibm.com>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230510033117.1395895-3-rmclure@linux.ibm.com
arch/powerpc/lib/qspinlock.c