Re: [tip: irq/core] genirq: Warn about using IRQF_ONESHOT without a threaded handler

From: Jonathan Cameron

Date: Sat Feb 14 2026 - 10:01:05 EST


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?

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
>