|
@@ -542,6 +542,8 @@ static int wdm_open(struct inode *inode, struct file *file)
|
|
|
|
|
|
mutex_lock(&desc->lock);
|
|
mutex_lock(&desc->lock);
|
|
if (!desc->count++) {
|
|
if (!desc->count++) {
|
|
|
|
+ desc->werr = 0;
|
|
|
|
+ desc->rerr = 0;
|
|
rv = usb_submit_urb(desc->validity, GFP_KERNEL);
|
|
rv = usb_submit_urb(desc->validity, GFP_KERNEL);
|
|
if (rv < 0) {
|
|
if (rv < 0) {
|
|
desc->count--;
|
|
desc->count--;
|
|
@@ -853,6 +855,18 @@ static int wdm_pre_reset(struct usb_interface *intf)
|
|
struct wdm_device *desc = usb_get_intfdata(intf);
|
|
struct wdm_device *desc = usb_get_intfdata(intf);
|
|
|
|
|
|
mutex_lock(&desc->lock);
|
|
mutex_lock(&desc->lock);
|
|
|
|
+ kill_urbs(desc);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * we notify everybody using poll of
|
|
|
|
+ * an exceptional situation
|
|
|
|
+ * must be done before recovery lest a spontaneous
|
|
|
|
+ * message from the device is lost
|
|
|
|
+ */
|
|
|
|
+ spin_lock_irq(&desc->iuspin);
|
|
|
|
+ desc->rerr = -EINTR;
|
|
|
|
+ spin_unlock_irq(&desc->iuspin);
|
|
|
|
+ wake_up_all(&desc->wait);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|