Re: [PATCH 1/2] linux/interrupt.h: allow "guard" notation to disable and reenable IRQ with valid IRQ check
From: Marek Vasut
Date: Wed Jan 28 2026 - 08:29:55 EST
On 1/27/26 10:14 AM, Thomas Gleixner wrote:
On Thu, Jan 22 2026 at 00:23, Marek Vasut wrote:
$Subject: linux/interrupt.h is not a proper prefix. Just use 'genirq:'
Also what means 'allow ....'? Subject lines should provide a concise
summary of the change, i.e. something like:
Provide conditional disable_irq guard variant
I did admittedly replicate the subject and tags from prior commit
c76494768761 ("linux/interrupt.h: allow "guard" notation to disable and reenable IRQ")
Fixed, thanks.
Introduce disable_valid_irq scoped guard. This is an extension
of disable_irq scoped guard, which disables and enables IRQs
around a scope. The disable_valid_irq scoped guard does almost
the same, except it handles the case where IRQ is not valid,
in which case it does not do anything. This is meant to be used
by for example touch controller drivers, which can do both IRQ
driven and polling mode of operation, and this makes their code
slighly simpler.
How many of those have this pattern? From a cursory look I found not
even one as your example is neither applicable to upstream nor to next.
One. I think I have two-ish more candidates for conversion.
I wouldn't even be opposed to converting the ili2xxx driver (the piece of code in patch 2/2 of this series) back to simple enable/disable_irq() . I am not particularly on board even with the disable_irq lock guard, or more specifically, lock guard used for non-lock things like this.+static inline void disable_valid_irq(unsigned int irq)
+{
+ if (irq > 0)
+ disable_irq(irq);
+}
+
+static inline void enable_valid_irq(unsigned int irq)
+{
+ if (irq > 0)
+ enable_irq(irq);
+}
+
+DEFINE_LOCK_GUARD_1(disable_valid_irq, int,
'int' because it matches the function argument type of the inlines,
right?
+ disable_valid_irq(*_T->lock), enable_valid_irq(*_T->lock))
disable_valid_irq is a pretty non-intuitive name if you look at it just
by reading a usage site. It's not really improving the readability of
the code, it's in fact obscuring it as the reader has to actually look
up what the hell this means and then stumble upon a completely
undocumented lock guard define.
I'm all for using guards, but using guards just for the sake of using
guards is not a really good approach.