aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio/trigger
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2020-11-17 11:37:51 +0100
committerJonathan Cameron <Jonathan.Cameron@huawei.com>2020-12-03 19:40:30 +0000
commit0449fc4eead7af2523cd12f312b856dfa93731ed (patch)
tree5dc36b8d3aca6446a303eca24a751d5f0f7eca6e /drivers/iio/trigger
parentiio: hrtimer-trigger: Mark hrtimer to expire in hard interrupt context (diff)
downloadlinux-dev-0449fc4eead7af2523cd12f312b856dfa93731ed.tar.xz
linux-dev-0449fc4eead7af2523cd12f312b856dfa93731ed.zip
iio: sysfs-trigger: Mark irq_work to expire in hardirq context
Mark the IIO sysfs-trigger irq_work with IRQ_WORK_HARD_IRQ to ensure that it is always executed in hard interrupt context, even with PREEMPT_RT=y. The IIO sysfs-trigger irq_work needs to run in hard interrupt context since it will end up calling generic_handle_irq() which has the requirement to run in hard interrupt context. Note that the IRQ_WORK_HARD_IRQ flag, while it exists, does not seem to do anything in the mainline kernel yet. It does have an effect in the RT patchset though and presumably this is sooner or later going to be added to mainline as well. Reported-by: Christian Eggers <ceggers@arri.de> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Link: https://lore.kernel.org/r/20201117103751.16131-2-lars@metafoo.de Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Diffstat (limited to 'drivers/iio/trigger')
-rw-r--r--drivers/iio/trigger/iio-trig-sysfs.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/iio/trigger/iio-trig-sysfs.c b/drivers/iio/trigger/iio-trig-sysfs.c
index e09e58072872..10a3fd29362b 100644
--- a/drivers/iio/trigger/iio-trig-sysfs.c
+++ b/drivers/iio/trigger/iio-trig-sysfs.c
@@ -161,6 +161,7 @@ static int iio_sysfs_trigger_probe(int id)
iio_trigger_set_drvdata(t->trig, t);
init_irq_work(&t->work, iio_sysfs_trigger_work);
+ atomic_set(&t->work.flags, IRQ_WORK_HARD_IRQ);
ret = iio_trigger_register(t->trig);
if (ret)