aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/iio
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2012-01-03 08:59:42 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-02-09 13:05:07 -0500
commita046c1e866673dd334c31d06312283e2bc5b483b (patch)
tree6048f2c0a2a31e56d1677231ab9b0711e19d4c7b /drivers/staging/iio
parente18045ed75ec682a26a385b0072dcc030fd12a7e (diff)
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>
Diffstat (limited to 'drivers/staging/iio')
-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 800f67d4cce..66d320bf302 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)
124 struct iio_event_interface *ev_int = filep->private_data; 124 struct iio_event_interface *ev_int = filep->private_data;
125 125
126 spin_lock(&ev_int->wait.lock); 126 spin_lock(&ev_int->wait.lock);
127 clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags); 127 __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags);
128 /* 128 /*
129 * In order to maintain a clean state for reopening, 129 * In order to maintain a clean state for reopening,
130 * clear out any awaiting events. The mask will prevent 130 * clear out any awaiting events. The mask will prevent
@@ -153,7 +153,7 @@ int iio_event_getfd(struct iio_dev *indio_dev)
153 return -ENODEV; 153 return -ENODEV;
154 154
155 spin_lock(&ev_int->wait.lock); 155 spin_lock(&ev_int->wait.lock);
156 if (test_and_set_bit(IIO_BUSY_BIT_POS, &ev_int->flags)) { 156 if (__test_and_set_bit(IIO_BUSY_BIT_POS, &ev_int->flags)) {
157 spin_unlock(&ev_int->wait.lock); 157 spin_unlock(&ev_int->wait.lock);
158 return -EBUSY; 158 return -EBUSY;
159 } 159 }
@@ -162,7 +162,7 @@ int iio_event_getfd(struct iio_dev *indio_dev)
162 &iio_event_chrdev_fileops, ev_int, O_RDONLY); 162 &iio_event_chrdev_fileops, ev_int, O_RDONLY);
163 if (fd < 0) { 163 if (fd < 0) {
164 spin_lock(&ev_int->wait.lock); 164 spin_lock(&ev_int->wait.lock);
165 clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags); 165 __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags);
166 spin_unlock(&ev_int->wait.lock); 166 spin_unlock(&ev_int->wait.lock);
167 } 167 }
168 return fd; 168 return fd;