[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <x5h55qxfl4yrkhgwmijf37zfwqt52pmsts6whewniukbhcatbn@6mo3dytswd5f>
Date: Thu, 22 Jan 2026 10:38:19 -0800
From: Dmitry Torokhov <dmitry.torokhov@...il.com>
To: Geert Uytterhoeven <geert@...ux-m68k.org>
Cc: Sebastian Andrzej Siewior <bigeasy@...utronix.de>,
Marek Vasut <marek.vasut+renesas@...lbox.org>, linux-input@...r.kernel.org,
"Peter Zijlstra (Intel)" <peterz@...radead.org>, Cheng-Yang Chou <yphbchou0911@...il.com>,
Frank Li <Frank.Li@....com>, Geert Uytterhoeven <geert+renesas@...der.be>,
Jinjie Ruan <ruanjinjie@...wei.com>, Krzysztof Kozlowski <krzysztof.kozlowski@....qualcomm.com>,
Marc Zyngier <maz@...nel.org>, Thomas Gleixner <tglx@...nel.org>, linux-kernel@...r.kernel.org,
linux-renesas-soc@...r.kernel.org
Subject: Re: [PATCH 1/2] linux/interrupt.h: allow "guard" notation to disable
and reenable IRQ with valid IRQ check
On Thu, Jan 22, 2026 at 05:31:42PM +0100, Geert Uytterhoeven wrote:
> Hi Sebastian,
>
> On Thu, 22 Jan 2026 at 17:22, Sebastian Andrzej Siewior
> <bigeasy@...utronix.de> wrote:
> > On 2026-01-22 00:23:47 [+0100], Marek Vasut wrote:
> > > @@ -242,6 +242,21 @@ extern void irq_wake_thread(unsigned int irq, void *dev_id);
> > > DEFINE_LOCK_GUARD_1(disable_irq, int,
> > > disable_irq(*_T->lock), enable_irq(*_T->lock))
> > >
> > > +static inline void disable_valid_irq(unsigned int irq)
> > > +{
> > > + if (irq > 0)
> > > + disable_irq(irq);
> > > +}
> >
> > | $ grep " 0:" /proc/interrupts
> > | 0: 43 0 IO-APIC 2-edge timer
> >
> > in other words, interrupt 0 is valid.
>
> AFAIK, the x86 legacy timer interrupt is the sole remaining valid user
> of interrupt number zero.
> Nowadays lots of code assumes valid interrupt numbers are non-zero
> positive numbers.
Quoting an oldie but goodie:
"This has come up before. For example: for an IRQ, 0 means "does not
exist", it does _not_ mean "physical irq 0", and we test for whether a
device has a valid irq by doing "if (dev->irq)" rather than having some
insane architecture-specific "IRQ_NONE". And if you validly really have an
irq at the hardware level that is zero, then that just means that the irq
numbers you should tell the kernel should be translated some way.
(On a PC, hardware irq 0 is a real irq too, but it's a _special_ irq, and
it is set up by architecture-specific code. So as far as the generic
kernel and all devices are concerned, "!dev->irq" means that the irq
doesn't exist or hasn't been mapped for that device yet)."
https://lore.kernel.org/all/Pine.LNX.4.64.0701250940220.25027@woody.linux-foundation.org/
Thanks.
--
Dmitry
Powered by blists - more mailing lists