kvm-riscv.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes
@ 2025-06-23 13:11 Clément Léger
  2025-06-23 13:11 ` [kvm-unit-tests PATCH 1/3] riscv: sbi: sse: Fix wrong sse stack initialization Clément Léger
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Clément Léger @ 2025-06-23 13:11 UTC (permalink / raw)
  To: kvm, kvm-riscv; +Cc: Clément Léger, Andrew Jones, Charlie Jenkins

While validating another SBI, we encountered a few crashes and errors in
the SSE tests. Fix SSE stack freeing as well as handler call checking.
Also add READ_ONCE()/WRITE_ONCE() for some shared variable.

Clément Léger (3):
  riscv: sbi: sse: Fix wrong sse stack initialization
  riscv: sbi: sse: Add missing index for handler call check
  riscv: sbi: sse: Use READ_ONCE()/WRITE_ONCE() for shared variables

 riscv/sbi-sse.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

-- 
2.50.0


-- 
kvm-riscv mailing list
kvm-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kvm-riscv

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [kvm-unit-tests PATCH 1/3] riscv: sbi: sse: Fix wrong sse stack initialization
  2025-06-23 13:11 [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes Clément Léger
@ 2025-06-23 13:11 ` Clément Léger
  2025-06-23 13:11 ` [kvm-unit-tests PATCH 2/3] riscv: sbi: sse: Add missing index for handler call check Clément Léger
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Clément Léger @ 2025-06-23 13:11 UTC (permalink / raw)
  To: kvm, kvm-riscv; +Cc: Clément Léger, Andrew Jones, Charlie Jenkins

The sse stack temporary storage wasn't correctly initialize to 0. Since
this is used to know if stack needs to be deallocated at the end (in
the error handling path), sse_stack_free() would crash if an error
happened while registering the sse event for instance. Fix this by
correctly initializing all the stacks entries.

Signed-off-by: Clément Léger <cleger@rivosinc.com>
---
 riscv/sbi-sse.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/riscv/sbi-sse.c b/riscv/sbi-sse.c
index bc6afaf5..2bac5fff 100644
--- a/riscv/sbi-sse.c
+++ b/riscv/sbi-sse.c
@@ -957,8 +957,8 @@ static void sse_test_injection_priority_arg(struct priority_test_arg *in_args,
 			continue;
 
 		args[args_size] = arg;
+		event_args[args_size].stack = 0;
 		args_size++;
-		event_args->stack = 0;
 	}
 
 	if (!args_size) {
-- 
2.50.0


-- 
kvm-riscv mailing list
kvm-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kvm-riscv

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [kvm-unit-tests PATCH 2/3] riscv: sbi: sse: Add missing index for handler call check
  2025-06-23 13:11 [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes Clément Léger
  2025-06-23 13:11 ` [kvm-unit-tests PATCH 1/3] riscv: sbi: sse: Fix wrong sse stack initialization Clément Léger
@ 2025-06-23 13:11 ` Clément Léger
  2025-06-23 13:11 ` [kvm-unit-tests PATCH 3/3] riscv: sbi: sse: Use READ_ONCE()/WRITE_ONCE() for shared variables Clément Léger
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Clément Léger @ 2025-06-23 13:11 UTC (permalink / raw)
  To: kvm, kvm-riscv; +Cc: Clément Léger, Andrew Jones, Charlie Jenkins

The check for handler to be finished was actually missing the index,
leading to a single handler call being checked.

Signed-off-by: Clément Léger <cleger@rivosinc.com>
---
 riscv/sbi-sse.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/riscv/sbi-sse.c b/riscv/sbi-sse.c
index 2bac5fff..5bfc7a07 100644
--- a/riscv/sbi-sse.c
+++ b/riscv/sbi-sse.c
@@ -1017,8 +1017,10 @@ static void sse_test_injection_priority_arg(struct priority_test_arg *in_args,
 	sbiret_report_error(&ret, SBI_SUCCESS, "injection");
 
 	/* Check that all handlers have been called */
-	for (i = 0; i < args_size; i++)
-		report(arg->called, "Event %s handler called", sse_event_name(args[i]->event_id));
+	for (i = 0; i < args_size; i++) {
+		arg = args[i];
+		report(arg->called, "Event %s handler called", sse_event_name(arg->event_id));
+	}
 
 err:
 	for (i = 0; i < args_size; i++) {
-- 
2.50.0


-- 
kvm-riscv mailing list
kvm-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kvm-riscv

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [kvm-unit-tests PATCH 3/3] riscv: sbi: sse: Use READ_ONCE()/WRITE_ONCE() for shared variables
  2025-06-23 13:11 [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes Clément Léger
  2025-06-23 13:11 ` [kvm-unit-tests PATCH 1/3] riscv: sbi: sse: Fix wrong sse stack initialization Clément Léger
  2025-06-23 13:11 ` [kvm-unit-tests PATCH 2/3] riscv: sbi: sse: Add missing index for handler call check Clément Léger
@ 2025-06-23 13:11 ` Clément Léger
  2025-06-23 16:49 ` [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes Andrew Jones
  2025-07-02 14:46 ` Andrew Jones
  4 siblings, 0 replies; 6+ messages in thread
From: Clément Léger @ 2025-06-23 13:11 UTC (permalink / raw)
  To: kvm, kvm-riscv; +Cc: Clément Léger, Andrew Jones, Charlie Jenkins

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@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


-- 
kvm-riscv mailing list
kvm-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kvm-riscv

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes
  2025-06-23 13:11 [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes Clément Léger
                   ` (2 preceding siblings ...)
  2025-06-23 13:11 ` [kvm-unit-tests PATCH 3/3] riscv: sbi: sse: Use READ_ONCE()/WRITE_ONCE() for shared variables Clément Léger
@ 2025-06-23 16:49 ` Andrew Jones
  2025-07-02 14:46 ` Andrew Jones
  4 siblings, 0 replies; 6+ messages in thread
From: Andrew Jones @ 2025-06-23 16:49 UTC (permalink / raw)
  To: Clément Léger; +Cc: kvm, kvm-riscv, Andrew Jones, Charlie Jenkins

On Mon, Jun 23, 2025 at 03:11:22PM +0200, Clément Léger wrote:
> While validating another SBI, we encountered a few crashes and errors in
> the SSE tests. Fix SSE stack freeing as well as handler call checking.
> Also add READ_ONCE()/WRITE_ONCE() for some shared variable.
> 
> Clément Léger (3):
>   riscv: sbi: sse: Fix wrong sse stack initialization
>   riscv: sbi: sse: Add missing index for handler call check
>   riscv: sbi: sse: Use READ_ONCE()/WRITE_ONCE() for shared variables
> 
>  riscv/sbi-sse.c | 20 ++++++++++++--------
>  1 file changed, 12 insertions(+), 8 deletions(-)
> 
> -- 
> 2.50.0
>

Applied to riscv/sbi

https://gitlab.com/jones-drew/kvm-unit-tests/-/commits/riscv/sbi

Thanks,
drew

-- 
kvm-riscv mailing list
kvm-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kvm-riscv

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes
  2025-06-23 13:11 [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes Clément Léger
                   ` (3 preceding siblings ...)
  2025-06-23 16:49 ` [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes Andrew Jones
@ 2025-07-02 14:46 ` Andrew Jones
  4 siblings, 0 replies; 6+ messages in thread
From: Andrew Jones @ 2025-07-02 14:46 UTC (permalink / raw)
  To: Clément Léger; +Cc: kvm, kvm-riscv, Andrew Jones, Charlie Jenkins

On Mon, Jun 23, 2025 at 03:11:22PM +0200, Clément Léger wrote:
> While validating another SBI, we encountered a few crashes and errors in
> the SSE tests. Fix SSE stack freeing as well as handler call checking.
> Also add READ_ONCE()/WRITE_ONCE() for some shared variable.
> 
> Clément Léger (3):
>   riscv: sbi: sse: Fix wrong sse stack initialization
>   riscv: sbi: sse: Add missing index for handler call check
>   riscv: sbi: sse: Use READ_ONCE()/WRITE_ONCE() for shared variables
> 
>  riscv/sbi-sse.c | 20 ++++++++++++--------
>  1 file changed, 12 insertions(+), 8 deletions(-)
> 
> -- 
> 2.50.0
>

Merged. Thanks

-- 
kvm-riscv mailing list
kvm-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kvm-riscv

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-07-02 16:51 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-23 13:11 [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes Clément Léger
2025-06-23 13:11 ` [kvm-unit-tests PATCH 1/3] riscv: sbi: sse: Fix wrong sse stack initialization Clément Léger
2025-06-23 13:11 ` [kvm-unit-tests PATCH 2/3] riscv: sbi: sse: Add missing index for handler call check Clément Léger
2025-06-23 13:11 ` [kvm-unit-tests PATCH 3/3] riscv: sbi: sse: Use READ_ONCE()/WRITE_ONCE() for shared variables Clément Léger
2025-06-23 16:49 ` [kvm-unit-tests PATCH 0/3] riscv: sbi: sse: Fix some potential crashes Andrew Jones
2025-07-02 14:46 ` Andrew Jones

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).