Messages in this thread | | | From | "Sverdlin, Alexander" <> | Subject | Re: [PATCH 3/3] kernel/irq/manage.c: disable_irq() might sleep. | Date | Tue, 20 Dec 2022 06:58:41 +0000 |
| |
Hi Manfred!
On Fri, 2022-12-16 at 16:04 +0100, Manfred Spraul wrote: > With the introduction of threaded interrupt handlers, it is virtually > never safe to call disable_irq() from non-premptible context. > > Thus: Update the documentation, add a might_sleep() to catch any > offenders. > > Fixes: 3aa551c9b4c4 ("genirq: add threaded interrupt handler > support") > > Signed-off-by: Manfred Spraul <manfred@colorfullife.com> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: "Sverdlin, Alexander" <alexander.sverdlin@siemens.com> > --- > kernel/irq/manage.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c > index 5b7cf28df290..8ce75495e04f 100644 > --- a/kernel/irq/manage.c > +++ b/kernel/irq/manage.c > @@ -723,10 +723,13 @@ EXPORT_SYMBOL(disable_irq_nosync); > * to complete before returning. If you use this function while > * holding a resource the IRQ handler may need you will > deadlock. > * > - * This function may be called - with care - from IRQ context. > + * Can only be called from preemptible code as it might sleep > when > + * an interrupt thread is associated to @irq. > + * > */ > void disable_irq(unsigned int irq) > { > + might_sleep();
I'm not sure about this, latest wait_event() inside synchronize_irq() has it already.
> if (!__disable_irq_nosync(irq)) > synchronize_irq(irq); > }
-- Alexander Sverdlin Siemens AG www.siemens.com
| |