Skip to content

Commit ba8c931

Browse files
3x380Vgregkh
authored andcommitted
cdc-acm: refactor killing urbs
Move urb killing code into separate function and use it instead of copying that code pattern over. Signed-off-by: Ladislav Michl <ladis@linux-mips.org> Acked-by: Oliver Neukum <oneukum@suse.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent e461460 commit ba8c931

File tree

1 file changed

+16
-27
lines changed

1 file changed

+16
-27
lines changed

drivers/usb/class/cdc-acm.c

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,17 @@ static inline int acm_set_control(struct acm *acm, int control)
158158
#define acm_send_break(acm, ms) \
159159
acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
160160

161+
static void acm_kill_urbs(struct acm *acm)
162+
{
163+
int i;
164+
165+
usb_kill_urb(acm->ctrlurb);
166+
for (i = 0; i < ACM_NW; i++)
167+
usb_kill_urb(acm->wb[i].urb);
168+
for (i = 0; i < acm->rx_buflimit; i++)
169+
usb_kill_urb(acm->read_urbs[i]);
170+
}
171+
161172
/*
162173
* Write buffer management.
163174
* All of these assume proper locks taken by the caller.
@@ -607,7 +618,6 @@ static void acm_port_shutdown(struct tty_port *port)
607618
struct acm *acm = container_of(port, struct acm, port);
608619
struct urb *urb;
609620
struct acm_wb *wb;
610-
int i;
611621

612622
/*
613623
* Need to grab write_lock to prevent race with resume, but no need to
@@ -629,11 +639,7 @@ static void acm_port_shutdown(struct tty_port *port)
629639
usb_autopm_put_interface_async(acm->control);
630640
}
631641

632-
usb_kill_urb(acm->ctrlurb);
633-
for (i = 0; i < ACM_NW; i++)
634-
usb_kill_urb(acm->wb[i].urb);
635-
for (i = 0; i < acm->rx_buflimit; i++)
636-
usb_kill_urb(acm->read_urbs[i]);
642+
acm_kill_urbs(acm);
637643
}
638644

639645
static void acm_tty_cleanup(struct tty_struct *tty)
@@ -1506,24 +1512,10 @@ static int acm_probe(struct usb_interface *intf,
15061512
return rv;
15071513
}
15081514

1509-
static void stop_data_traffic(struct acm *acm)
1510-
{
1511-
int i;
1512-
1513-
usb_kill_urb(acm->ctrlurb);
1514-
for (i = 0; i < ACM_NW; i++)
1515-
usb_kill_urb(acm->wb[i].urb);
1516-
for (i = 0; i < acm->rx_buflimit; i++)
1517-
usb_kill_urb(acm->read_urbs[i]);
1518-
1519-
cancel_work_sync(&acm->work);
1520-
}
1521-
15221515
static void acm_disconnect(struct usb_interface *intf)
15231516
{
15241517
struct acm *acm = usb_get_intfdata(intf);
15251518
struct tty_struct *tty;
1526-
int i;
15271519

15281520
/* sibling interface is already cleaning up */
15291521
if (!acm)
@@ -1549,15 +1541,11 @@ static void acm_disconnect(struct usb_interface *intf)
15491541
tty_kref_put(tty);
15501542
}
15511543

1552-
stop_data_traffic(acm);
1544+
acm_kill_urbs(acm);
1545+
cancel_work_sync(&acm->work);
15531546

15541547
tty_unregister_device(acm_tty_driver, acm->minor);
15551548

1556-
usb_free_urb(acm->ctrlurb);
1557-
for (i = 0; i < ACM_NW; i++)
1558-
usb_free_urb(acm->wb[i].urb);
1559-
for (i = 0; i < acm->rx_buflimit; i++)
1560-
usb_free_urb(acm->read_urbs[i]);
15611549
acm_write_buffers_free(acm);
15621550
usb_free_coherent(acm->dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
15631551
acm_read_buffers_free(acm);
@@ -1588,7 +1576,8 @@ static int acm_suspend(struct usb_interface *intf, pm_message_t message)
15881576
if (cnt)
15891577
return 0;
15901578

1591-
stop_data_traffic(acm);
1579+
acm_kill_urbs(acm);
1580+
cancel_work_sync(&acm->work);
15921581

15931582
return 0;
15941583
}

0 commit comments

Comments
 (0)