mirror of
https://github.com/torvalds/linux.git
synced 2024-11-18 18:11:56 +00:00
70581e0ef8
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> |
||
---|---|---|
.. | ||
ad799x.c | ||
ad7266.c | ||
ad7291.c | ||
ad7298.c | ||
ad7476.c | ||
ad7791.c | ||
ad7793.c | ||
ad7887.c | ||
ad7923.c | ||
ad_sigma_delta.c | ||
at91_adc.c | ||
axp288_adc.c | ||
berlin2-adc.c | ||
cc10001_adc.c | ||
da9150-gpadc.c | ||
exynos_adc.c | ||
Kconfig | ||
lp8788_adc.c | ||
Makefile | ||
max1027.c | ||
max1363.c | ||
mcp320x.c | ||
mcp3422.c | ||
men_z188_adc.c | ||
nau7802.c | ||
qcom-spmi-iadc.c | ||
qcom-spmi-vadc.c | ||
rockchip_saradc.c | ||
ti_am335x_adc.c | ||
ti-adc081c.c | ||
ti-adc128s052.c | ||
twl4030-madc.c | ||
twl6030-gpadc.c | ||
vf610_adc.c | ||
viperboard_adc.c | ||
xilinx-xadc-core.c | ||
xilinx-xadc-events.c | ||
xilinx-xadc.h |