diff --git a/src/arch/riscv/interrupts.c b/src/arch/riscv/interrupts.c index 7e255402e..fbe3e87c2 100644 --- a/src/arch/riscv/interrupts.c +++ b/src/arch/riscv/interrupts.c @@ -42,12 +42,10 @@ void interrupts_arch_init() void interrupts_arch_ipi_send(cpuid_t target_cpu, irqid_t ipi_id) { - UNUSED_ARG(ipi_id); - if (USE_ACLINT_IPI()) { aclint_send_ipi(target_cpu); } else { - sbi_send_ipi(1UL << target_cpu, 0); + irqc_send_ipi(target_cpu, ipi_id); } } @@ -87,6 +85,11 @@ void interrupts_arch_handle(void) stopi = stopi >> TOPI_IID_SHIFT; switch (stopi) { case IRQ_S_SOFT: + /** + * This case is executed only by APLIC configuration, + * IPIs sent through IMSIC are handled as external + * interrupts. + */ interrupts_handle(interrupts_ipi_id); csrs_sip_clear(SIP_SSIP); break;