Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

iio: Replace IRQF_ONESHOT with IRQF_NO_THREAD

Passing IRQF_ONESHOT ensures that the interrupt source is masked until
the secondary (threaded) handler is done. If only a primary handler is
used then the flag makes no sense because the interrupt can not fire
(again) while its handler is running.
The flag also disallows force-threading of the primary handler and the
irq-core will warn about this.

The intention here was probably not allowing forced-threading for
handlers such as iio_trigger_generic_data_rdy_poll() will intends to
invoke hard-interrupt handlers.

Replace IRQF_ONESHOT with IRQF_NO_THREAD.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Reviewed-by: Marcus Folkesson <marcus.folkesson@gmail.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Sebastian Andrzej Siewior and committed by
Jonathan Cameron
ac9fabd5 04d390af

+42 -62
+2 -3
drivers/iio/accel/adxl355_core.c
··· 768 768 data->dready_trig->ops = &adxl355_trigger_ops; 769 769 iio_trigger_set_drvdata(data->dready_trig, indio_dev); 770 770 771 - ret = devm_request_irq(data->dev, irq, 772 - &iio_trigger_generic_data_rdy_poll, 773 - IRQF_ONESHOT, "adxl355_irq", data->dready_trig); 771 + ret = devm_request_irq(data->dev, irq, &iio_trigger_generic_data_rdy_poll, 772 + IRQF_NO_THREAD, "adxl355_irq", data->dready_trig); 774 773 if (ret) 775 774 return dev_err_probe(data->dev, ret, "request irq %d failed\n", 776 775 irq);
+4 -5
drivers/iio/accel/adxl372.c
··· 1247 1247 1248 1248 indio_dev->trig = iio_trigger_get(st->dready_trig); 1249 1249 1250 - ret = devm_request_threaded_irq(dev, st->irq, 1251 - iio_trigger_generic_data_rdy_poll, 1252 - NULL, 1253 - IRQF_TRIGGER_RISING | IRQF_ONESHOT, 1254 - indio_dev->name, st->dready_trig); 1250 + ret = devm_request_irq(dev, st->irq, 1251 + iio_trigger_generic_data_rdy_poll, 1252 + IRQF_TRIGGER_RISING | IRQF_NO_THREAD, 1253 + indio_dev->name, st->dready_trig); 1255 1254 if (ret < 0) 1256 1255 return ret; 1257 1256 }
+4 -7
drivers/iio/accel/mxc4005.c
··· 486 486 if (!data->dready_trig) 487 487 return -ENOMEM; 488 488 489 - ret = devm_request_threaded_irq(&client->dev, client->irq, 490 - iio_trigger_generic_data_rdy_poll, 491 - NULL, 492 - IRQF_TRIGGER_FALLING | 493 - IRQF_ONESHOT, 494 - "mxc4005_event", 495 - data->dready_trig); 489 + ret = devm_request_irq(&client->dev, client->irq, 490 + iio_trigger_generic_data_rdy_poll, 491 + IRQF_TRIGGER_FALLING | IRQF_NO_THREAD, 492 + "mxc4005_event", data->dready_trig); 496 493 if (ret) { 497 494 dev_err(&client->dev, 498 495 "failed to init threaded irq\n");
+4 -7
drivers/iio/accel/stk8ba50.c
··· 428 428 } 429 429 430 430 if (client->irq > 0) { 431 - ret = devm_request_threaded_irq(&client->dev, client->irq, 432 - stk8ba50_data_rdy_trig_poll, 433 - NULL, 434 - IRQF_TRIGGER_RISING | 435 - IRQF_ONESHOT, 436 - "stk8ba50_event", 437 - indio_dev); 431 + ret = devm_request_irq(&client->dev, client->irq, 432 + stk8ba50_data_rdy_trig_poll, 433 + IRQF_TRIGGER_RISING | IRQF_NO_THREAD, 434 + "stk8ba50_event", indio_dev); 438 435 if (ret < 0) { 439 436 dev_err(&client->dev, "request irq %d failed\n", 440 437 client->irq);
+1 -1
drivers/iio/adc/ad4170-4.c
··· 2973 2973 2974 2974 if (spi->irq) { 2975 2975 ret = devm_request_irq(dev, spi->irq, &ad4170_irq_handler, 2976 - IRQF_ONESHOT, indio_dev->name, indio_dev); 2976 + IRQF_NO_THREAD, indio_dev->name, indio_dev); 2977 2977 if (ret) 2978 2978 return ret; 2979 2979
+2 -3
drivers/iio/adc/ad7768-1.c
··· 1711 1711 if (ret) 1712 1712 return ret; 1713 1713 1714 - ret = devm_request_irq(&spi->dev, spi->irq, 1715 - &ad7768_interrupt, 1716 - IRQF_TRIGGER_RISING | IRQF_ONESHOT, 1714 + ret = devm_request_irq(&spi->dev, spi->irq, &ad7768_interrupt, 1715 + IRQF_TRIGGER_RISING | IRQF_NO_THREAD, 1717 1716 indio_dev->name, indio_dev); 1718 1717 if (ret) 1719 1718 return ret;
+1 -1
drivers/iio/adc/ad7779.c
··· 840 840 iio_trigger_set_drvdata(st->trig, st); 841 841 842 842 ret = devm_request_irq(dev, st->spi->irq, iio_trigger_generic_data_rdy_poll, 843 - IRQF_ONESHOT | IRQF_NO_AUTOEN, indio_dev->name, 843 + IRQF_NO_THREAD | IRQF_NO_AUTOEN, indio_dev->name, 844 844 st->trig); 845 845 if (ret) 846 846 return dev_err_probe(dev, ret, "request IRQ %d failed\n",
+1 -1
drivers/iio/adc/mcp3911.c
··· 815 815 * don't enable the interrupt to avoid extra load on the system. 816 816 */ 817 817 ret = devm_request_irq(dev, spi->irq, &iio_trigger_generic_data_rdy_poll, 818 - IRQF_NO_AUTOEN | IRQF_ONESHOT, 818 + IRQF_NO_AUTOEN | IRQF_NO_THREAD, 819 819 indio_dev->name, adc->trig); 820 820 if (ret) 821 821 return ret;
+1 -1
drivers/iio/adc/ti-ads131e08.c
··· 827 827 if (spi->irq) { 828 828 ret = devm_request_irq(&spi->dev, spi->irq, 829 829 ads131e08_interrupt, 830 - IRQF_TRIGGER_FALLING | IRQF_ONESHOT, 830 + IRQF_TRIGGER_FALLING | IRQF_NO_THREAD, 831 831 spi->dev.driver->name, indio_dev); 832 832 if (ret) 833 833 return dev_err_probe(&spi->dev, ret,
+3 -6
drivers/iio/chemical/ens160_core.c
··· 316 316 317 317 indio_dev->trig = iio_trigger_get(trig); 318 318 319 - ret = devm_request_threaded_irq(dev, irq, 320 - iio_trigger_generic_data_rdy_poll, 321 - NULL, 322 - IRQF_ONESHOT, 323 - indio_dev->name, 324 - indio_dev->trig); 319 + ret = devm_request_irq(dev, irq, iio_trigger_generic_data_rdy_poll, 320 + IRQF_NO_THREAD, indio_dev->name, 321 + indio_dev->trig); 325 322 if (ret) 326 323 return dev_err_probe(dev, ret, "failed to request irq\n"); 327 324
+1 -1
drivers/iio/gyro/adxrs290.c
··· 597 597 598 598 ret = devm_request_irq(&st->spi->dev, st->spi->irq, 599 599 &iio_trigger_generic_data_rdy_poll, 600 - IRQF_ONESHOT, "adxrs290_irq", st->dready_trig); 600 + IRQF_NO_THREAD, "adxrs290_irq", st->dready_trig); 601 601 if (ret < 0) 602 602 return dev_err_probe(&st->spi->dev, ret, 603 603 "request irq %d failed\n", st->spi->irq);
+4 -5
drivers/iio/health/afe4403.c
··· 540 540 return ret; 541 541 } 542 542 543 - ret = devm_request_threaded_irq(dev, afe->irq, 544 - iio_trigger_generic_data_rdy_poll, 545 - NULL, IRQF_ONESHOT, 546 - AFE4403_DRIVER_NAME, 547 - afe->trig); 543 + ret = devm_request_irq(dev, afe->irq, 544 + iio_trigger_generic_data_rdy_poll, 545 + IRQF_NO_THREAD, AFE4403_DRIVER_NAME, 546 + afe->trig); 548 547 if (ret) { 549 548 dev_err(dev, "Unable to request IRQ\n"); 550 549 return ret;
+4 -5
drivers/iio/health/afe4404.c
··· 547 547 return ret; 548 548 } 549 549 550 - ret = devm_request_threaded_irq(dev, afe->irq, 551 - iio_trigger_generic_data_rdy_poll, 552 - NULL, IRQF_ONESHOT, 553 - AFE4404_DRIVER_NAME, 554 - afe->trig); 550 + ret = devm_request_irq(dev, afe->irq, 551 + iio_trigger_generic_data_rdy_poll, 552 + IRQF_NO_THREAD, AFE4404_DRIVER_NAME, 553 + afe->trig); 555 554 if (ret) { 556 555 dev_err(dev, "Unable to request IRQ\n"); 557 556 return ret;
+3 -6
drivers/iio/magnetometer/bmc150_magn.c
··· 906 906 goto err_poweroff; 907 907 } 908 908 909 - ret = request_threaded_irq(irq, 910 - iio_trigger_generic_data_rdy_poll, 911 - NULL, 912 - IRQF_TRIGGER_RISING | IRQF_ONESHOT, 913 - "bmc150_magn_event", 914 - data->dready_trig); 909 + ret = request_irq(irq, iio_trigger_generic_data_rdy_poll, 910 + IRQF_TRIGGER_RISING | IRQF_NO_THREAD, 911 + "bmc150_magn_event", data->dready_trig); 915 912 if (ret < 0) { 916 913 dev_err(dev, "request irq %d failed\n", irq); 917 914 goto err_trigger_unregister;
+3 -4
drivers/iio/pressure/dlhl60d.c
··· 306 306 indio_dev->num_channels = ARRAY_SIZE(dlh_channels); 307 307 308 308 if (client->irq > 0) { 309 - ret = devm_request_threaded_irq(&client->dev, client->irq, 310 - dlh_interrupt, NULL, 311 - IRQF_TRIGGER_RISING | IRQF_ONESHOT, 312 - st->info->name, indio_dev); 309 + ret = devm_request_irq(&client->dev, client->irq, dlh_interrupt, 310 + IRQF_TRIGGER_RISING | IRQF_NO_THREAD, 311 + st->info->name, indio_dev); 313 312 if (ret) { 314 313 dev_err(&client->dev, "failed to allocate threaded irq"); 315 314 return ret;
+4 -6
drivers/iio/temperature/tmp006.c
··· 356 356 357 357 indio_dev->trig = iio_trigger_get(data->drdy_trig); 358 358 359 - ret = devm_request_threaded_irq(&client->dev, client->irq, 360 - iio_trigger_generic_data_rdy_poll, 361 - NULL, 362 - IRQF_ONESHOT, 363 - "tmp006_irq", 364 - data->drdy_trig); 359 + ret = devm_request_irq(&client->dev, client->irq, 360 + iio_trigger_generic_data_rdy_poll, 361 + IRQF_NO_THREAD, "tmp006_irq", 362 + data->drdy_trig); 365 363 if (ret < 0) 366 364 return ret; 367 365 }