Re: [PATCH] 4.9.263-rt177: Balance local_irq_{disable,enable} in irq_forced_thread_fn

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Tue, Apr 27, 2021 at 07:47:41PM -0300, Luis Claudio R. Goncalves wrote:
> 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.

I had to resolve the same merge conflict in v4.4-rt. The fix from Joe
resolve to the same solution I've done in v4.4-rt

> 
> 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);
> > +

Nit there is no new line here in upstream, dd652c6ab49b ("genirq:
Disable interrupts for force threaded handlers")

> > +	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---

Thanks,
Daniel



[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux