From 8ac79edd6b2e41e4dc96c4036f60e31f0962cfa4 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 31 Aug 2025 14:17:40 -0300 Subject: [PATCH] apic: fix ipi race --- kernel-src/arch/x86-64/apic.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel-src/arch/x86-64/apic.c b/kernel-src/arch/x86-64/apic.c index 8116ddfd..ef8f47c0 100644 --- a/kernel-src/arch/x86-64/apic.c +++ b/kernel-src/arch/x86-64/apic.c @@ -244,9 +244,11 @@ void arch_apic_timerinit() { INIT_ROUTINE_DEFINE(arch_timer, INIT_ROUTINE_FLAGS_NONE, arch_apic_timerinit, timekeeper_early); void arch_apic_sendipi(uint8_t cpu, uint8_t vec, uint8_t dest, uint8_t mode, uint8_t level) { + bool status = interrupt_set(false); writelapic(APIC_REG_ICR_HI, (uint32_t)cpu << 24); writelapic(APIC_REG_ICR_LO, vec | (level << 8) | (mode << 11) | (dest << 18) | (1 << 14)); while (readlapic(APIC_REG_ICR_LO) & APIC_REG_ICR_LO_STATUS) CPU_PAUSE(); + interrupt_set(status); } void arch_apic_init() {