mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-16 22:38:04 +00:00
189ce92b4c
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> Signed-off-by: Denys Dmytriyenko <denys@ti.com>
67 lines
2.3 KiB
Diff
67 lines
2.3 KiB
Diff
From beaa75548738c322895c5b3ca7c010397cfb0afb Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
|
|
Date: Wed, 9 May 2012 13:53:22 +0200
|
|
Subject: [PATCH 057/117] USB: cdc-wdm: cannot use dev_printk when device is
|
|
gone
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
commit 6b0b79d38806481c1c8fffa7c5842f3c83679a42 upstream.
|
|
|
|
We cannot dereference a removed USB interface for
|
|
dev_printk. Use pr_debug instead where necessary.
|
|
|
|
Flush errors are expected if device is unplugged and are
|
|
therefore best ingored at this point.
|
|
|
|
Move the kill_urbs() call in wdm_release with dev_dbg()
|
|
for the non disconnect, as we know it has already been
|
|
called if WDM_DISCONNECTING is set. This does not
|
|
actually fix anything, but keeps the code more consistent.
|
|
|
|
Cc: Oliver Neukum <oliver@neukum.org>
|
|
Signed-off-by: Bjørn Mork <bjorn@mork.no>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
[bwh: Backported to 3.2: adjust context]
|
|
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|
---
|
|
drivers/usb/class/cdc-wdm.c | 11 +++++++----
|
|
1 file changed, 7 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
|
|
index 40a3f0b..554ac90 100644
|
|
--- a/drivers/usb/class/cdc-wdm.c
|
|
+++ b/drivers/usb/class/cdc-wdm.c
|
|
@@ -496,7 +496,9 @@ static int wdm_flush(struct file *file, fl_owner_t id)
|
|
struct wdm_device *desc = file->private_data;
|
|
|
|
wait_event(desc->wait, !test_bit(WDM_IN_USE, &desc->flags));
|
|
- if (desc->werr < 0)
|
|
+
|
|
+ /* cannot dereference desc->intf if WDM_DISCONNECTING */
|
|
+ if (desc->werr < 0 && !test_bit(WDM_DISCONNECTING, &desc->flags))
|
|
dev_err(&desc->intf->dev, "Error in flush path: %d\n",
|
|
desc->werr);
|
|
|
|
@@ -586,12 +588,13 @@ static int wdm_release(struct inode *inode, struct file *file)
|
|
mutex_unlock(&desc->wlock);
|
|
|
|
if (!desc->count) {
|
|
- dev_dbg(&desc->intf->dev, "wdm_release: cleanup");
|
|
- kill_urbs(desc);
|
|
if (!test_bit(WDM_DISCONNECTING, &desc->flags)) {
|
|
+ dev_dbg(&desc->intf->dev, "wdm_release: cleanup");
|
|
+ kill_urbs(desc);
|
|
desc->intf->needs_remote_wakeup = 0;
|
|
} else {
|
|
- dev_dbg(&desc->intf->dev, "%s: device gone - cleaning up\n", __func__);
|
|
+ /* must avoid dev_printk here as desc->intf is invalid */
|
|
+ pr_debug(KBUILD_MODNAME " %s: device gone - cleaning up\n", __func__);
|
|
cleanup(desc);
|
|
}
|
|
}
|
|
--
|
|
1.7.9.5
|
|
|