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
 

Reply via email to