Re: [tip: irq/core] genirq: Warn about using IRQF_ONESHOT without a threaded handler
From: Jonathan Cameron
Date: Sat Feb 14 2026 - 10:08:51 EST
On Sat, 14 Feb 2026 15:00:42 +0000
Jonathan Cameron <jic23@xxxxxxxxxx> wrote:
> On Sun, 08 Feb 2026 18:00:53 -0800
> srinivas pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx> wrote:
>
> > On Sat, 2026-02-07 at 15:46 +0000, Jonathan Cameron wrote:
> > > On Tue, 3 Feb 2026 15:58:56 +0100
> > > Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> wrote:
> > >
> > > > On 2026-02-03 11:43:53 [+0100], Bert Karwatzki wrote:
> > > > > Yes, this should call warn_no_thread() when the interrupt is
> > > > > triggered, but
> > > > > I don't know if these sensors are actually functional on my
> > > > > laptop (I've never
> > > > > tried to use them).
> > > > >
> > > > > So I installed libiio-utils from debian and this is the output
> > > > > from
> > > > > iio_info:
> > > > …
> > > > >
> > > > > The iio:device* sensors all report 0 for the "offset value", so
> > > > > these
> > > > > sensors are maybe non-fuctional.
> > > > >
> > > > >
> > > > > > What did I miss?
> > > > >
> > > > > I don't think you missed something, but the thread function being
> > > > > NULL here
> > > > > could a problem on devices where these sensors actually work. (Or
> > > > > perhaps these sensors
> > > > > need to be polled and the interrupts never trigger (?))
> > > >
> > > > I only found one handler where the thread handler was NULL and it
> > > > returned WAKE_THREAD. So this _is_ broken.
> > > > Was it one of the driver I mentioned? If so I suggest to fix those
> > > > first. I have no idea how this should work…
> > > Both the drivers that are called out in this discussion look to
> > > be registering a triggered buffer, but are not using a trigger to
> > > fill
> > > it. So they should not be doing that in the first place.
> >
> > Replacing with devm_iio_kfifo_buffer_setup_ext() breaks user space on
> > laptops as they expect current_trigger. This is not available for
> > INDIO_BUFFER_SOFTWARE. Using INDIO_BUFFER_TRIGGERED doesn't help
> > without poll function. Still breaks user space. This all works from
> > Linux 3.1x in this mode.
>
> Ah ok. So I wouldn't have gone in this direction in the first
> place. Obviously I missed it at the time ;(
> Given where we are we can't remove it without breaking backwards compatibility.
> I thought we'd long ago taught userspace to handle devices with untriggered
> buffers but as ever with ABI we can never assume that's universal (and maybe
> not even common!) IIRC the reason untriggered buffers became common
> was when device with hardware FIFOs came along and the trigger is still there
> but never visible to software. Which is kind of similar to the cases you
> are referring to I think.
>
> >
> > Sensors are powered off till user space writes to current_trigger which
> > results in call to .set_trigger_state() via
> > iio_trigger_attach_poll_func().
>
> With hindsight I'm not sure why we'd do that rather than doing it in the
> buffer enable, but we are stuck so that doesn't matter now.
>
> >
> > Here the hub is pushing data, not pulled to register a thread handler
> > and read.
> >
> > So not sure what to add to thread handler other than dummy function.
>
> Yes, let's do that but add a note to it saying that it should not
> be copied into new drivers + can we throw a big warning print in the
> dummy handler and stop proving a meaningless top half?
Actually. Given neither handler make sense (top half or thread), can we
check for both being NULL and then just not register the interrupt at
all? Then we just need a bit of documentation to say what that
'special' set of parameters means.
I think that just means not allocating + assigning the pollfunc but
I haven't chased through to make sure that works and I'd imagine the tear
down path will need to handle that differently.
Another nastier route that might work that I'm a bit less keen on is
register the buffer without trigger and then set the modes manually
to include a triggered one so current_trigger gets created. If that
works then we'd want some very careful documentation + maybe helpers as that
feels a bit too much like we are taking advantage of an internal implementation
detail rather than something that will obviously work.
Jonathan
>
> We have a few really annoying corner cases where a 'fake' current trigger
> is used to switch between types of trigger. This is usually for wiring
> up various in device signals rather than having software in the path.
> Those would need a different rethink if we get a new one of those.
> They aren't common.
>
> Jonathan
>
>
> >
> >
> > Thanks,
> > Srinivas
> >
> > >
> > > The right fix is either to not use those helpers at all and register
> > > the kfifo directly (so none of the problem infrastructure is used) or
> > > implement a proper trigger / buffer separation by having their
> > > interrupt
> > > handlers as the trigger then moving the data reading into the
> > > pollfuncs.
> > > At that point there would be a thread here to do that read and we'd
> > > not have the bug.
> > >
> > > Jonathan
> > >
> > > >
> > > > > Bert Karwatzki
> > > >
> > > > Sebastian
> >
>