From 96d9823ddda26481bd0e8f8105826b7adf7fe121 Mon Sep 17 00:00:00 2001 From: Jan Sommer Date: Sun, 31 May 2020 16:22:59 +0200 Subject: bsp/pc386: Disable interrupt nesting for job handler - Fixes timeout for smpipi01 where: + Main thread sends perform jobs to worker cpu while it is already performing jobs + Interrupt on worker cpu performs jobs, but with empty job list + Worker cpu continues to execut previous job and adds new job list to itself, which is never performed, since the interrupt has already been handled + Main thread blocks forever on barrier D --- bsps/i386/pc386/start/smp-imps.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bsps/i386/pc386/start/smp-imps.c b/bsps/i386/pc386/start/smp-imps.c index de593f3c40..0985b8f08f 100644 --- a/bsps/i386/pc386/start/smp-imps.c +++ b/bsps/i386/pc386/start/smp-imps.c @@ -768,7 +768,17 @@ static void bsp_inter_processor_interrupt(void *arg) smp_apic_ack(); + /* + * Disallow nesting. + */ + __asm__ __volatile__("cli"); + _SMP_Inter_processor_interrupt_handler(_Per_CPU_Get()); + + /* + * Allow nesting. + */ + __asm__ __volatile__("sti"); } void -- cgit v1.2.3