The intr_idx_lock lock is acquired only in the completion callback of
the ->int_in_urb (iowarrior_callback()). There is only one URB that is
scheduled / completed so there can't be more than one user of the lock.
The comment says that it protects ->intr_idx and the callback is the
only place in driver that writes to it.

Remove the intr_idx_lock lock because it is superfluous.

Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
Signed-off-by: Sebastian Andrzej Siewior <bige...@linutronix.de>
---
 drivers/usb/misc/iowarrior.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c
index 8d33187ce2af..c2991b8a65ce 100644
--- a/drivers/usb/misc/iowarrior.c
+++ b/drivers/usb/misc/iowarrior.c
@@ -81,7 +81,6 @@ struct iowarrior {
        atomic_t write_busy;            /* number of write-urbs submitted */
        atomic_t read_idx;
        atomic_t intr_idx;
-       spinlock_t intr_idx_lock;       /* protects intr_idx */
        atomic_t overflow_flag;         /* signals an index 'rollover' */
        int present;                    /* this is 1 as long as the device is 
connected */
        int opened;                     /* this is 1 if the device is currently 
open */
@@ -166,7 +165,6 @@ static void iowarrior_callback(struct urb *urb)
                goto exit;
        }
 
-       spin_lock(&dev->intr_idx_lock);
        intr_idx = atomic_read(&dev->intr_idx);
        /* aux_idx become previous intr_idx */
        aux_idx = (intr_idx == 0) ? (MAX_INTERRUPT_BUFFER - 1) : (intr_idx - 1);
@@ -181,7 +179,6 @@ static void iowarrior_callback(struct urb *urb)
                    (dev->read_queue + offset, urb->transfer_buffer,
                     dev->report_size)) {
                        /* equal values on interface 0 will be ignored */
-                       spin_unlock(&dev->intr_idx_lock);
                        goto exit;
                }
        }
@@ -202,7 +199,6 @@ static void iowarrior_callback(struct urb *urb)
        *(dev->read_queue + offset + (dev->report_size)) = dev->serial_number++;
 
        atomic_set(&dev->intr_idx, aux_idx);
-       spin_unlock(&dev->intr_idx_lock);
        /* tell the blocking read about the new data */
        wake_up_interruptible(&dev->read_wait);
 
@@ -762,7 +758,6 @@ static int iowarrior_probe(struct usb_interface *interface,
 
        atomic_set(&dev->intr_idx, 0);
        atomic_set(&dev->read_idx, 0);
-       spin_lock_init(&dev->intr_idx_lock);
        atomic_set(&dev->overflow_flag, 0);
        init_waitqueue_head(&dev->read_wait);
        atomic_set(&dev->write_busy, 0);
-- 
2.18.0

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to