summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2012-01-03 13:59:42 (GMT)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-02-09 18:05:07 (GMT)
commita046c1e866673dd334c31d06312283e2bc5b483b (patch)
tree6048f2c0a2a31e56d1677231ab9b0711e19d4c7b
parente18045ed75ec682a26a385b0072dcc030fd12a7e (diff)
downloadlinux-fsl-qoriq-a046c1e866673dd334c31d06312283e2bc5b483b.tar.xz
staging:iio:events: Use non-atmoic bitops
We always hold the waitqueue lock when modifying the flags field. So it is safe to use the non-atomic bitops here instead of the atomic versions. The lock has to be held, because we need to clear the busy flag and flush the event FIFO in one atomic operation when closing the event file descriptor. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Jonathan Cameron <jic23@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/iio/industrialio-event.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/staging/iio/industrialio-event.c b/drivers/staging/iio/industrialio-event.c
index 800f67d..66d320b 100644
--- a/drivers/staging/iio/industrialio-event.c
+++ b/drivers/staging/iio/industrialio-event.c
@@ -124,7 +124,7 @@ static int iio_event_chrdev_release(struct inode *inode, struct file *filep)
struct iio_event_interface *ev_int = filep->private_data;
spin_lock(&ev_int->wait.lock);
- clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags);
+ __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags);
/*
* In order to maintain a clean state for reopening,
* clear out any awaiting events. The mask will prevent
@@ -153,7 +153,7 @@ int iio_event_getfd(struct iio_dev *indio_dev)
return -ENODEV;
spin_lock(&ev_int->wait.lock);
- if (test_and_set_bit(IIO_BUSY_BIT_POS, &ev_int->flags)) {
+ if (__test_and_set_bit(IIO_BUSY_BIT_POS, &ev_int->flags)) {
spin_unlock(&ev_int->wait.lock);
return -EBUSY;
}
@@ -162,7 +162,7 @@ int iio_event_getfd(struct iio_dev *indio_dev)
&iio_event_chrdev_fileops, ev_int, O_RDONLY);
if (fd < 0) {
spin_lock(&ev_int->wait.lock);
- clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags);
+ __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags);
spin_unlock(&ev_int->wait.lock);
}
return fd;