On Tue, Apr 27, 2021 at 06:10:09PM -0400, Joe Korty wrote: > Balance local_irq_{disable,enable} usage in irq_forced_thread_fn > > Re: 0152-genirq-Allow-disabling-of-softirq-processing-in-irq-.patch > > In 4.9.263-rt177, irq_forced_thread_fn has potentially unbalanced calls to > local_irq_disable ... local_irq_enable. This is probably not intentional. > > I am not absolutely sure what the proper fix is. Attached is an example > of what that might look like. > > [ Issue detected via compiler warning, using a sufficiently advanced gcc ] > > Signed-off-by: Joe Korty <joe.korty@xxxxxxxxxxxxxxxxx> Joe, I fell a bit behind on v4.9-rt and intend to get up to date this weekend. I am now satisfied with my current backport of the futex changes from v4.9.264 and my 96h of pi_stress testing. Your patch makes sense, taking v4.19-rt as reference, but I will wait for comments from the wise people you listed on the Cc: before taking action. Best regards, Luis > > Index: b/kernel/irq/manage.c > =================================================================== > --- a/kernel/irq/manage.c > +++ b/kernel/irq/manage.c > @@ -1035,6 +1035,9 @@ irq_forced_thread_fn(struct irq_desc *de > atomic_inc(&desc->threads_handled); > > irq_finalize_oneshot(desc, action); > + > + if (!IS_ENABLED(CONFIG_PREEMPT_RT_BASE)) > + local_irq_enable(); > /* > * Interrupts which have real time requirements can be set up > * to avoid softirq processing in the thread handler. This is > @@ -1043,8 +1046,6 @@ irq_forced_thread_fn(struct irq_desc *de > if (irq_settings_no_softirq_call(desc)) > _local_bh_enable(); > else > - if (!IS_ENABLED(CONFIG_PREEMPT_RT_BASE)) > - local_irq_enable(); > local_bh_enable(); > return ret; > } ---end quoted text---