From 71bdc667d3098230641c8b0071b78c2dbb557865 Mon Sep 17 00:00:00 2001 From: hujun5 Date: Sun, 30 Jun 2024 16:02:08 +0800 Subject: [PATCH] irq: remove g_cpu_nestcount in restore_critical_section because 'g_cpu_nestcount[me] > 0' will never happen test: We can use qemu for testing. compiling make distclean -j20; ./tools/configure.sh -l qemu-armv8a:nsh_smp ;make -j20 running qemu-system-aarch64 -cpu cortex-a53 -smp 4 -nographic -machine virt,virtualization=on,gic-version=3 -net none -chardev stdio,id=con,mux=on -serial chardev:con -mon chardev=con,mode=readline -kernel ./nuttx Signed-off-by: hujun5 --- sched/irq/irq_csection.c | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/sched/irq/irq_csection.c b/sched/irq/irq_csection.c index 224358642dc79..175ce0daced36 100644 --- a/sched/irq/irq_csection.c +++ b/sched/irq/irq_csection.c @@ -621,25 +621,9 @@ void restore_critical_section(void) */ tcb = current_task(me); - if (tcb->irqcount > 0) + DEBUGASSERT(g_cpu_nestcount[me] <= 0); + if (tcb->irqcount <= 0) { - /* Do notihing here - * NOTE: spin_setbit() is done in nxsched_add_readytorun() - * and nxsched_remove_readytorun() - */ - } - - /* No.. This CPU will be relinquishing the lock. But this works - * differently if we are performing a context switch from an - * interrupt handler and the interrupt handler has established - * a critical section. We can detect this case when - * g_cpu_nestcount[me] > 0. - */ - - else if (g_cpu_nestcount[me] <= 0) - { - /* Release our hold on the IRQ lock. */ - if ((g_cpu_irqset & (1 << me)) != 0) { cpu_irqlock_clear();