v1 of this patch series available here: Link: https://lore.kernel.org/linuxppc-dev/20230508020120.218494-1-rmcl...@linux.ibm.com/
The KCSAN sanitiser notifies programmers of instances where unmarked accesses to shared state has lead to a data race, or when the compiler has liberty to reorder an unmarked access and so generate a data race. This patch series deals with benign data races, which nonetheless need annotation in order to ensure the correctness of the emitted code. In keeping with the principles given in tools/memory-model/Documentation/access-marking.txt, racing reads of shared state for purely diagnostic/debug purposes are annotated with data_race, while reads/writes that are examples of intention polling of shared variables are performed with READ_ONCE, WRITE_ONCE. These changes remove the majority of warnings observable on pseries and powernv, where for development, I was able to narrow down to only power relevant bugs by temporarily disabling sanitisation for all other files. Future patch series will deal with the subtler bugs which persist under this configuration. KCSAN races addressed: - qspinlock: assignign of qnode->locked and polling - check_return_regs_valid [h]srr_valid - arch_cpu_idle idle callback - powernv idle_state paca entry (polling the bit-lock is viewed by KCSAN as asynchronous access to the fields it protects) - Asynchronous access to irq_data->hwirq - Opal asynchronous event handling - IPIs Miscellaneous other changes: - Annotate the asm-generic/mmiowb code, which riscv and powerpc each consume - Update usages of qnode->locked in powerpc's qspinlock interpretation to reflect the comment beside this field v2: - Match READ_ONCE with WRITE_ONCE and vice versa where required - In arch/powerpc/lib/qspinlock.c, use kcsan_release() to notify KCSAN of locked being assigned prior to publish, and remove extraneous compiler barrier (publish_tail_cpu features memory clobber). - Keep polarity for locked variable in qspinlock - Remove extraneous READ_ONCE in mmiowb() - Use data_race() for power_save callback to remove instrumentation, as there is no real data race Rohan McLure (11): powerpc: qspinlock: Mark accesses to qnode lock checks powerpc: qspinlock: Enforce qnode writes prior to publishing to queue asm-generic/mmiowb: Mark accesses to fix KCSAN warnings powerpc: Mark [h]ssr_valid accesses in check_return_regs_valid powerpc: Mark accesses to power_save callback in arch_cpu_idle powerpc: powernv: Fix KCSAN datarace warnings on idle_state contention powerpc: Annotate accesses to ipi message flags powerpc: Mark writes registering ipi to host cpu through kvm and polling powerpc: powernv: Annotate data races in opal events powerpc: powernv: Annotate asynchronous access to opal tokens powerpc: Mark asynchronous accesses to irq_data arch/powerpc/include/asm/kvm_ppc.h | 4 ++-- arch/powerpc/include/asm/paca.h | 1 + arch/powerpc/include/asm/ptrace.h | 4 ++-- arch/powerpc/kernel/idle.c | 9 ++++++--- arch/powerpc/kernel/interrupt.c | 14 ++++++-------- arch/powerpc/kernel/irq.c | 2 +- arch/powerpc/kernel/smp.c | 4 ++-- arch/powerpc/kvm/book3s_hv_builtin.c | 4 ++-- arch/powerpc/lib/qspinlock.c | 11 +++++++++-- arch/powerpc/platforms/powernv/idle.c | 16 +++++++++------- arch/powerpc/platforms/powernv/opal-async.c | 6 +++--- arch/powerpc/platforms/powernv/opal-irqchip.c | 6 +++--- arch/powerpc/platforms/powernv/pci-ioda.c | 12 ++++++------ include/asm-generic/mmiowb.h | 14 +++++++++----- include/linux/irq.h | 2 +- kernel/irq/irqdomain.c | 4 ++-- 16 files changed, 64 insertions(+), 49 deletions(-) -- 2.37.2