Loading drivers/usb/class/cdc-acm.c +15 −13 Original line number Original line Diff line number Diff line Loading @@ -838,7 +838,7 @@ static void acm_tty_set_termios(struct tty_struct *tty, struct ktermios *termios * USB probe and disconnect routines. * USB probe and disconnect routines. */ */ /* Little helper: write buffers free */ /* Little helpers: write/read buffers free */ static void acm_write_buffers_free(struct acm *acm) static void acm_write_buffers_free(struct acm *acm) { { int i; int i; Loading @@ -849,6 +849,15 @@ static void acm_write_buffers_free(struct acm *acm) } } } } static void acm_read_buffers_free(struct acm *acm) { struct usb_device *usb_dev = interface_to_usbdev(acm->control); int i, n = acm->rx_buflimit; for (i = 0; i < n; i++) usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma); } /* Little helper: write buffers allocate */ /* Little helper: write buffers allocate */ static int acm_write_buffers_alloc(struct acm *acm) static int acm_write_buffers_alloc(struct acm *acm) { { Loading Loading @@ -1171,8 +1180,7 @@ static int acm_probe (struct usb_interface *intf, for (i = 0; i < ACM_NW; i++) for (i = 0; i < ACM_NW; i++) usb_free_urb(acm->wb[i].urb); usb_free_urb(acm->wb[i].urb); alloc_fail7: alloc_fail7: for (i = 0; i < num_rx_buf; i++) acm_read_buffers_free(acm); usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma); for (i = 0; i < num_rx_buf; i++) for (i = 0; i < num_rx_buf; i++) usb_free_urb(acm->ru[i].urb); usb_free_urb(acm->ru[i].urb); usb_free_urb(acm->ctrlurb); usb_free_urb(acm->ctrlurb); Loading Loading @@ -1209,15 +1217,9 @@ static void acm_disconnect(struct usb_interface *intf) { { struct acm *acm = usb_get_intfdata(intf); struct acm *acm = usb_get_intfdata(intf); struct usb_device *usb_dev = interface_to_usbdev(intf); struct usb_device *usb_dev = interface_to_usbdev(intf); int i; if (!acm || !acm->dev) { dbg("disconnect on nonexisting interface"); return; } mutex_lock(&open_mutex); mutex_lock(&open_mutex); if (!usb_get_intfdata(intf)) { if (!acm || !acm->dev) { mutex_unlock(&open_mutex); mutex_unlock(&open_mutex); return; return; } } Loading @@ -1236,10 +1238,10 @@ static void acm_disconnect(struct usb_interface *intf) acm_write_buffers_free(acm); acm_write_buffers_free(acm); usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma); usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma); for (i = 0; i < acm->rx_buflimit; i++) acm_read_buffers_free(acm); usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma); usb_driver_release_interface(&acm_driver, intf == acm->control ? acm->data : intf); usb_driver_release_interface(&acm_driver, intf == acm->control ? acm->data : acm->control); if (!acm->used) { if (!acm->used) { acm_tty_unregister(acm); acm_tty_unregister(acm); Loading Loading
drivers/usb/class/cdc-acm.c +15 −13 Original line number Original line Diff line number Diff line Loading @@ -838,7 +838,7 @@ static void acm_tty_set_termios(struct tty_struct *tty, struct ktermios *termios * USB probe and disconnect routines. * USB probe and disconnect routines. */ */ /* Little helper: write buffers free */ /* Little helpers: write/read buffers free */ static void acm_write_buffers_free(struct acm *acm) static void acm_write_buffers_free(struct acm *acm) { { int i; int i; Loading @@ -849,6 +849,15 @@ static void acm_write_buffers_free(struct acm *acm) } } } } static void acm_read_buffers_free(struct acm *acm) { struct usb_device *usb_dev = interface_to_usbdev(acm->control); int i, n = acm->rx_buflimit; for (i = 0; i < n; i++) usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma); } /* Little helper: write buffers allocate */ /* Little helper: write buffers allocate */ static int acm_write_buffers_alloc(struct acm *acm) static int acm_write_buffers_alloc(struct acm *acm) { { Loading Loading @@ -1171,8 +1180,7 @@ static int acm_probe (struct usb_interface *intf, for (i = 0; i < ACM_NW; i++) for (i = 0; i < ACM_NW; i++) usb_free_urb(acm->wb[i].urb); usb_free_urb(acm->wb[i].urb); alloc_fail7: alloc_fail7: for (i = 0; i < num_rx_buf; i++) acm_read_buffers_free(acm); usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma); for (i = 0; i < num_rx_buf; i++) for (i = 0; i < num_rx_buf; i++) usb_free_urb(acm->ru[i].urb); usb_free_urb(acm->ru[i].urb); usb_free_urb(acm->ctrlurb); usb_free_urb(acm->ctrlurb); Loading Loading @@ -1209,15 +1217,9 @@ static void acm_disconnect(struct usb_interface *intf) { { struct acm *acm = usb_get_intfdata(intf); struct acm *acm = usb_get_intfdata(intf); struct usb_device *usb_dev = interface_to_usbdev(intf); struct usb_device *usb_dev = interface_to_usbdev(intf); int i; if (!acm || !acm->dev) { dbg("disconnect on nonexisting interface"); return; } mutex_lock(&open_mutex); mutex_lock(&open_mutex); if (!usb_get_intfdata(intf)) { if (!acm || !acm->dev) { mutex_unlock(&open_mutex); mutex_unlock(&open_mutex); return; return; } } Loading @@ -1236,10 +1238,10 @@ static void acm_disconnect(struct usb_interface *intf) acm_write_buffers_free(acm); acm_write_buffers_free(acm); usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma); usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma); for (i = 0; i < acm->rx_buflimit; i++) acm_read_buffers_free(acm); usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma); usb_driver_release_interface(&acm_driver, intf == acm->control ? acm->data : intf); usb_driver_release_interface(&acm_driver, intf == acm->control ? acm->data : acm->control); if (!acm->used) { if (!acm->used) { acm_tty_unregister(acm); acm_tty_unregister(acm); Loading