Lines Matching refs:desc
113 struct wdm_device *desc; in wdm_find_device() local
116 list_for_each_entry(desc, &wdm_device_list, device_list) in wdm_find_device()
117 if (desc->intf == intf) in wdm_find_device()
119 desc = NULL; in wdm_find_device()
123 return desc; in wdm_find_device()
128 struct wdm_device *desc; in wdm_find_device_by_minor() local
131 list_for_each_entry(desc, &wdm_device_list, device_list) in wdm_find_device_by_minor()
132 if (desc->intf->minor == minor) in wdm_find_device_by_minor()
134 desc = NULL; in wdm_find_device_by_minor()
138 return desc; in wdm_find_device_by_minor()
144 struct wdm_device *desc; in wdm_out_callback() local
147 desc = urb->context; in wdm_out_callback()
148 spin_lock_irqsave(&desc->iuspin, flags); in wdm_out_callback()
149 desc->werr = urb->status; in wdm_out_callback()
150 spin_unlock_irqrestore(&desc->iuspin, flags); in wdm_out_callback()
151 kfree(desc->outbuf); in wdm_out_callback()
152 desc->outbuf = NULL; in wdm_out_callback()
153 clear_bit(WDM_IN_USE, &desc->flags); in wdm_out_callback()
154 wake_up(&desc->wait); in wdm_out_callback()
160 struct wdm_device *desc = urb->context; in wdm_in_callback() local
164 spin_lock_irqsave(&desc->iuspin, flags); in wdm_in_callback()
165 clear_bit(WDM_RESPONDING, &desc->flags); in wdm_in_callback()
170 dev_dbg(&desc->intf->dev, in wdm_in_callback()
174 dev_dbg(&desc->intf->dev, in wdm_in_callback()
178 dev_dbg(&desc->intf->dev, in wdm_in_callback()
182 dev_err(&desc->intf->dev, in wdm_in_callback()
186 dev_err(&desc->intf->dev, in wdm_in_callback()
198 if (desc->rerr == 0 && status != -EPIPE) in wdm_in_callback()
199 desc->rerr = status; in wdm_in_callback()
201 if (length + desc->length > desc->wMaxCommand) { in wdm_in_callback()
203 set_bit(WDM_OVERFLOW, &desc->flags); in wdm_in_callback()
206 if (!test_bit(WDM_OVERFLOW, &desc->flags)) { in wdm_in_callback()
207 memmove(desc->ubuf + desc->length, desc->inbuf, length); in wdm_in_callback()
208 desc->length += length; in wdm_in_callback()
209 desc->reslength = length; in wdm_in_callback()
214 if (desc->rerr) { in wdm_in_callback()
221 schedule_work(&desc->service_outs_intr); in wdm_in_callback()
223 set_bit(WDM_READ, &desc->flags); in wdm_in_callback()
224 wake_up(&desc->wait); in wdm_in_callback()
226 spin_unlock_irqrestore(&desc->iuspin, flags); in wdm_in_callback()
235 struct wdm_device *desc; in wdm_int_callback() local
238 desc = urb->context; in wdm_int_callback()
239 dr = (struct usb_cdc_notification *)desc->sbuf; in wdm_int_callback()
248 set_bit(WDM_INT_STALL, &desc->flags); in wdm_int_callback()
249 dev_err(&desc->intf->dev, "Stall on int endpoint\n"); in wdm_int_callback()
252 dev_err(&desc->intf->dev, in wdm_int_callback()
259 dev_err(&desc->intf->dev, "wdm_int_callback - %d bytes\n", in wdm_int_callback()
266 dev_dbg(&desc->intf->dev, in wdm_int_callback()
273 dev_dbg(&desc->intf->dev, in wdm_int_callback()
278 dev_dbg(&desc->intf->dev, "SPEED_CHANGE received (len %u)\n", in wdm_int_callback()
282 clear_bit(WDM_POLL_RUNNING, &desc->flags); in wdm_int_callback()
283 dev_err(&desc->intf->dev, in wdm_int_callback()
291 spin_lock_irqsave(&desc->iuspin, flags); in wdm_int_callback()
292 responding = test_and_set_bit(WDM_RESPONDING, &desc->flags); in wdm_int_callback()
293 if (!desc->resp_count++ && !responding in wdm_int_callback()
294 && !test_bit(WDM_DISCONNECTING, &desc->flags) in wdm_int_callback()
295 && !test_bit(WDM_SUSPENDING, &desc->flags)) { in wdm_int_callback()
296 rv = usb_submit_urb(desc->response, GFP_ATOMIC); in wdm_int_callback()
297 dev_dbg(&desc->intf->dev, "submit response URB %d\n", rv); in wdm_int_callback()
299 spin_unlock_irqrestore(&desc->iuspin, flags); in wdm_int_callback()
301 clear_bit(WDM_RESPONDING, &desc->flags); in wdm_int_callback()
306 rv = schedule_work(&desc->rxwork); in wdm_int_callback()
308 dev_err(&desc->intf->dev, in wdm_int_callback()
315 dev_err(&desc->intf->dev, in wdm_int_callback()
321 static void kill_urbs(struct wdm_device *desc) in kill_urbs() argument
324 usb_kill_urb(desc->command); in kill_urbs()
325 usb_kill_urb(desc->validity); in kill_urbs()
326 usb_kill_urb(desc->response); in kill_urbs()
329 static void free_urbs(struct wdm_device *desc) in free_urbs() argument
331 usb_free_urb(desc->validity); in free_urbs()
332 usb_free_urb(desc->response); in free_urbs()
333 usb_free_urb(desc->command); in free_urbs()
336 static void cleanup(struct wdm_device *desc) in cleanup() argument
338 kfree(desc->sbuf); in cleanup()
339 kfree(desc->inbuf); in cleanup()
340 kfree(desc->orq); in cleanup()
341 kfree(desc->irq); in cleanup()
342 kfree(desc->ubuf); in cleanup()
343 free_urbs(desc); in cleanup()
344 kfree(desc); in cleanup()
352 struct wdm_device *desc = file->private_data; in wdm_write() local
355 if (count > desc->wMaxCommand) in wdm_write()
356 count = desc->wMaxCommand; in wdm_write()
358 spin_lock_irq(&desc->iuspin); in wdm_write()
359 we = desc->werr; in wdm_write()
360 desc->werr = 0; in wdm_write()
361 spin_unlock_irq(&desc->iuspin); in wdm_write()
370 r = mutex_lock_interruptible(&desc->wlock); in wdm_write()
375 if (test_bit(WDM_DISCONNECTING, &desc->flags)) { in wdm_write()
380 r = usb_autopm_get_interface(desc->intf); in wdm_write()
387 r = wait_event_interruptible(desc->wait, !test_bit(WDM_IN_USE, in wdm_write()
388 &desc->flags)); in wdm_write()
390 if (test_bit(WDM_IN_USE, &desc->flags)) in wdm_write()
393 if (test_bit(WDM_RESETTING, &desc->flags)) in wdm_write()
401 req = desc->orq; in wdm_write()
403 desc->command, in wdm_write()
404 interface_to_usbdev(desc->intf), in wdm_write()
406 usb_sndctrlpipe(interface_to_usbdev(desc->intf), 0), in wdm_write()
411 desc in wdm_write()
418 req->wIndex = desc->inum; /* already converted */ in wdm_write()
420 set_bit(WDM_IN_USE, &desc->flags); in wdm_write()
421 desc->outbuf = buf; in wdm_write()
423 rv = usb_submit_urb(desc->command, GFP_KERNEL); in wdm_write()
425 desc->outbuf = NULL; in wdm_write()
426 clear_bit(WDM_IN_USE, &desc->flags); in wdm_write()
427 dev_err(&desc->intf->dev, "Tx URB error: %d\n", rv); in wdm_write()
431 dev_dbg(&desc->intf->dev, "Tx URB has been submitted index=%d\n", in wdm_write()
435 usb_autopm_put_interface(desc->intf); in wdm_write()
436 mutex_unlock(&desc->wlock); in wdm_write()
440 usb_autopm_put_interface(desc->intf); in wdm_write()
442 mutex_unlock(&desc->wlock); in wdm_write()
453 static int service_outstanding_interrupt(struct wdm_device *desc) in service_outstanding_interrupt() argument
458 if (!desc->resp_count || !--desc->resp_count) in service_outstanding_interrupt()
461 set_bit(WDM_RESPONDING, &desc->flags); in service_outstanding_interrupt()
462 spin_unlock_irq(&desc->iuspin); in service_outstanding_interrupt()
463 rv = usb_submit_urb(desc->response, GFP_KERNEL); in service_outstanding_interrupt()
464 spin_lock_irq(&desc->iuspin); in service_outstanding_interrupt()
466 dev_err(&desc->intf->dev, in service_outstanding_interrupt()
470 clear_bit(WDM_RESPONDING, &desc->flags); in service_outstanding_interrupt()
471 desc->resp_count = 0; in service_outstanding_interrupt()
482 struct wdm_device *desc = file->private_data; in wdm_read() local
485 rv = mutex_lock_interruptible(&desc->rlock); /*concurrent reads */ in wdm_read()
489 cntr = READ_ONCE(desc->length); in wdm_read()
491 desc->read = 0; in wdm_read()
493 if (test_bit(WDM_DISCONNECTING, &desc->flags)) { in wdm_read()
497 if (test_bit(WDM_OVERFLOW, &desc->flags)) { in wdm_read()
498 clear_bit(WDM_OVERFLOW, &desc->flags); in wdm_read()
504 if (!test_bit(WDM_READ, &desc->flags)) { in wdm_read()
510 rv = wait_event_interruptible(desc->wait, in wdm_read()
511 test_bit(WDM_READ, &desc->flags)); in wdm_read()
515 if (test_bit(WDM_DISCONNECTING, &desc->flags)) { in wdm_read()
519 if (test_bit(WDM_RESETTING, &desc->flags)) { in wdm_read()
523 usb_mark_last_busy(interface_to_usbdev(desc->intf)); in wdm_read()
529 spin_lock_irq(&desc->iuspin); in wdm_read()
531 if (desc->rerr) { /* read completed, error happened */ in wdm_read()
532 rv = usb_translate_errors(desc->rerr); in wdm_read()
533 desc->rerr = 0; in wdm_read()
534 spin_unlock_irq(&desc->iuspin); in wdm_read()
541 if (!test_bit(WDM_READ, &desc->flags)) { /* lost race */ in wdm_read()
542 spin_unlock_irq(&desc->iuspin); in wdm_read()
546 if (!desc->reslength) { /* zero length read */ in wdm_read()
547 dev_dbg(&desc->intf->dev, "zero length - clearing WDM_READ\n"); in wdm_read()
548 clear_bit(WDM_READ, &desc->flags); in wdm_read()
549 rv = service_outstanding_interrupt(desc); in wdm_read()
550 spin_unlock_irq(&desc->iuspin); in wdm_read()
555 cntr = desc->length; in wdm_read()
556 spin_unlock_irq(&desc->iuspin); in wdm_read()
561 rv = copy_to_user(buffer, desc->ubuf, cntr); in wdm_read()
567 spin_lock_irq(&desc->iuspin); in wdm_read()
569 for (i = 0; i < desc->length - cntr; i++) in wdm_read()
570 desc->ubuf[i] = desc->ubuf[i + cntr]; in wdm_read()
572 desc->length -= cntr; in wdm_read()
574 if (!desc->length) { in wdm_read()
575 clear_bit(WDM_READ, &desc->flags); in wdm_read()
576 service_outstanding_interrupt(desc); in wdm_read()
578 spin_unlock_irq(&desc->iuspin); in wdm_read()
582 mutex_unlock(&desc->rlock); in wdm_read()
588 struct wdm_device *desc = file->private_data; in wdm_flush() local
590 wait_event(desc->wait, in wdm_flush()
597 !test_bit(WDM_IN_USE, &desc->flags) || in wdm_flush()
598 test_bit(WDM_DISCONNECTING, &desc->flags)); in wdm_flush()
601 if (test_bit(WDM_DISCONNECTING, &desc->flags)) in wdm_flush()
603 if (desc->werr < 0) in wdm_flush()
604 dev_err(&desc->intf->dev, "Error in flush path: %d\n", in wdm_flush()
605 desc->werr); in wdm_flush()
607 return usb_translate_errors(desc->werr); in wdm_flush()
612 struct wdm_device *desc = file->private_data; in wdm_poll() local
616 spin_lock_irqsave(&desc->iuspin, flags); in wdm_poll()
617 if (test_bit(WDM_DISCONNECTING, &desc->flags)) { in wdm_poll()
619 spin_unlock_irqrestore(&desc->iuspin, flags); in wdm_poll()
622 if (test_bit(WDM_READ, &desc->flags)) in wdm_poll()
624 if (desc->rerr || desc->werr) in wdm_poll()
626 if (!test_bit(WDM_IN_USE, &desc->flags)) in wdm_poll()
628 spin_unlock_irqrestore(&desc->iuspin, flags); in wdm_poll()
630 poll_wait(file, &desc->wait, wait); in wdm_poll()
641 struct wdm_device *desc; in wdm_open() local
644 desc = wdm_find_device_by_minor(minor); in wdm_open()
645 if (!desc) in wdm_open()
648 intf = desc->intf; in wdm_open()
649 if (test_bit(WDM_DISCONNECTING, &desc->flags)) in wdm_open()
651 file->private_data = desc; in wdm_open()
653 rv = usb_autopm_get_interface(desc->intf); in wdm_open()
655 dev_err(&desc->intf->dev, "Error autopm - %d\n", rv); in wdm_open()
660 mutex_lock(&desc->wlock); in wdm_open()
661 if (!desc->count++) { in wdm_open()
662 desc->werr = 0; in wdm_open()
663 desc->rerr = 0; in wdm_open()
664 rv = usb_submit_urb(desc->validity, GFP_KERNEL); in wdm_open()
666 desc->count--; in wdm_open()
667 dev_err(&desc->intf->dev, in wdm_open()
674 mutex_unlock(&desc->wlock); in wdm_open()
675 if (desc->count == 1) in wdm_open()
676 desc->manage_power(intf, 1); in wdm_open()
677 usb_autopm_put_interface(desc->intf); in wdm_open()
685 struct wdm_device *desc = file->private_data; in wdm_release() local
690 mutex_lock(&desc->wlock); in wdm_release()
691 desc->count--; in wdm_release()
692 mutex_unlock(&desc->wlock); in wdm_release()
694 if (!desc->count) { in wdm_release()
695 if (!test_bit(WDM_DISCONNECTING, &desc->flags)) { in wdm_release()
696 dev_dbg(&desc->intf->dev, "wdm_release: cleanup\n"); in wdm_release()
697 kill_urbs(desc); in wdm_release()
698 spin_lock_irq(&desc->iuspin); in wdm_release()
699 desc->resp_count = 0; in wdm_release()
700 spin_unlock_irq(&desc->iuspin); in wdm_release()
701 desc->manage_power(desc->intf, 0); in wdm_release()
705 cleanup(desc); in wdm_release()
714 struct wdm_device *desc = file->private_data; in wdm_ioctl() local
719 if (copy_to_user((void __user *)arg, &desc->wMaxCommand, sizeof(desc->wMaxCommand))) in wdm_ioctl()
750 struct wdm_device *desc = container_of(work, struct wdm_device, rxwork); in wdm_rxwork() local
755 spin_lock_irqsave(&desc->iuspin, flags); in wdm_rxwork()
756 if (test_bit(WDM_DISCONNECTING, &desc->flags)) { in wdm_rxwork()
757 spin_unlock_irqrestore(&desc->iuspin, flags); in wdm_rxwork()
759 responding = test_and_set_bit(WDM_RESPONDING, &desc->flags); in wdm_rxwork()
760 spin_unlock_irqrestore(&desc->iuspin, flags); in wdm_rxwork()
762 rv = usb_submit_urb(desc->response, GFP_KERNEL); in wdm_rxwork()
764 spin_lock_irqsave(&desc->iuspin, flags); in wdm_rxwork()
765 clear_bit(WDM_RESPONDING, &desc->flags); in wdm_rxwork()
766 if (!test_bit(WDM_DISCONNECTING, &desc->flags)) in wdm_rxwork()
767 schedule_work(&desc->rxwork); in wdm_rxwork()
768 spin_unlock_irqrestore(&desc->iuspin, flags); in wdm_rxwork()
775 struct wdm_device *desc; in service_interrupt_work() local
777 desc = container_of(work, struct wdm_device, service_outs_intr); in service_interrupt_work()
779 spin_lock_irq(&desc->iuspin); in service_interrupt_work()
780 service_outstanding_interrupt(desc); in service_interrupt_work()
781 if (!desc->resp_count) { in service_interrupt_work()
782 set_bit(WDM_READ, &desc->flags); in service_interrupt_work()
783 wake_up(&desc->wait); in service_interrupt_work()
785 spin_unlock_irq(&desc->iuspin); in service_interrupt_work()
794 struct wdm_device *desc; in wdm_create() local
796 desc = kzalloc(sizeof(struct wdm_device), GFP_KERNEL); in wdm_create()
797 if (!desc) in wdm_create()
799 INIT_LIST_HEAD(&desc->device_list); in wdm_create()
800 mutex_init(&desc->rlock); in wdm_create()
801 mutex_init(&desc->wlock); in wdm_create()
802 spin_lock_init(&desc->iuspin); in wdm_create()
803 init_waitqueue_head(&desc->wait); in wdm_create()
804 desc->wMaxCommand = bufsize; in wdm_create()
806 desc->inum = cpu_to_le16((u16)intf->cur_altsetting->desc.bInterfaceNumber); in wdm_create()
807 desc->intf = intf; in wdm_create()
808 INIT_WORK(&desc->rxwork, wdm_rxwork); in wdm_create()
809 INIT_WORK(&desc->service_outs_intr, service_interrupt_work); in wdm_create()
815 desc->wMaxPacketSize = usb_endpoint_maxp(ep); in wdm_create()
817 desc->orq = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL); in wdm_create()
818 if (!desc->orq) in wdm_create()
820 desc->irq = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL); in wdm_create()
821 if (!desc->irq) in wdm_create()
824 desc->validity = usb_alloc_urb(0, GFP_KERNEL); in wdm_create()
825 if (!desc->validity) in wdm_create()
828 desc->response = usb_alloc_urb(0, GFP_KERNEL); in wdm_create()
829 if (!desc->response) in wdm_create()
832 desc->command = usb_alloc_urb(0, GFP_KERNEL); in wdm_create()
833 if (!desc->command) in wdm_create()
836 desc->ubuf = kmalloc(desc->wMaxCommand, GFP_KERNEL); in wdm_create()
837 if (!desc->ubuf) in wdm_create()
840 desc->sbuf = kmalloc(desc->wMaxPacketSize, GFP_KERNEL); in wdm_create()
841 if (!desc->sbuf) in wdm_create()
844 desc->inbuf = kmalloc(desc->wMaxCommand, GFP_KERNEL); in wdm_create()
845 if (!desc->inbuf) in wdm_create()
849 desc->validity, in wdm_create()
852 desc->sbuf, in wdm_create()
853 desc->wMaxPacketSize, in wdm_create()
855 desc, in wdm_create()
859 desc->irq->bRequestType = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE); in wdm_create()
860 desc->irq->bRequest = USB_CDC_GET_ENCAPSULATED_RESPONSE; in wdm_create()
861 desc->irq->wValue = 0; in wdm_create()
862 desc->irq->wIndex = desc->inum; /* already converted */ in wdm_create()
863 desc->irq->wLength = cpu_to_le16(desc->wMaxCommand); in wdm_create()
866 desc->response, in wdm_create()
869 usb_rcvctrlpipe(interface_to_usbdev(desc->intf), 0), in wdm_create()
870 (unsigned char *)desc->irq, in wdm_create()
871 desc->inbuf, in wdm_create()
872 desc->wMaxCommand, in wdm_create()
874 desc in wdm_create()
877 desc->manage_power = manage_power; in wdm_create()
880 list_add(&desc->device_list, &wdm_device_list); in wdm_create()
892 list_del(&desc->device_list); in wdm_create()
894 cleanup(desc); in wdm_create()
928 if (iface->desc.bNumEndpoints != 1) in wdm_probe()
930 ep = &iface->endpoint[0].desc; in wdm_probe()
976 struct wdm_device *desc; in wdm_disconnect() local
980 desc = wdm_find_device(intf); in wdm_disconnect()
984 spin_lock_irqsave(&desc->iuspin, flags); in wdm_disconnect()
985 set_bit(WDM_DISCONNECTING, &desc->flags); in wdm_disconnect()
986 set_bit(WDM_READ, &desc->flags); in wdm_disconnect()
987 spin_unlock_irqrestore(&desc->iuspin, flags); in wdm_disconnect()
988 wake_up_all(&desc->wait); in wdm_disconnect()
989 mutex_lock(&desc->rlock); in wdm_disconnect()
990 mutex_lock(&desc->wlock); in wdm_disconnect()
991 kill_urbs(desc); in wdm_disconnect()
992 cancel_work_sync(&desc->rxwork); in wdm_disconnect()
993 cancel_work_sync(&desc->service_outs_intr); in wdm_disconnect()
994 mutex_unlock(&desc->wlock); in wdm_disconnect()
995 mutex_unlock(&desc->rlock); in wdm_disconnect()
999 list_del(&desc->device_list); in wdm_disconnect()
1002 if (!desc->count) in wdm_disconnect()
1003 cleanup(desc); in wdm_disconnect()
1005 dev_dbg(&intf->dev, "%d open files - postponing cleanup\n", desc->count); in wdm_disconnect()
1012 struct wdm_device *desc = wdm_find_device(intf); in wdm_suspend() local
1015 dev_dbg(&desc->intf->dev, "wdm%d_suspend\n", intf->minor); in wdm_suspend()
1019 mutex_lock(&desc->rlock); in wdm_suspend()
1020 mutex_lock(&desc->wlock); in wdm_suspend()
1022 spin_lock_irq(&desc->iuspin); in wdm_suspend()
1025 (test_bit(WDM_IN_USE, &desc->flags) in wdm_suspend()
1026 || test_bit(WDM_RESPONDING, &desc->flags))) { in wdm_suspend()
1027 spin_unlock_irq(&desc->iuspin); in wdm_suspend()
1031 set_bit(WDM_SUSPENDING, &desc->flags); in wdm_suspend()
1032 spin_unlock_irq(&desc->iuspin); in wdm_suspend()
1034 kill_urbs(desc); in wdm_suspend()
1035 cancel_work_sync(&desc->rxwork); in wdm_suspend()
1036 cancel_work_sync(&desc->service_outs_intr); in wdm_suspend()
1039 mutex_unlock(&desc->wlock); in wdm_suspend()
1040 mutex_unlock(&desc->rlock); in wdm_suspend()
1047 static int recover_from_urb_loss(struct wdm_device *desc) in recover_from_urb_loss() argument
1051 if (desc->count) { in recover_from_urb_loss()
1052 rv = usb_submit_urb(desc->validity, GFP_NOIO); in recover_from_urb_loss()
1054 dev_err(&desc->intf->dev, in recover_from_urb_loss()
1063 struct wdm_device *desc = wdm_find_device(intf); in wdm_resume() local
1066 dev_dbg(&desc->intf->dev, "wdm%d_resume\n", intf->minor); in wdm_resume()
1068 clear_bit(WDM_SUSPENDING, &desc->flags); in wdm_resume()
1069 rv = recover_from_urb_loss(desc); in wdm_resume()
1077 struct wdm_device *desc = wdm_find_device(intf); in wdm_pre_reset() local
1085 spin_lock_irq(&desc->iuspin); in wdm_pre_reset()
1086 set_bit(WDM_RESETTING, &desc->flags); /* inform read/write */ in wdm_pre_reset()
1087 set_bit(WDM_READ, &desc->flags); /* unblock read */ in wdm_pre_reset()
1088 clear_bit(WDM_IN_USE, &desc->flags); /* unblock write */ in wdm_pre_reset()
1089 desc->rerr = -EINTR; in wdm_pre_reset()
1090 spin_unlock_irq(&desc->iuspin); in wdm_pre_reset()
1091 wake_up_all(&desc->wait); in wdm_pre_reset()
1092 mutex_lock(&desc->rlock); in wdm_pre_reset()
1093 mutex_lock(&desc->wlock); in wdm_pre_reset()
1094 kill_urbs(desc); in wdm_pre_reset()
1095 cancel_work_sync(&desc->rxwork); in wdm_pre_reset()
1096 cancel_work_sync(&desc->service_outs_intr); in wdm_pre_reset()
1102 struct wdm_device *desc = wdm_find_device(intf); in wdm_post_reset() local
1105 clear_bit(WDM_OVERFLOW, &desc->flags); in wdm_post_reset()
1106 clear_bit(WDM_RESETTING, &desc->flags); in wdm_post_reset()
1107 rv = recover_from_urb_loss(desc); in wdm_post_reset()
1108 mutex_unlock(&desc->wlock); in wdm_post_reset()
1109 mutex_unlock(&desc->rlock); in wdm_post_reset()