USB: legousbtower: drop redundant interrupt-in running flag
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>
This commit is contained in:
parent
835bd2b567
commit
728fcd55e9
|
@ -206,7 +206,6 @@ struct lego_usb_tower {
|
||||||
struct usb_endpoint_descriptor* interrupt_in_endpoint;
|
struct usb_endpoint_descriptor* interrupt_in_endpoint;
|
||||||
struct urb* interrupt_in_urb;
|
struct urb* interrupt_in_urb;
|
||||||
int interrupt_in_interval;
|
int interrupt_in_interval;
|
||||||
int interrupt_in_running;
|
|
||||||
int interrupt_in_done;
|
int interrupt_in_done;
|
||||||
|
|
||||||
char* interrupt_out_buffer;
|
char* interrupt_out_buffer;
|
||||||
|
@ -379,7 +378,6 @@ static int tower_open (struct inode *inode, struct file *file)
|
||||||
dev,
|
dev,
|
||||||
dev->interrupt_in_interval);
|
dev->interrupt_in_interval);
|
||||||
|
|
||||||
dev->interrupt_in_running = 1;
|
|
||||||
dev->interrupt_in_done = 0;
|
dev->interrupt_in_done = 0;
|
||||||
mb();
|
mb();
|
||||||
|
|
||||||
|
@ -387,7 +385,6 @@ static int tower_open (struct inode *inode, struct file *file)
|
||||||
if (retval) {
|
if (retval) {
|
||||||
dev_err(&dev->udev->dev,
|
dev_err(&dev->udev->dev,
|
||||||
"Couldn't submit interrupt_in_urb %d\n", retval);
|
"Couldn't submit interrupt_in_urb %d\n", retval);
|
||||||
dev->interrupt_in_running = 0;
|
|
||||||
goto unlock_exit;
|
goto unlock_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -450,11 +447,7 @@ exit:
|
||||||
static void tower_abort_transfers (struct lego_usb_tower *dev)
|
static void tower_abort_transfers (struct lego_usb_tower *dev)
|
||||||
{
|
{
|
||||||
/* shutdown transfer */
|
/* shutdown transfer */
|
||||||
if (dev->interrupt_in_running) {
|
usb_kill_urb(dev->interrupt_in_urb);
|
||||||
dev->interrupt_in_running = 0;
|
|
||||||
mb();
|
|
||||||
usb_kill_urb(dev->interrupt_in_urb);
|
|
||||||
}
|
|
||||||
if (dev->interrupt_out_busy)
|
if (dev->interrupt_out_busy)
|
||||||
usb_kill_urb(dev->interrupt_out_urb);
|
usb_kill_urb(dev->interrupt_out_urb);
|
||||||
}
|
}
|
||||||
|
@ -731,15 +724,11 @@ static void tower_interrupt_in_callback (struct urb *urb)
|
||||||
}
|
}
|
||||||
|
|
||||||
resubmit:
|
resubmit:
|
||||||
/* resubmit if we're still running */
|
retval = usb_submit_urb(dev->interrupt_in_urb, GFP_ATOMIC);
|
||||||
if (dev->interrupt_in_running) {
|
if (retval) {
|
||||||
retval = usb_submit_urb (dev->interrupt_in_urb, GFP_ATOMIC);
|
dev_err(&dev->udev->dev, "%s: usb_submit_urb failed (%d)\n",
|
||||||
if (retval)
|
__func__, retval);
|
||||||
dev_err(&dev->udev->dev,
|
|
||||||
"%s: usb_submit_urb failed (%d)\n",
|
|
||||||
__func__, retval);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
dev->interrupt_in_done = 1;
|
dev->interrupt_in_done = 1;
|
||||||
wake_up_interruptible (&dev->read_wait);
|
wake_up_interruptible (&dev->read_wait);
|
||||||
|
|
Loading…
Reference in New Issue