linux/drivers/iio/adc
Xander Huff 70581e0ef8 iio: adc: xilinx-xadc: Push interrupts into hardirq context
The driver currently registers a pair of irq handlers using
request_threaded_irq(), however the synchronization mechanism between the
hardirq and the threadedirq handler is a regular spinlock.

Unfortunately, this breaks PREEMPT_RT builds, where a spinlock can sleep,
and is thus not able to be acquired from a hardirq handler. This patch gets
rid of the threaded handler and pushes all interrupt handling into the
hardirq context, and uses request_irq().

To validate that this change has no impact on RT performance, here are
cyclictest values with no processes running:

$ sudo cyclictest -S -m -p 98
policy: fifo: loadavg: 0.00 0.01 0.05 1/174 2539
T: 0 ( 1405) P:98 I:1000 C:167010520 Min: 9 Act: 12 Avg: 12 Max: 75
T: 1 ( 1862) P:98 I:1500 C:111340339 Min: 9 Act: 12 Avg: 12 Max: 73

Then, all xadc raw handles were accessed in a continuous loop via
/sys/bus/iio/devices/iio:device0:

$ sudo cyclictest -S -m -p 98
policy: fifo: loadavg: 7.84 7.70 7.63 3/182 4260
T: 0 ( 2559) P:98 I:1000 C:241557018 Min: 11 Act: 18 Avg: 21 Max: 74
T: 1 ( 2560) P:98 I:1500 C:161038006 Min: 10 Act: 21 Avg: 20 Max: 73

Signed-off-by: Xander Huff <xander.huff@ni.com>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
2015-08-16 10:51:27 +01:00
..
ad799x.c iio: ad799x: Fix ad7991/ad7995/ad7999 config setup 2014-12-12 12:34:00 +00:00
ad7266.c
ad7291.c 3rd round of IIO new drivers, cleanups and functionality for the 3.17 cycle. 2014-07-13 12:31:47 -07:00
ad7298.c iio:adc:ad7298: Use BIT() and GENMASK() macros 2014-06-14 16:04:24 +01:00
ad7476.c iio:adc:ad7476: Use GENMASK() macro 2014-06-14 16:03:48 +01:00
ad7791.c
ad7793.c iio:adc: Fix typo in MODULE_DESCRIPTION in ad7793.c 2015-03-07 19:18:49 +00:00
ad7887.c iio:adc:ad7887: Use BIT() and GENMASK() macros 2014-06-14 16:03:19 +01:00
ad7923.c
ad_sigma_delta.c iio: adc: ad_sigma_delta: Fix indio_dev->trig assignment 2014-08-25 21:48:29 +01:00
at91_adc.c iio: adc: at91_adc: allow to use full range of startup time 2015-07-19 11:48:06 +01:00
axp288_adc.c Second set of new driver, functionality and cleanups for IIO in the 4.2 cycle. 2015-05-24 11:45:21 -07:00
berlin2-adc.c iio:adc:berlin2-adc: coding style cleanup 2015-08-12 22:13:57 +01:00
cc10001_adc.c iio: adc: cc10001: Power-up the ADC at probe time when used remotely 2015-06-14 12:21:22 +01:00
da9150-gpadc.c iio: Add support for DA9150 GPADC 2015-02-25 21:05:26 +01:00
exynos_adc.c iio: adc: exynos_adc: Add support for exynos7 2014-11-05 15:38:25 +00:00
Kconfig iio:adc:cc10001_adc: resort entry in Kconfig and Makefile 2015-08-12 22:20:42 +01:00
lp8788_adc.c iio: remove .owner field for driver using module_platform_driver 2014-08-26 21:08:38 +01:00
Makefile iio:adc:cc10001_adc: resort entry in Kconfig and Makefile 2015-08-12 22:20:42 +01:00
max1027.c treewide: Fix typo in printk messages 2015-03-06 23:05:39 +01:00
max1363.c
mcp320x.c Second set of new device support, features and cleanup for the 4.3 cycle. 2015-08-12 12:43:41 -07:00
mcp3422.c iio: Drop owner assignment from i2c_driver 2015-07-11 18:50:07 +01:00
men_z188_adc.c iio: adc: men_z188_adc: Add terminating entry for men_z188_ids 2014-11-15 16:12:04 +00:00
nau7802.c
qcom-spmi-iadc.c iio: iadc: wait_for_completion_timeout time in jiffies 2015-01-10 11:43:26 +00:00
qcom-spmi-vadc.c iio: adc: spmi-vadc: Fix overflow in output value normalization 2015-04-18 17:40:04 +01:00
rockchip_saradc.c iio: adc: rockchip_saradc: add missing MODULE_* data 2015-07-19 11:47:58 +01:00
ti_am335x_adc.c iio: adc: ti_am335x_adc: make sample delay, open delay, averaging DT parameters 2015-05-13 18:37:22 +01:00
ti-adc081c.c iio: Drop owner assignment from i2c_driver 2015-07-11 18:50:07 +01:00
ti-adc128s052.c iio:adc128s052: add support for adc122s021 2015-05-23 12:42:43 +01:00
twl4030-madc.c iio: twl4030-madc: Pass the IRQF_ONESHOT flag 2015-07-19 11:48:00 +01:00
twl6030-gpadc.c iio: adc: twl6030-gpadc: Fix modalias 2015-05-23 12:30:52 +01:00
vf610_adc.c Second set of new device support, features and cleanup for the 4.3 cycle. 2015-08-12 12:43:41 -07:00
viperboard_adc.c iio: remove .owner field for driver using module_platform_driver 2014-08-26 21:08:38 +01:00
xilinx-xadc-core.c iio: adc: xilinx-xadc: Push interrupts into hardirq context 2015-08-16 10:51:27 +01:00
xilinx-xadc-events.c iio: xilinx-xadc: Remove unused variable 2014-07-03 22:00:40 +01:00
xilinx-xadc.h iio: adc: xilinx-xadc: Push interrupts into hardirq context 2015-08-16 10:51:27 +01:00