[PATCH v2 2/2] sbi: sbi_domain_context: Add spinlock for updating domain assigned_harts
Yu Chien Peter Lin
peterlin at andestech.com
Wed Mar 27 20:33:03 PDT 2024
Add spinlock protection to avoid race condition on assigned_harts
during domain context switching.
Signed-off-by: Yu Chien Peter Lin <peterlin at andestech.com>
Signed-off-by: Alvin Chang <alvinga at andestech.com>
---
Changes v2:
- New patch
---
lib/sbi/sbi_domain_context.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/lib/sbi/sbi_domain_context.c b/lib/sbi/sbi_domain_context.c
index a41dc8c7..e891c22a 100755
--- a/lib/sbi/sbi_domain_context.c
+++ b/lib/sbi/sbi_domain_context.c
@@ -15,6 +15,8 @@
#include <sbi/sbi_string.h>
#include <sbi/sbi_domain_context.h>
+static spinlock_t assigned_harts_lock = SPIN_LOCK_INITIALIZER;
+
/**
* Switches the HART context from the current domain to the target domain.
* This includes changing domain assignments and reconfiguring PMP, as well
@@ -34,10 +36,12 @@ static void switch_to_next_domain_context(struct sbi_context *ctx,
/* Assign current hart to target domain */
hartindex = sbi_hartid_to_hartindex(current_hartid());
+ spin_lock(&assigned_harts_lock);
sbi_hartmask_clear_hartindex(
hartindex, &sbi_domain_thishart_ptr()->assigned_harts);
sbi_update_hartindex_to_domain(hartindex, dom);
sbi_hartmask_set_hartindex(hartindex, &dom->assigned_harts);
+ spin_unlock(&assigned_harts_lock);
/* Reconfigure PMP settings for the new domain */
for (int i = 0; i < pmp_count; i++) {
--
2.34.1
More information about the opensbi
mailing list