]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: Use IRQF_NO_THREAD
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Wed, 28 Jan 2026 09:55:36 +0000 (10:55 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Thu, 29 Jan 2026 16:10:44 +0000 (16:10 +0000)
The interrupt handler iio_trigger_generic_data_rdy_poll() will invoke
other interrupt handler and this supposed to happen from within the
hardirq.

Use IRQF_NO_THREAD to forbid forced-threading.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/bma180.c
drivers/iio/adc/ad7766.c
drivers/iio/gyro/itg3200_buffer.c
drivers/iio/light/si1145.c

index 8925f5279e627a67c8e2928b10bee04185663e10..7bc6761f51354f434c0df6ae9c54f4dc7b28203e 100644 (file)
@@ -986,8 +986,9 @@ static int bma180_probe(struct i2c_client *client)
                }
 
                ret = devm_request_irq(dev, client->irq,
-                       iio_trigger_generic_data_rdy_poll, IRQF_TRIGGER_RISING,
-                       "bma180_event", data->trig);
+                                      iio_trigger_generic_data_rdy_poll,
+                                      IRQF_TRIGGER_RISING | IRQF_NO_THREAD,
+                                      "bma180_event", data->trig);
                if (ret) {
                        dev_err(dev, "unable to request IRQ\n");
                        goto err_trigger_free;
index 4d570383ef0251a36efe8da5a8fe0b3610e98875..1e6bfe8765ab339f153b9a5b5d0b0395203fe491 100644 (file)
@@ -261,7 +261,7 @@ static int ad7766_probe(struct spi_device *spi)
                 * don't enable the interrupt to avoid extra load on the system
                 */
                ret = devm_request_irq(&spi->dev, spi->irq, ad7766_irq,
-                                      IRQF_TRIGGER_FALLING | IRQF_NO_AUTOEN,
+                                      IRQF_TRIGGER_FALLING | IRQF_NO_AUTOEN | IRQF_NO_THREAD,
                                       dev_name(&spi->dev),
                                       ad7766->trig);
                if (ret < 0)
index a624400a239cbe03d1f41e68c60f9f2efb411c07..cf97adfa97274bb794212d597861a3be770e5402 100644 (file)
@@ -118,11 +118,9 @@ int itg3200_probe_trigger(struct iio_dev *indio_dev)
        if (!st->trig)
                return -ENOMEM;
 
-       ret = request_irq(st->i2c->irq,
-                         &iio_trigger_generic_data_rdy_poll,
-                         IRQF_TRIGGER_RISING,
-                         "itg3200_data_rdy",
-                         st->trig);
+       ret = request_irq(st->i2c->irq, &iio_trigger_generic_data_rdy_poll,
+                         IRQF_TRIGGER_RISING | IRQF_NO_THREAD,
+                         "itg3200_data_rdy", st->trig);
        if (ret)
                goto error_free_trig;
 
index f8eb251eca8dc3e9cf7978c8f6139114bfa72803..ef0abc4499b74af379ba436ad238f3ad9efefd8f 100644 (file)
@@ -1248,7 +1248,7 @@ static int si1145_probe_trigger(struct iio_dev *indio_dev)
 
        ret = devm_request_irq(&client->dev, client->irq,
                          iio_trigger_generic_data_rdy_poll,
-                         IRQF_TRIGGER_FALLING,
+                         IRQF_TRIGGER_FALLING | IRQF_NO_THREAD,
                          "si1145_irq",
                          trig);
        if (ret < 0) {