Commit 331e2cad authored by Rohan McLure's avatar Rohan McLure Committed by Michael Ellerman
Browse files

powerpc: powernv: Annotate data races in opal events



The kopald thread handles opal events as they appear, but by polling a
static bit-vector in last_outstanding_events. Annotate these data races
accordingly. We are not at risk of missing events, but use of READ_ONCE,
WRITE_ONCE will assist readers in seeing that kopald only consumes the
events it is aware of when it is scheduled. Also removes extraneous
KCSAN warnings.

Signed-off-by: default avatarRohan McLure <rmclure@linux.ibm.com>
Reviewed-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230510033117.1395895-10-rmclure@linux.ibm.com
parent 86dacd96
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ void opal_handle_events(void)

		cond_resched();
	}
	last_outstanding_events = 0;
	WRITE_ONCE(last_outstanding_events, 0);
	if (opal_poll_events(&events) != OPAL_SUCCESS)
		return;
	e = be64_to_cpu(events) & opal_event_irqchip.mask;
@@ -69,7 +69,7 @@ void opal_handle_events(void)

bool opal_have_pending_events(void)
{
	if (last_outstanding_events & opal_event_irqchip.mask)
	if (READ_ONCE(last_outstanding_events) & opal_event_irqchip.mask)
		return true;
	return false;
}
@@ -124,7 +124,7 @@ static irqreturn_t opal_interrupt(int irq, void *data)
	__be64 events;

	opal_handle_interrupt(virq_to_hw(irq), &events);
	last_outstanding_events = be64_to_cpu(events);
	WRITE_ONCE(last_outstanding_events, be64_to_cpu(events));
	if (opal_have_pending_events())
		opal_wake_poller();