This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new fc6fd3f24d6 arch/risc-v/qemu-rv: Configure PMP before booting
secondary harts.
fc6fd3f24d6 is described below
commit fc6fd3f24d68764c54706390048453f79e968e6f
Author: Shunchao Hu <[email protected]>
AuthorDate: Sat Mar 28 21:58:21 2026 +0800
arch/risc-v/qemu-rv: Configure PMP before booting secondary harts.
Export qemu_rv_configure_mpu() and invoke it on the secondary-hart
boot path before riscv_cpu_boot().
This keeps protected SMP builds from faulting on !CPU0 when userspace
work is first scheduled there.
Signed-off-by: Shunchao Hu <[email protected]>
---
arch/risc-v/src/qemu-rv/qemu_rv_start.c | 3 +++
arch/risc-v/src/qemu-rv/qemu_rv_userspace.c | 6 +++---
arch/risc-v/src/qemu-rv/qemu_rv_userspace.h | 1 +
3 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/arch/risc-v/src/qemu-rv/qemu_rv_start.c
b/arch/risc-v/src/qemu-rv/qemu_rv_start.c
index de4c49a671a..e09144fbab4 100644
--- a/arch/risc-v/src/qemu-rv/qemu_rv_start.c
+++ b/arch/risc-v/src/qemu-rv/qemu_rv_start.c
@@ -227,6 +227,9 @@ void qemu_rv_start(int mhartid, const char *dtb)
cpux:
#ifdef CONFIG_SMP
+# ifdef CONFIG_BUILD_PROTECTED
+ qemu_rv_configure_mpu();
+# endif
riscv_cpu_boot(mhartid);
#endif
diff --git a/arch/risc-v/src/qemu-rv/qemu_rv_userspace.c
b/arch/risc-v/src/qemu-rv/qemu_rv_userspace.c
index ecd09fcbf29..f5a1d9d330d 100644
--- a/arch/risc-v/src/qemu-rv/qemu_rv_userspace.c
+++ b/arch/risc-v/src/qemu-rv/qemu_rv_userspace.c
@@ -55,7 +55,7 @@
****************************************************************************/
/****************************************************************************
- * Name: configure_mpu
+ * Name: qemu_rv_configure_mpu
*
* Description:
* This function configures the MPU for for kernel- / userspace separation.
@@ -63,7 +63,7 @@
*
****************************************************************************/
-static void configure_mpu(void)
+void qemu_rv_configure_mpu(void)
{
int ret;
ret = riscv_append_pmp_region(UFLASH_F, UFLASH_START, UFLASH_SIZE);
@@ -123,7 +123,7 @@ void qemu_rv_userspace(void)
/* Configure MPU / PMP to grant access to the userspace */
- configure_mpu();
+ qemu_rv_configure_mpu();
}
#endif /* CONFIG_BUILD_PROTECTED */
diff --git a/arch/risc-v/src/qemu-rv/qemu_rv_userspace.h
b/arch/risc-v/src/qemu-rv/qemu_rv_userspace.h
index 4d41613373d..1dffbf6dd9b 100644
--- a/arch/risc-v/src/qemu-rv/qemu_rv_userspace.h
+++ b/arch/risc-v/src/qemu-rv/qemu_rv_userspace.h
@@ -45,6 +45,7 @@
****************************************************************************/
#ifdef CONFIG_BUILD_PROTECTED
+void qemu_rv_configure_mpu(void);
void qemu_rv_userspace(void);
#endif