libsel4utils: Instruction fence after bootstrap On RISC-V platforms, perform an instruction fence after copying the text segment into a new vspace. We need to make sure the text segment is written back from the L1D$ to main memory and visible to the I$. Signed-off-by: Nils Wistoff <nwistoff@iis.ee.ethz.ch>
diff --git a/libsel4utils/src/vspace/bootstrap.c b/libsel4utils/src/vspace/bootstrap.c index 07ef5ff..6d9d80b 100644 --- a/libsel4utils/src/vspace/bootstrap.c +++ b/libsel4utils/src/vspace/bootstrap.c
@@ -459,7 +459,10 @@ #ifdef CONFIG_ARCH_ARM seL4_ARM_Page_Unify_Instruction(dest.capPtr, 0, PAGE_SIZE_4K); seL4_ARM_Page_Unify_Instruction(cap, 0, PAGE_SIZE_4K); -#endif /* CONFIG_ARCH_ARM */ +#elif CONFIG_ARCH_RISCV + /* Ensure that the writes to memory that may be executed become visible */ + asm volatile("fence.i" ::: "memory"); +#endif /* unmap our copy */ vspace_unmap_pages(current, dest_addr, 1, seL4_PageBits, VSPACE_PRESERVE);