USB: legousbtower: drop redundant interrupt-in running flag
authorJohan Hovold <johan@kernel.org>
Tue, 5 Nov 2019 08:41:44 +0000 (09:41 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 7 Nov 2019 10:17:51 +0000 (11:17 +0100)
Drop the redundant interrupt-in-running flag, which tried to keep track
of when the interrupt-in URB was in flight. This isn't needed since we
can stop the URB unconditionally in tower_abort_transfers() and the URB
can not be submitted while usb_kill_urb() is running anyway.

Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://lore.kernel.org/r/20191105084152.16322-7-johan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/misc/legousbtower.c

index 937bce23adf0d1812872049da1d6fad18d489d91..33533faa019eeda8c8531f53c0d56ae34c7bfb80 100644 (file)
@@ -206,7 +206,6 @@ struct lego_usb_tower {
        struct usb_endpoint_descriptor* interrupt_in_endpoint;
        struct urb*             interrupt_in_urb;
        int                     interrupt_in_interval;
-       int                     interrupt_in_running;
        int                     interrupt_in_done;
 
        char*                   interrupt_out_buffer;
@@ -379,7 +378,6 @@ static int tower_open (struct inode *inode, struct file *file)
                          dev,
                          dev->interrupt_in_interval);
 
-       dev->interrupt_in_running = 1;
        dev->interrupt_in_done = 0;
        mb();
 
@@ -387,7 +385,6 @@ static int tower_open (struct inode *inode, struct file *file)
        if (retval) {
                dev_err(&dev->udev->dev,
                        "Couldn't submit interrupt_in_urb %d\n", retval);
-               dev->interrupt_in_running = 0;
                goto unlock_exit;
        }
 
@@ -450,11 +447,7 @@ exit:
 static void tower_abort_transfers (struct lego_usb_tower *dev)
 {
        /* shutdown transfer */
-       if (dev->interrupt_in_running) {
-               dev->interrupt_in_running = 0;
-               mb();
-               usb_kill_urb(dev->interrupt_in_urb);
-       }
+       usb_kill_urb(dev->interrupt_in_urb);
        if (dev->interrupt_out_busy)
                usb_kill_urb(dev->interrupt_out_urb);
 }
@@ -731,15 +724,11 @@ static void tower_interrupt_in_callback (struct urb *urb)
        }
 
 resubmit:
-       /* resubmit if we're still running */
-       if (dev->interrupt_in_running) {
-               retval = usb_submit_urb (dev->interrupt_in_urb, GFP_ATOMIC);
-               if (retval)
-                       dev_err(&dev->udev->dev,
-                               "%s: usb_submit_urb failed (%d)\n",
-                               __func__, retval);
+       retval = usb_submit_urb(dev->interrupt_in_urb, GFP_ATOMIC);
+       if (retval) {
+               dev_err(&dev->udev->dev, "%s: usb_submit_urb failed (%d)\n",
+                       __func__, retval);
        }
-
 exit:
        dev->interrupt_in_done = 1;
        wake_up_interruptible (&dev->read_wait);