powerpc: Annotate accesses to ipi message flags
authorRohan McLure <rmclure@linux.ibm.com>
Wed, 10 May 2023 03:31:13 +0000 (13:31 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 21 Jun 2023 05:13:57 +0000 (15:13 +1000)
IPI message flags are observed and consequently consumed in the
smp_ipi_demux_relaxed function, which handles these message sources
until it observes none more arriving. Mark the checked loop guard with
READ_ONCE, to signal to KCSAN that the read is known to be volatile, and
that non-determinism is expected. Mark write for message source in
smp_muxed_ipi_set_message().

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-8-rmclure@linux.ibm.com
arch/powerpc/kernel/smp.c

index 265801a..406e6d0 100644 (file)
@@ -291,7 +291,7 @@ void smp_muxed_ipi_set_message(int cpu, int msg)
         * Order previous accesses before accesses in the IPI handler.
         */
        smp_mb();
-       message[msg] = 1;
+       WRITE_ONCE(message[msg], 1);
 }
 
 void smp_muxed_ipi_message_pass(int cpu, int msg)
@@ -350,7 +350,7 @@ irqreturn_t smp_ipi_demux_relaxed(void)
                if (all & IPI_MESSAGE(PPC_MSG_NMI_IPI))
                        nmi_ipi_action(0, NULL);
 #endif
-       } while (info->messages);
+       } while (READ_ONCE(info->messages));
 
        return IRQ_HANDLED;
 }