iio:trigger: Fix use_count race condition
authorLars-Peter Clausen <lars@metafoo.de>
Tue, 16 Jul 2013 14:28:00 +0000 (15:28 +0100)
committerJonathan Cameron <jic23@kernel.org>
Sat, 20 Jul 2013 09:18:53 +0000 (10:18 +0100)
commita1a8e1dc111d6f05e7164e851e58219d428359e1
treecc55f2ba12e095a29599bb7f0084dc905c82d8b1
parent78077256bc08348d587e318957ceb41fe4d4afae
iio:trigger: Fix use_count race condition

When using more than one trigger consumer it can happen that multiple threads
perform a read-modify-update cycle on 'use_count' concurrently. This can cause
updates to be lost and use_count can get stuck at non-zero value, in which case
the IIO core assumes that at least one thread is still running and will wait for
it to finish before running any trigger handlers again. This effectively renders
the trigger disabled and a reboot is necessary before it can be used again. To
fix this make use_count an atomic variable. Also set it to the number of
consumers before starting the first consumer, otherwise it might happen that
use_count drops to 0 even though not all consumers have been run yet.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Tested-by: Denis Ciocca <denis.ciocca@st.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/industrialio-trigger.c
include/linux/iio/trigger.h
This page took 0.026743 seconds and 5 git commands to generate.