Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d771d8aa authored by Oliver Neukum's avatar Oliver Neukum Committed by Greg Kroah-Hartman
Browse files

USB: cdc-wdm: reset handling according to new requirements



This patch
- ensures no IO takes place during resets
- reports resets to user space

Signed-off-by: default avatarOliver Neukum <oneukum@suse.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent b4026c45
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -542,6 +542,8 @@ static int wdm_open(struct inode *inode, struct file *file)

	mutex_lock(&desc->lock);
	if (!desc->count++) {
		desc->werr = 0;
		desc->rerr = 0;
		rv = usb_submit_urb(desc->validity, GFP_KERNEL);
		if (rv < 0) {
			desc->count--;
@@ -853,6 +855,18 @@ static int wdm_pre_reset(struct usb_interface *intf)
	struct wdm_device *desc = usb_get_intfdata(intf);

	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;
}