Wait for ICR then just assert the signal. Linux and NetBSD does it this way, assume they know better. --- i386/i386/smp.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/i386/i386/smp.c b/i386/i386/smp.c index 05e9de67..a758eea3 100644 --- a/i386/i386/smp.c +++ b/i386/i386/smp.c @@ -54,17 +54,11 @@ static void smp_send_ipi(unsigned apic_id, unsigned vector) cpu_intr_save(&flags); - apic_send_ipi(NO_SHORTHAND, FIXED, PHYSICAL, ASSERT, EDGE, vector, apic_id); - do { cpu_pause(); } while(lapic->icr_low.delivery_status == SEND_PENDING); - apic_send_ipi(NO_SHORTHAND, FIXED, PHYSICAL, DE_ASSERT, EDGE, vector, apic_id); - - do { - cpu_pause(); - } while(lapic->icr_low.delivery_status == SEND_PENDING); + apic_send_ipi(NO_SHORTHAND, FIXED, PHYSICAL, ASSERT, EDGE, vector, apic_id); cpu_intr_restore(flags); } -- 2.43.0