[kvm-unit-tests PATCH 3/3] riscv: sbi: sse: Use READ_ONCE()/WRITE_ONCE() for shared variables
Clément Léger
cleger at rivosinc.com
Mon Jun 23 06:11:25 PDT 2025
Use READ_ONCE() and WRITE_ONCE() for variables that are shared between
the SSE handler and the main process.
Signed-off-by: Clément Léger <cleger at rivosinc.com>
---
riscv/sbi-sse.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/riscv/sbi-sse.c b/riscv/sbi-sse.c
index 5bfc7a07..0dfabacb 100644
--- a/riscv/sbi-sse.c
+++ b/riscv/sbi-sse.c
@@ -918,15 +918,16 @@ static void sse_low_priority_test_handler(void *arg, struct pt_regs *regs,
unsigned int hartid)
{
struct priority_test_arg *targ = arg;
- struct priority_test_arg *next = targ->next_event_arg;
+ struct priority_test_arg *next = READ_ONCE(targ->next_event_arg);
- targ->called = true;
+ WRITE_ONCE(targ->called, true);
if (next) {
sbi_sse_inject(next->event_id, current_thread_info()->hartid);
report(sse_event_pending(next->event_id), "Lower priority event is pending");
- report(!next->called, "Lower priority event %s was not handled before %s",
+ report(!READ_ONCE(next->called),
+ "Lower priority event %s was not handled before %s",
sse_event_name(next->event_id), sse_event_name(targ->event_id));
}
}
@@ -977,9 +978,9 @@ static void sse_test_injection_priority_arg(struct priority_test_arg *in_args,
event_arg->stack = stack;
if (i < (args_size - 1))
- arg->next_event_arg = args[i + 1];
+ WRITE_ONCE(arg->next_event_arg, args[i + 1]);
else
- arg->next_event_arg = NULL;
+ WRITE_ONCE(arg->next_event_arg, NULL);
/* Be sure global events are targeting the current hart */
if (sbi_sse_event_is_global(event_id)) {
@@ -1019,7 +1020,8 @@ static void sse_test_injection_priority_arg(struct priority_test_arg *in_args,
/* Check that all handlers have been called */
for (i = 0; i < args_size; i++) {
arg = args[i];
- report(arg->called, "Event %s handler called", sse_event_name(arg->event_id));
+ report(READ_ONCE(arg->called), "Event %s handler called",
+ sse_event_name(arg->event_id));
}
err:
--
2.50.0
More information about the kvm-riscv
mailing list