2015-11-11 08:03:39

by Lu Baolu

[permalink] [raw]
Subject: [PATCH 0/3] usb: core: lpm: add sysfs node for usb3 lpm permit

Hi,

This patch series is about to add a sysfs attribute, through which
users can disable or enable USB3 LPM (link power management) from
a USB port. Once LPM is disabled from the USB port, LPM between the
downstreaming device and the hub port will not be activated. This
helps users to use any LPM-unfriendly USB devices on any released
Linux kernels.

This patch series contains a fix and a cleanup as well.

Thanks,
Baolu

Lu Baolu (3):
usb: core: lpm: fix usb3_hardware_lpm sysfs node
usb: core: lpm: add sysfs node for usb3 lpm permit
usb: core: lpm: remove usb3_lpm_enabled in usb_device

Documentation/ABI/testing/sysfs-bus-usb | 27 +++++++---
Documentation/usb/power-management.txt | 11 ++--
drivers/usb/core/hub.c | 33 +++++++++---
drivers/usb/core/hub.h | 5 +-
drivers/usb/core/port.c | 89 ++++++++++++++++++++++++++++++++-
drivers/usb/core/sysfs.c | 31 ++++++++++--
include/linux/usb.h | 3 +-
7 files changed, 172 insertions(+), 27 deletions(-)

--
2.1.4


2015-11-11 08:03:42

by Lu Baolu

[permalink] [raw]
Subject: [PATCH 1/3] usb: core: lpm: fix usb3_hardware_lpm sysfs node

Commit 655fe4effe0f ("usbcore: add sysfs support to xHCI usb3
hardware LPM") introduced usb3_hardware_lpm sysfs node. This
doesn't show the correct status of USB3 U1 and U2 LPM status.

This patch fixes this by replacing usb3_hardware_lpm with two
nodes, usb3_hardware_lpm_u1 (for U1) and usb3_hardware_lpm_u2
(for U2), and recording the U1/U2 LPM status in right places.

This patch should be back-ported to kernels as old as 4.3,
that contains Commit 655fe4effe0f ("usbcore: add sysfs support
to xHCI usb3 hardware LPM").

Cc: [email protected]
Signed-off-by: Lu Baolu <[email protected]>
---
Documentation/ABI/testing/sysfs-bus-usb | 16 +++++++++-------
Documentation/usb/power-management.txt | 11 ++++++-----
drivers/usb/core/hub.c | 20 ++++++++++++++------
drivers/usb/core/sysfs.c | 31 ++++++++++++++++++++++++++-----
include/linux/usb.h | 2 ++
5 files changed, 57 insertions(+), 23 deletions(-)

diff --git a/Documentation/ABI/testing/sysfs-bus-usb b/Documentation/ABI/testing/sysfs-bus-usb
index 3a4abfc..136ba17 100644
--- a/Documentation/ABI/testing/sysfs-bus-usb
+++ b/Documentation/ABI/testing/sysfs-bus-usb
@@ -134,19 +134,21 @@ Description:
enabled for the device. Developer can write y/Y/1 or n/N/0 to
the file to enable/disable the feature.

-What: /sys/bus/usb/devices/.../power/usb3_hardware_lpm
-Date: June 2015
+What: /sys/bus/usb/devices/.../power/usb3_hardware_lpm_u1
+ /sys/bus/usb/devices/.../power/usb3_hardware_lpm_u2
+Date: November 2015
Contact: Kevin Strasser <[email protected]>
+ Lu Baolu <[email protected]>
Description:
If CONFIG_PM is set and a USB 3.0 lpm-capable device is plugged
in to a xHCI host which supports link PM, it will check if U1
and U2 exit latencies have been set in the BOS descriptor; if
- the check is is passed and the host supports USB3 hardware LPM,
+ the check is passed and the host supports USB3 hardware LPM,
USB3 hardware LPM will be enabled for the device and the USB
- device directory will contain a file named
- power/usb3_hardware_lpm. The file holds a string value (enable
- or disable) indicating whether or not USB3 hardware LPM is
- enabled for the device.
+ device directory will contain two files named
+ power/usb3_hardware_lpm_u1 and power/usb3_hardware_lpm_u2. These
+ files hold a string value (enable or disable) indicating whether
+ or not USB3 hardware LPM U1 or U2 is enabled for the device.

What: /sys/bus/usb/devices/.../removable
Date: February 2012
diff --git a/Documentation/usb/power-management.txt b/Documentation/usb/power-management.txt
index 4a15c90..0a94ffe 100644
--- a/Documentation/usb/power-management.txt
+++ b/Documentation/usb/power-management.txt
@@ -537,17 +537,18 @@ relevant attribute files are usb2_hardware_lpm and usb3_hardware_lpm.
can write y/Y/1 or n/N/0 to the file to enable/disable
USB2 hardware LPM manually. This is for test purpose mainly.

- power/usb3_hardware_lpm
+ power/usb3_hardware_lpm_u1
+ power/usb3_hardware_lpm_u2

When a USB 3.0 lpm-capable device is plugged in to a
xHCI host which supports link PM, it will check if U1
and U2 exit latencies have been set in the BOS
descriptor; if the check is is passed and the host
supports USB3 hardware LPM, USB3 hardware LPM will be
- enabled for the device and this file will be created.
- The file holds a string value (enable or disable)
- indicating whether or not USB3 hardware LPM is
- enabled for the device.
+ enabled for the device and these files will be created.
+ The files hold a string value (enable or disable)
+ indicating whether or not USB3 hardware LPM U1 or U2
+ is enabled for the device.

USB Port Power Control
----------------------
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index bdeadc1..4eb7369 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -3875,17 +3875,23 @@ static void usb_enable_link_state(struct usb_hcd *hcd, struct usb_device *udev,
return;
}

- if (usb_set_lpm_timeout(udev, state, timeout))
+ ret = usb_set_lpm_timeout(udev, state, timeout);
+ if (ret)
/* If we can't set the parent hub U1/U2 timeout,
* device-initiated LPM won't be allowed either, so let the xHCI
* host know that this link state won't be enabled.
*/
hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state);
-
/* Only a configured device will accept the Set Feature U1/U2_ENABLE */
else if (udev->actconfig)
usb_set_device_initiated_lpm(udev, state, true);

+ if (!ret) {
+ if (state == USB3_LPM_U1)
+ udev->usb3_lpm_u1_enabled = 1;
+ else if (state == USB3_LPM_U2)
+ udev->usb3_lpm_u2_enabled = 1;
+ }
}

/*
@@ -3925,6 +3931,12 @@ static int usb_disable_link_state(struct usb_hcd *hcd, struct usb_device *udev,
dev_warn(&udev->dev, "Could not disable xHCI %s timeout, "
"bus schedule bandwidth may be impacted.\n",
usb3_lpm_names[state]);
+
+ if (state == USB3_LPM_U1)
+ udev->usb3_lpm_u1_enabled = 0;
+ else if (state == USB3_LPM_U2)
+ udev->usb3_lpm_u2_enabled = 0;
+
return 0;
}

@@ -3959,8 +3971,6 @@ int usb_disable_lpm(struct usb_device *udev)
if (usb_disable_link_state(hcd, udev, USB3_LPM_U2))
goto enable_lpm;

- udev->usb3_lpm_enabled = 0;
-
return 0;

enable_lpm:
@@ -4018,8 +4028,6 @@ void usb_enable_lpm(struct usb_device *udev)

usb_enable_link_state(hcd, udev, USB3_LPM_U1);
usb_enable_link_state(hcd, udev, USB3_LPM_U2);
-
- udev->usb3_lpm_enabled = 1;
}
EXPORT_SYMBOL_GPL(usb_enable_lpm);

diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c
index d9ec2de..65b6e6b 100644
--- a/drivers/usb/core/sysfs.c
+++ b/drivers/usb/core/sysfs.c
@@ -531,7 +531,7 @@ static ssize_t usb2_lpm_besl_store(struct device *dev,
}
static DEVICE_ATTR_RW(usb2_lpm_besl);

-static ssize_t usb3_hardware_lpm_show(struct device *dev,
+static ssize_t usb3_hardware_lpm_u1_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct usb_device *udev = to_usb_device(dev);
@@ -539,7 +539,7 @@ static ssize_t usb3_hardware_lpm_show(struct device *dev,

usb_lock_device(udev);

- if (udev->usb3_lpm_enabled)
+ if (udev->usb3_lpm_u1_enabled)
p = "enabled";
else
p = "disabled";
@@ -548,7 +548,26 @@ static ssize_t usb3_hardware_lpm_show(struct device *dev,

return sprintf(buf, "%s\n", p);
}
-static DEVICE_ATTR_RO(usb3_hardware_lpm);
+static DEVICE_ATTR_RO(usb3_hardware_lpm_u1);
+
+static ssize_t usb3_hardware_lpm_u2_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct usb_device *udev = to_usb_device(dev);
+ const char *p;
+
+ usb_lock_device(udev);
+
+ if (udev->usb3_lpm_u2_enabled)
+ p = "enabled";
+ else
+ p = "disabled";
+
+ usb_unlock_device(udev);
+
+ return sprintf(buf, "%s\n", p);
+}
+static DEVICE_ATTR_RO(usb3_hardware_lpm_u2);

static struct attribute *usb2_hardware_lpm_attr[] = {
&dev_attr_usb2_hardware_lpm.attr,
@@ -562,7 +581,8 @@ static struct attribute_group usb2_hardware_lpm_attr_group = {
};

static struct attribute *usb3_hardware_lpm_attr[] = {
- &dev_attr_usb3_hardware_lpm.attr,
+ &dev_attr_usb3_hardware_lpm_u1.attr,
+ &dev_attr_usb3_hardware_lpm_u2.attr,
NULL,
};
static struct attribute_group usb3_hardware_lpm_attr_group = {
@@ -592,7 +612,8 @@ static int add_power_attributes(struct device *dev)
if (udev->usb2_hw_lpm_capable == 1)
rc = sysfs_merge_group(&dev->kobj,
&usb2_hardware_lpm_attr_group);
- if (udev->lpm_capable == 1)
+ if (udev->speed == USB_SPEED_SUPER &&
+ udev->lpm_capable == 1)
rc = sysfs_merge_group(&dev->kobj,
&usb3_hardware_lpm_attr_group);
}
diff --git a/include/linux/usb.h b/include/linux/usb.h
index b9a2807..211664f 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -584,6 +584,8 @@ struct usb_device {
unsigned usb2_hw_lpm_enabled:1;
unsigned usb2_hw_lpm_allowed:1;
unsigned usb3_lpm_enabled:1;
+ unsigned usb3_lpm_u1_enabled:1;
+ unsigned usb3_lpm_u2_enabled:1;
int string_langid;

/* static strings from the device */
--
2.1.4

2015-11-11 08:04:02

by Lu Baolu

[permalink] [raw]
Subject: [PATCH 2/3] usb: core: lpm: add sysfs node for usb3 lpm permit

USB3 LPM is default on in Linux kernel if both xHCI host controller
and the USB devices declare to be LPM-capable. Unfortunately, some
devices are known to work well with LPM disabled, but to be broken
if LPM is enabled, although it declares the LPM capability. Users
won't be able to use this kind of devices, until someone puts them
in the kernel blacklist and gets the kernel upgraded.

This patch adds a sysfs node to permit or forbit USB3 LPM U1 or U2
entry for a port. The settings apply to both before and after device
enumeration. Supported values are "0" - neither u1 nor u2 permitted,
"u1" - only u1 is permitted, "u2" - only u2 is permitted, "u1_u2" -
both u1 and u2 are permitted. With this interface, users can use an
LPM-unfriendly USB device on a released Linux kernel.

Signed-off-by: Lu Baolu <[email protected]>
Signed-off-by: Zhuang Jin Can <[email protected]>
---
Documentation/ABI/testing/sysfs-bus-usb | 11 ++++
drivers/usb/core/hub.c | 15 +++++-
drivers/usb/core/hub.h | 5 +-
drivers/usb/core/port.c | 89 ++++++++++++++++++++++++++++++++-
4 files changed, 116 insertions(+), 4 deletions(-)

diff --git a/Documentation/ABI/testing/sysfs-bus-usb b/Documentation/ABI/testing/sysfs-bus-usb
index 136ba17..0bd731c 100644
--- a/Documentation/ABI/testing/sysfs-bus-usb
+++ b/Documentation/ABI/testing/sysfs-bus-usb
@@ -189,6 +189,17 @@ Description:
The file will read "hotplug", "wired" and "not used" if the
information is available, and "unknown" otherwise.

+What: /sys/bus/usb/devices/.../(hub interface)/portX/usb3_lpm_permit
+Date: November 2015
+Contact: Lu Baolu <[email protected]>
+Description:
+ Some USB3.0 devices are not friendly to USB3 LPM. usb3_lpm_permit
+ attribute allows enabling/disabling usb3 lpm of a port. It takes
+ effect both before and after a usb device is enumerated. Supported
+ values are "0" if both u1 and u2 are NOT permitted, "u1" if only u1
+ is permitted, "u2" if only u2 is permitted, "u1_u2" if both u1 and
+ u2 are permitted.
+
What: /sys/bus/usb/devices/.../power/usb2_lpm_l1_timeout
Date: May 2013
Contact: Mathias Nyman <[email protected]>
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 4eb7369..9df568e 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -4007,6 +4007,8 @@ EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm);
void usb_enable_lpm(struct usb_device *udev)
{
struct usb_hcd *hcd;
+ struct usb_hub *hub;
+ struct usb_port *port_dev;

if (!udev || !udev->parent ||
udev->speed != USB_SPEED_SUPER ||
@@ -4026,8 +4028,17 @@ void usb_enable_lpm(struct usb_device *udev)
if (udev->lpm_disable_count > 0)
return;

- usb_enable_link_state(hcd, udev, USB3_LPM_U1);
- usb_enable_link_state(hcd, udev, USB3_LPM_U2);
+ hub = usb_hub_to_struct_hub(udev->parent);
+ if (!hub)
+ return;
+
+ port_dev = hub->ports[udev->portnum - 1];
+
+ if (port_dev->usb3_lpm_u1_permit)
+ usb_enable_link_state(hcd, udev, USB3_LPM_U1);
+
+ if (port_dev->usb3_lpm_u2_permit)
+ usb_enable_link_state(hcd, udev, USB3_LPM_U2);
}
EXPORT_SYMBOL_GPL(usb_enable_lpm);

diff --git a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h
index 688817f..45d070d 100644
--- a/drivers/usb/core/hub.h
+++ b/drivers/usb/core/hub.h
@@ -92,6 +92,8 @@ struct usb_hub {
* @status_lock: synchronize port_event() vs usb_port_{suspend|resume}
* @portnum: port index num based one
* @is_superspeed cache super-speed status
+ * @usb3_lpm_u1_permit: whether USB3 U1 LPM is permitted.
+ * @usb3_lpm_u2_permit: whether USB3 U2 LPM is permitted.
*/
struct usb_port {
struct usb_device *child;
@@ -104,6 +106,8 @@ struct usb_port {
struct mutex status_lock;
u8 portnum;
unsigned int is_superspeed:1;
+ unsigned int usb3_lpm_u1_permit:1;
+ unsigned int usb3_lpm_u2_permit:1;
};

#define to_usb_port(_dev) \
@@ -155,4 +159,3 @@ static inline int hub_port_debounce_be_stable(struct usb_hub *hub,
{
return hub_port_debounce(hub, port1, false);
}
-
diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c
index 2106183..cb18ce0 100644
--- a/drivers/usb/core/port.c
+++ b/drivers/usb/core/port.c
@@ -50,6 +50,72 @@ static ssize_t connect_type_show(struct device *dev,
}
static DEVICE_ATTR_RO(connect_type);

+static ssize_t usb3_lpm_permit_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct usb_port *port_dev = to_usb_port(dev);
+ const char *p;
+
+ if (port_dev->usb3_lpm_u1_permit) {
+ if (port_dev->usb3_lpm_u2_permit)
+ p = "u1_u2";
+ else
+ p = "u1";
+ } else {
+ if (port_dev->usb3_lpm_u2_permit)
+ p = "u2";
+ else
+ p = "0";
+ }
+
+ return sprintf(buf, "%s\n", p);
+}
+
+static ssize_t usb3_lpm_permit_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct usb_port *port_dev = to_usb_port(dev);
+ struct usb_device *udev = port_dev->child;
+ struct usb_hcd *hcd;
+
+ if (!strncmp(buf, "u1_u2", 5)) {
+ port_dev->usb3_lpm_u1_permit = 1;
+ port_dev->usb3_lpm_u2_permit = 1;
+
+ } else if (!strncmp(buf, "u1", 2)) {
+ port_dev->usb3_lpm_u1_permit = 1;
+ port_dev->usb3_lpm_u2_permit = 0;
+
+ } else if (!strncmp(buf, "u2", 2)) {
+ port_dev->usb3_lpm_u1_permit = 0;
+ port_dev->usb3_lpm_u2_permit = 1;
+
+ } else if (!strncmp(buf, "0", 1)) {
+ port_dev->usb3_lpm_u1_permit = 0;
+ port_dev->usb3_lpm_u2_permit = 0;
+ } else
+ return -EINVAL;
+
+ /* If device is connected to the port, disable or enable lpm
+ * to make new u1 u2 setting take effect immediately.
+ */
+ if (udev) {
+ hcd = bus_to_hcd(udev->bus);
+ if (!hcd)
+ return -EINVAL;
+ usb_lock_device(udev);
+ mutex_lock(hcd->bandwidth_mutex);
+ if (!usb_disable_lpm(udev))
+ usb_enable_lpm(udev);
+ mutex_unlock(hcd->bandwidth_mutex);
+ usb_unlock_device(udev);
+ }
+
+ return count;
+}
+static DEVICE_ATTR_RW(usb3_lpm_permit);
+
static struct attribute *port_dev_attrs[] = {
&dev_attr_connect_type.attr,
NULL,
@@ -64,6 +130,21 @@ static const struct attribute_group *port_dev_group[] = {
NULL,
};

+static struct attribute *port_dev_usb3_attrs[] = {
+ &dev_attr_usb3_lpm_permit.attr,
+ NULL,
+};
+
+static struct attribute_group port_dev_usb3_attr_grp = {
+ .attrs = port_dev_usb3_attrs,
+};
+
+static const struct attribute_group *port_dev_usb3_group[] = {
+ &port_dev_attr_grp,
+ &port_dev_usb3_attr_grp,
+ NULL,
+};
+
static void usb_port_device_release(struct device *dev)
{
struct usb_port *port_dev = to_usb_port(dev);
@@ -401,6 +482,7 @@ static void find_and_link_peer(struct usb_hub *hub, int port1)
int usb_hub_create_port_device(struct usb_hub *hub, int port1)
{
struct usb_port *port_dev;
+ struct usb_device *hdev = hub->hdev;
int retval;

port_dev = kzalloc(sizeof(*port_dev), GFP_KERNEL);
@@ -417,7 +499,12 @@ int usb_hub_create_port_device(struct usb_hub *hub, int port1)
port_dev->portnum = port1;
set_bit(port1, hub->power_bits);
port_dev->dev.parent = hub->intfdev;
- port_dev->dev.groups = port_dev_group;
+ if (hub_is_superspeed(hdev)) {
+ port_dev->usb3_lpm_u1_permit = 1;
+ port_dev->usb3_lpm_u2_permit = 1;
+ port_dev->dev.groups = port_dev_usb3_group;
+ } else
+ port_dev->dev.groups = port_dev_group;
port_dev->dev.type = &usb_port_device_type;
port_dev->dev.driver = &usb_port_driver;
if (hub_is_superspeed(hub->hdev))
--
2.1.4

2015-11-11 08:03:46

by Lu Baolu

[permalink] [raw]
Subject: [PATCH 3/3] usb: core: lpm: remove usb3_lpm_enabled in usb_device

Commit 8306095fd2c1 ("USB: Disable USB 3.0 LPM in critical sections.")
adds usb3_lpm_enabled member to struct usb_device. There is no reference
to this member now. Hence, it could be removed.

Signed-off-by: Lu Baolu <[email protected]>
---
include/linux/usb.h | 1 -
1 file changed, 1 deletion(-)

diff --git a/include/linux/usb.h b/include/linux/usb.h
index 211664f..036e4a5 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -583,7 +583,6 @@ struct usb_device {
unsigned usb2_hw_lpm_besl_capable:1;
unsigned usb2_hw_lpm_enabled:1;
unsigned usb2_hw_lpm_allowed:1;
- unsigned usb3_lpm_enabled:1;
unsigned usb3_lpm_u1_enabled:1;
unsigned usb3_lpm_u2_enabled:1;
int string_langid;
--
2.1.4

2015-11-11 09:49:21

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH 3/3] usb: core: lpm: remove usb3_lpm_enabled in usb_device

Hi Lu,

[auto build test WARNING on v4.3-rc7]
[also build test WARNING on next-20151111]

url: https://github.com/0day-ci/linux/commits/Lu-Baolu/usb-core-lpm-add-sysfs-node-for-usb3-lpm-permit/20151111-160805
reproduce: make htmldocs

All warnings (new ones prefixed by >>):

include/linux/usb.h:614: warning: No description found for parameter 'usb3_lpm_u1_enabled'
include/linux/usb.h:614: warning: No description found for parameter 'usb3_lpm_u2_enabled'
>> include/linux/usb.h:614: warning: Excess struct/union/enum/typedef member 'usb3_lpm_enabled' description in 'usb_device'

vim +614 include/linux/usb.h

f476fbab Randy Dunlap 2008-02-13 598 unsigned long active_duration;
15123006 Sarah Sharp 2007-12-21 599
645daaab Alan Stern 2006-08-30 600 #ifdef CONFIG_PM
f476fbab Randy Dunlap 2008-02-13 601 unsigned long connect_time;
f476fbab Randy Dunlap 2008-02-13 602
f476fbab Randy Dunlap 2008-02-13 603 unsigned do_remote_wakeup:1;
f476fbab Randy Dunlap 2008-02-13 604 unsigned reset_resume:1;
bfd1e910 Alan Stern 2012-10-19 605 unsigned port_is_suspended:1;
645daaab Alan Stern 2006-08-30 606 #endif
b1d8dfb0 Inaky Perez-Gonzalez 2008-04-08 607 struct wusb_dev *wusb_dev;
c6515272 Sarah Sharp 2009-04-27 608 int slot_id;
0846e7e9 Matthew Garrett 2012-02-03 609 enum usb_device_removable removable;
17f34867 Mathias Nyman 2013-05-23 610 struct usb2_lpm_parameters l1_params;
51e0a012 Sarah Sharp 2012-02-20 611 struct usb3_lpm_parameters u1_params;
51e0a012 Sarah Sharp 2012-02-20 612 struct usb3_lpm_parameters u2_params;
1ea7e0e8 Sarah Sharp 2012-04-24 613 unsigned lpm_disable_count;
^1da177e Linus Torvalds 2005-04-16 @614 };
^1da177e Linus Torvalds 2005-04-16 615 #define to_usb_device(d) container_of(d, struct usb_device, dev)
^1da177e Linus Torvalds 2005-04-16 616
1e429018 Matthew Wilcox 2010-04-30 617 static inline struct usb_device *interface_to_usbdev(struct usb_interface *intf)
1e429018 Matthew Wilcox 2010-04-30 618 {
1e429018 Matthew Wilcox 2010-04-30 619 return to_usb_device(intf->dev.parent);
1e429018 Matthew Wilcox 2010-04-30 620 }
1e429018 Matthew Wilcox 2010-04-30 621
^1da177e Linus Torvalds 2005-04-16 622 extern struct usb_device *usb_get_dev(struct usb_device *dev);

:::::: The code at line 614 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2

:::::: TO: Linus Torvalds <[email protected]>
:::::: CC: Linus Torvalds <[email protected]>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation


Attachments:
(No filename) (2.78 kB)
.config.gz (5.92 kB)
Download all attachments

2015-11-11 15:10:03

by Alan Stern

[permalink] [raw]
Subject: Re: [PATCH 3/3] usb: core: lpm: remove usb3_lpm_enabled in usb_device

On Wed, 11 Nov 2015, Lu Baolu wrote:

> Commit 8306095fd2c1 ("USB: Disable USB 3.0 LPM in critical sections.")
> adds usb3_lpm_enabled member to struct usb_device. There is no reference
> to this member now. Hence, it could be removed.
>
> Signed-off-by: Lu Baolu <[email protected]>
> ---
> include/linux/usb.h | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/include/linux/usb.h b/include/linux/usb.h
> index 211664f..036e4a5 100644
> --- a/include/linux/usb.h
> +++ b/include/linux/usb.h
> @@ -583,7 +583,6 @@ struct usb_device {
> unsigned usb2_hw_lpm_besl_capable:1;
> unsigned usb2_hw_lpm_enabled:1;
> unsigned usb2_hw_lpm_allowed:1;
> - unsigned usb3_lpm_enabled:1;
> unsigned usb3_lpm_u1_enabled:1;
> unsigned usb3_lpm_u2_enabled:1;
> int string_langid;

You forgot to remove the kerneldoc for this field. And you forgot to
add kerneldoc for usb3_lpm_u[12]_enabled.

Alan Stern

2015-11-12 02:17:41

by Lu Baolu

[permalink] [raw]
Subject: Re: [PATCH 3/3] usb: core: lpm: remove usb3_lpm_enabled in usb_device



On 11/11/2015 11:10 PM, Alan Stern wrote:
> On Wed, 11 Nov 2015, Lu Baolu wrote:
>
>> Commit 8306095fd2c1 ("USB: Disable USB 3.0 LPM in critical sections.")
>> adds usb3_lpm_enabled member to struct usb_device. There is no reference
>> to this member now. Hence, it could be removed.
>>
>> Signed-off-by: Lu Baolu <[email protected]>
>> ---
>> include/linux/usb.h | 1 -
>> 1 file changed, 1 deletion(-)
>>
>> diff --git a/include/linux/usb.h b/include/linux/usb.h
>> index 211664f..036e4a5 100644
>> --- a/include/linux/usb.h
>> +++ b/include/linux/usb.h
>> @@ -583,7 +583,6 @@ struct usb_device {
>> unsigned usb2_hw_lpm_besl_capable:1;
>> unsigned usb2_hw_lpm_enabled:1;
>> unsigned usb2_hw_lpm_allowed:1;
>> - unsigned usb3_lpm_enabled:1;
>> unsigned usb3_lpm_u1_enabled:1;
>> unsigned usb3_lpm_u2_enabled:1;
>> int string_langid;
> You forgot to remove the kerneldoc for this field. And you forgot to
> add kerneldoc for usb3_lpm_u[12]_enabled.

Yes. I will fix this in v2.

>
> Alan Stern

Thanks,
Baolu

>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>