From ad4ea619e865fd1775f87a0868322f83ccfd3209 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sat, 13 Sep 2025 20:29:32 +0200 Subject: [PATCH] Fix interrupt race condition on arm64 and riscv64 --- src/arch/aarch64/interrupt/mod.rs | 2 +- src/arch/riscv64/interrupt/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/arch/aarch64/interrupt/mod.rs b/src/arch/aarch64/interrupt/mod.rs index 1e611ff886..ab9f93c78c 100644 --- a/src/arch/aarch64/interrupt/mod.rs +++ b/src/arch/aarch64/interrupt/mod.rs @@ -26,7 +26,7 @@ pub unsafe fn disable() { #[inline(always)] pub unsafe fn enable_and_halt() { unsafe { - asm!("msr daifclr, #2", "wfi"); + asm!("wfi", "msr daifclr, #2", "nop"); } } diff --git a/src/arch/riscv64/interrupt/mod.rs b/src/arch/riscv64/interrupt/mod.rs index 89b30a1db2..ebb5d26f84 100644 --- a/src/arch/riscv64/interrupt/mod.rs +++ b/src/arch/riscv64/interrupt/mod.rs @@ -26,7 +26,7 @@ pub unsafe fn enable() { /// Performing enable followed by halt is not guaranteed to be atomic, use this instead! #[inline(always)] pub unsafe fn enable_and_halt() { - unsafe { asm!("csrsi sstatus, 1 << 1", "wfi") } + unsafe { asm!("wfi", "csrsi sstatus, 1 << 1", "nop") } } /// Set interrupts and nop