Re: [PATCH v2 03/11] asm-generic/mmiowb: Mark accesses to fix KCSAN warnings
From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2023-05-12 02:21:23
Rohan McLure [off-list ref] writes:
Prior to this patch, data races are detectable by KCSAN of the following
forms:
[1] Asynchronous calls to mmiowb_set_pending() from an interrupt context
or otherwise outside of a critical section
[2] Interrupted critical sections, where the interrupt will itself
acquire a lock
In case [1], calling context does not need an mmiowb() call to be
issued, otherwise it would do so itself. Such calls to
mmiowb_set_pending() are either idempotent or no-ops.
In case [2], irrespective of when the interrupt occurs, the interrupt
will acquire and release its locks prior to its return, nesting_count
will continue balanced. In the worst case, the interrupted critical
section during a mmiowb_spin_unlock() call observes an mmiowb to be
pending and afterward is interrupted, leading to an extraneous call to
mmiowb(). This data race is clearly innocuous.
Mark all potentially asynchronous memory accesses with READ_ONCE or
WRITE_ONCE, including increments and decrements to nesting_count. This
has the effect of removing KCSAN warnings at consumer's callsites.
Signed-off-by: Rohan McLure <redacted>
Reported-by: Michael Ellerman <mpe@ellerman.id.au>
Reported-by: Gautam Menghani <redacted>
Tested-by: Gautam Menghani <redacted>
Acked-by: Arnd Bergmann <arnd@arndb.de>
---
v2: Remove extraneous READ_ONCE in mmiowb_set_pending for nesting_count
---
include/asm-generic/mmiowb.h | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)This will need wider review, it's used by a lot of other architectures. Probably best to pull this one out of the series and post it separately. Add at least linux-kernel and linux-arch to Cc, and probably Will as he's the original author. cheers