]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
staging:iio:events: Use non-atmoic bitops
authorLars-Peter Clausen <lars@metafoo.de>
Tue, 3 Jan 2012 13:59:42 +0000 (14:59 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Feb 2012 18:05:07 +0000 (10:05 -0800)
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>
drivers/staging/iio/industrialio-event.c

index 800f67d4cce1569b279258d6cc1836b6cf306ba1..66d320bf30205d0e1aac7a32942e3d351efd9e6a 100644 (file)
@@ -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;