diff --git a/arch/arm/src/armv8-r/arm_doirq.c b/arch/arm/src/armv8-r/arm_doirq.c index 98c5dc4bc22d0..af47bc641de40 100644 --- a/arch/arm/src/armv8-r/arm_doirq.c +++ b/arch/arm/src/armv8-r/arm_doirq.c @@ -58,7 +58,9 @@ uint32_t *arm_doirq(int irq, uint32_t *regs) * and we will use this_task(). Therefore, it cannot be overridden. */ +#ifdef CONFIG_SMP if (irq != GIC_SMP_CPUSTART) +#endif { tcb->xcp.regs = regs; } @@ -72,11 +74,10 @@ uint32_t *arm_doirq(int irq, uint32_t *regs) /* Deliver the IRQ */ irq_dispatch(irq, regs); + tcb = this_task(); if (regs != tcb->xcp.regs) { - tcb = this_task(); - /* Update scheduler parameters */ nxsched_suspend_scheduler(g_running_tasks[this_cpu()]); @@ -87,7 +88,7 @@ uint32_t *arm_doirq(int irq, uint32_t *regs) * crashes. */ - g_running_tasks[this_cpu()] = this_task(); + g_running_tasks[this_cpu()] = tcb; regs = tcb->xcp.regs; }