]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/2.6.36.2/usbnet-fix-usb_autopm_get_interface-failure-v1.patch
Fixes for 5.10
[thirdparty/kernel/stable-queue.git] / releases / 2.6.36.2 / usbnet-fix-usb_autopm_get_interface-failure-v1.patch
1 From b0786b430c982dffbb44d8030e6b6088671ce745 Mon Sep 17 00:00:00 2001
2 From: Ming Lei <tom.leiming@gmail.com>
3 Date: Mon, 1 Nov 2010 07:11:54 -0700
4 Subject: usbnet: fix usb_autopm_get_interface failure(v1)
5
6 From: Ming Lei <tom.leiming@gmail.com>
7
8 commit b0786b430c982dffbb44d8030e6b6088671ce745 upstream.
9
10 Since usbnet already took usb runtime pm, we have to
11 enable runtime pm for usb interface of usbnet, otherwise
12 usb_autopm_get_interface may return failure and cause
13 'ifconfig usb0 up' failed if USB_SUSPEND(RUNTIME_PM) is
14 enabled.
15
16 Cc: David Brownell <dbrownell@users.sourceforge.net>
17 Cc: "David S. Miller" <davem@davemloft.net>
18 Cc: Ben Hutchings <ben@decadent.org.uk>
19 Cc: Joe Perches <joe@perches.com>
20 Cc: Oliver Neukum <oliver@neukum.org>
21 Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
22 Signed-off-by: Ming Lei <tom.leiming@gmail.com>
23 Signed-off-by: David S. Miller <davem@davemloft.net>
24 Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
25
26 ---
27 drivers/net/usb/usbnet.c | 11 +++++++++++
28 1 file changed, 11 insertions(+)
29
30 --- a/drivers/net/usb/usbnet.c
31 +++ b/drivers/net/usb/usbnet.c
32 @@ -45,6 +45,7 @@
33 #include <linux/usb/usbnet.h>
34 #include <linux/slab.h>
35 #include <linux/kernel.h>
36 +#include <linux/pm_runtime.h>
37
38 #define DRIVER_VERSION "22-Aug-2005"
39
40 @@ -1273,6 +1274,16 @@ usbnet_probe (struct usb_interface *udev
41 struct usb_device *xdev;
42 int status;
43 const char *name;
44 + struct usb_driver *driver = to_usb_driver(udev->dev.driver);
45 +
46 + /* usbnet already took usb runtime pm, so have to enable the feature
47 + * for usb interface, otherwise usb_autopm_get_interface may return
48 + * failure if USB_SUSPEND(RUNTIME_PM) is enabled.
49 + */
50 + if (!driver->supports_autosuspend) {
51 + driver->supports_autosuspend = 1;
52 + pm_runtime_enable(&udev->dev);
53 + }
54
55 name = udev->dev.driver->name;
56 info = (struct driver_info *) prod->driver_info;