drivers/usb/host/xhci-hub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
run_graceperiod blocks usb 2.0 devices from auto suspending after
xhci_start for 500ms.
Log shows:
[ 13.387170] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100
[ 13.387177] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000
[ 13.387182] hub_suspend:3903: hub 7-0:1.0: hub_suspend
[ 13.387188] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1
[ 13.387191] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event
[ 13.387193] hcd_bus_resume:2303: usb usb7: usb auto-resume
[ 13.387296] hub_event:5779: hub 3-0:1.0: state 7 ports 1 chg 0000 evt 0000
[ 13.393343] handle_port_status:2034: xhci-hcd PNP0D10:02: handle_port_status: starting usb5 port polling.
[ 13.393353] xhci_hub_control:1271: xhci-hcd PNP0D10:02: Get port status 5-1 read: 0x206e1, return 0x10101
[ 13.400047] hub_suspend:3903: hub 3-0:1.0: hub_suspend
[ 13.403077] hub_resume:3948: hub 7-0:1.0: hub_resume
[ 13.403080] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100
[ 13.403085] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000
[ 13.403087] hub_suspend:3903: hub 7-0:1.0: hub_suspend
[ 13.403090] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1
[ 13.403093] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event
[ 13.403095] hcd_bus_resume:2303: usb usb7: usb auto-resume
[ 13.405002] handle_port_status:1913: xhci-hcd PNP0D10:04: Port change event, 9-1, id 1, portsc: 0x6e1
[ 13.405016] hub_activate:1169: usb usb5-port1: status 0101 change 0001
[ 13.405026] xhci_clear_port_change_bit:658: xhci-hcd PNP0D10:02: clear port1 connect change, portsc: 0x6e1
[ 13.413275] hcd_bus_suspend:2250: usb usb3: bus auto-suspend, wakeup 1
[ 13.419081] hub_resume:3948: hub 7-0:1.0: hub_resume
[ 13.419086] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100
[ 13.419095] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000
[ 13.419100] hub_suspend:3903: hub 7-0:1.0: hub_suspend
[ 13.419106] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1
[ 13.419110] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event
[ 13.419112] hcd_bus_resume:2303: usb usb7: usb auto-resume
[ 13.420455] handle_port_status:2034: xhci-hcd PNP0D10:04: handle_port_status: starting usb9 port polling.
[ 13.420493] handle_port_status:1913: xhci-hcd PNP0D10:05: Port change event, 10-1, id 1, portsc: 0x6e1
[ 13.425332] hcd_bus_suspend:2279: usb usb3: suspend raced with wakeup event
[ 13.431931] handle_port_status:2034: xhci-hcd PNP0D10:05: handle_port_status: starting usb10 port polling.
[ 13.435080] hub_resume:3948: hub 7-0:1.0: hub_resume
[ 13.435084] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100
[ 13.435092] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000
[ 13.435096] hub_suspend:3903: hub 7-0:1.0: hub_suspend
[ 13.435102] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1
[ 13.435106] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event
usb7 and other usb 2.0 root hub were rapidly toggling between suspend
and resume states. More, "suspend raced with wakeup event" confuses people.
So, limit run_graceperiod for only usb 3.0 devices
Signed-off-by: Hongyu Xie <xiehongyu1@kylinos.cn>
---
drivers/usb/host/xhci-hub.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
index b3a59ce1b3f4..5e1442e91743 100644
--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -1671,7 +1671,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
* SS devices are only visible to roothub after link training completes.
* Keep polling roothubs for a grace period after xHC start
*/
- if (xhci->run_graceperiod) {
+ if (hcd->speed >= HCD_USB3 && xhci->run_graceperiod) {
if (time_before(jiffies, xhci->run_graceperiod))
status = 1;
else
--
2.25.1
On 10/17/25 15:12, Hongyu Xie wrote: > run_graceperiod blocks usb 2.0 devices from auto suspending after > xhci_start for 500ms. > > Log shows: > [ 13.387170] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100 > [ 13.387177] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000 > [ 13.387182] hub_suspend:3903: hub 7-0:1.0: hub_suspend > [ 13.387188] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1 > [ 13.387191] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event > [ 13.387193] hcd_bus_resume:2303: usb usb7: usb auto-resume > [ 13.387296] hub_event:5779: hub 3-0:1.0: state 7 ports 1 chg 0000 evt 0000 > [ 13.393343] handle_port_status:2034: xhci-hcd PNP0D10:02: handle_port_status: starting usb5 port polling. > [ 13.393353] xhci_hub_control:1271: xhci-hcd PNP0D10:02: Get port status 5-1 read: 0x206e1, return 0x10101 > [ 13.400047] hub_suspend:3903: hub 3-0:1.0: hub_suspend > [ 13.403077] hub_resume:3948: hub 7-0:1.0: hub_resume > [ 13.403080] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100 > [ 13.403085] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000 > [ 13.403087] hub_suspend:3903: hub 7-0:1.0: hub_suspend > [ 13.403090] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1 > [ 13.403093] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event > [ 13.403095] hcd_bus_resume:2303: usb usb7: usb auto-resume > [ 13.405002] handle_port_status:1913: xhci-hcd PNP0D10:04: Port change event, 9-1, id 1, portsc: 0x6e1 > [ 13.405016] hub_activate:1169: usb usb5-port1: status 0101 change 0001 > [ 13.405026] xhci_clear_port_change_bit:658: xhci-hcd PNP0D10:02: clear port1 connect change, portsc: 0x6e1 > [ 13.413275] hcd_bus_suspend:2250: usb usb3: bus auto-suspend, wakeup 1 > [ 13.419081] hub_resume:3948: hub 7-0:1.0: hub_resume > [ 13.419086] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100 > [ 13.419095] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000 > [ 13.419100] hub_suspend:3903: hub 7-0:1.0: hub_suspend > [ 13.419106] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1 > [ 13.419110] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event > [ 13.419112] hcd_bus_resume:2303: usb usb7: usb auto-resume > [ 13.420455] handle_port_status:2034: xhci-hcd PNP0D10:04: handle_port_status: starting usb9 port polling. > [ 13.420493] handle_port_status:1913: xhci-hcd PNP0D10:05: Port change event, 10-1, id 1, portsc: 0x6e1 > [ 13.425332] hcd_bus_suspend:2279: usb usb3: suspend raced with wakeup event > [ 13.431931] handle_port_status:2034: xhci-hcd PNP0D10:05: handle_port_status: starting usb10 port polling. > [ 13.435080] hub_resume:3948: hub 7-0:1.0: hub_resume > [ 13.435084] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100 > [ 13.435092] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000 > [ 13.435096] hub_suspend:3903: hub 7-0:1.0: hub_suspend > [ 13.435102] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1 > [ 13.435106] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event > > usb7 and other usb 2.0 root hub were rapidly toggling between suspend > and resume states. More, "suspend raced with wakeup event" confuses people. > > So, limit run_graceperiod for only usb 3.0 devices > > Signed-off-by: Hongyu Xie <xiehongyu1@kylinos.cn> Sounds reasonable. I don't recall USB 2.0 devices needing this. Hub driver has also changed a bit since the xhci run_graceperiod was added. USB 3 hubs are no longer aggressively runtime suspending after resume. See: 8f5b7e2bec1c usb: hub: fix detection of high tier USB3 devices behind suspended hubs We could possibly get rid of the whole xhci run_graceperiod by extending the hub driver change to cover both init and resume paths. This patch is a good step in that direction Thanks Mathias
Hello, Anything new about this patch? 在 2025/10/20 19:20, Mathias Nyman 写道: > On 10/17/25 15:12, Hongyu Xie wrote: >> run_graceperiod blocks usb 2.0 devices from auto suspending after >> xhci_start for 500ms. >> >> Log shows: >> [ 13.387170] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port >> status 7-1 read: 0x2a0, return 0x100 >> [ 13.387177] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 >> evt 0000 >> [ 13.387182] hub_suspend:3903: hub 7-0:1.0: hub_suspend >> [ 13.387188] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1 >> [ 13.387191] hcd_bus_suspend:2279: usb usb7: suspend raced with >> wakeup event >> [ 13.387193] hcd_bus_resume:2303: usb usb7: usb auto-resume >> [ 13.387296] hub_event:5779: hub 3-0:1.0: state 7 ports 1 chg 0000 >> evt 0000 >> [ 13.393343] handle_port_status:2034: xhci-hcd PNP0D10:02: >> handle_port_status: starting usb5 port polling. >> [ 13.393353] xhci_hub_control:1271: xhci-hcd PNP0D10:02: Get port >> status 5-1 read: 0x206e1, return 0x10101 >> [ 13.400047] hub_suspend:3903: hub 3-0:1.0: hub_suspend >> [ 13.403077] hub_resume:3948: hub 7-0:1.0: hub_resume >> [ 13.403080] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port >> status 7-1 read: 0x2a0, return 0x100 >> [ 13.403085] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 >> evt 0000 >> [ 13.403087] hub_suspend:3903: hub 7-0:1.0: hub_suspend >> [ 13.403090] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1 >> [ 13.403093] hcd_bus_suspend:2279: usb usb7: suspend raced with >> wakeup event >> [ 13.403095] hcd_bus_resume:2303: usb usb7: usb auto-resume >> [ 13.405002] handle_port_status:1913: xhci-hcd PNP0D10:04: Port >> change event, 9-1, id 1, portsc: 0x6e1 >> [ 13.405016] hub_activate:1169: usb usb5-port1: status 0101 change 0001 >> [ 13.405026] xhci_clear_port_change_bit:658: xhci-hcd PNP0D10:02: >> clear port1 connect change, portsc: 0x6e1 >> [ 13.413275] hcd_bus_suspend:2250: usb usb3: bus auto-suspend, wakeup 1 >> [ 13.419081] hub_resume:3948: hub 7-0:1.0: hub_resume >> [ 13.419086] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port >> status 7-1 read: 0x2a0, return 0x100 >> [ 13.419095] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 >> evt 0000 >> [ 13.419100] hub_suspend:3903: hub 7-0:1.0: hub_suspend >> [ 13.419106] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1 >> [ 13.419110] hcd_bus_suspend:2279: usb usb7: suspend raced with >> wakeup event >> [ 13.419112] hcd_bus_resume:2303: usb usb7: usb auto-resume >> [ 13.420455] handle_port_status:2034: xhci-hcd PNP0D10:04: >> handle_port_status: starting usb9 port polling. >> [ 13.420493] handle_port_status:1913: xhci-hcd PNP0D10:05: Port >> change event, 10-1, id 1, portsc: 0x6e1 >> [ 13.425332] hcd_bus_suspend:2279: usb usb3: suspend raced with >> wakeup event >> [ 13.431931] handle_port_status:2034: xhci-hcd PNP0D10:05: >> handle_port_status: starting usb10 port polling. >> [ 13.435080] hub_resume:3948: hub 7-0:1.0: hub_resume >> [ 13.435084] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port >> status 7-1 read: 0x2a0, return 0x100 >> [ 13.435092] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 >> evt 0000 >> [ 13.435096] hub_suspend:3903: hub 7-0:1.0: hub_suspend >> [ 13.435102] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1 >> [ 13.435106] hcd_bus_suspend:2279: usb usb7: suspend raced with >> wakeup event >> >> usb7 and other usb 2.0 root hub were rapidly toggling between suspend >> and resume states. More, "suspend raced with wakeup event" confuses >> people. >> >> So, limit run_graceperiod for only usb 3.0 devices >> >> Signed-off-by: Hongyu Xie <xiehongyu1@kylinos.cn> > > Sounds reasonable. I don't recall USB 2.0 devices needing this. > > Hub driver has also changed a bit since the xhci run_graceperiod was added. > USB 3 hubs are no longer aggressively runtime suspending after resume. See: > 8f5b7e2bec1c usb: hub: fix detection of high tier USB3 devices behind > suspended hubs > > We could possibly get rid of the whole xhci run_graceperiod by extending > the hub driver > change to cover both init and resume paths. > > This patch is a good step in that direction > > Thanks > Mathias
© 2016 - 2026 Red Hat, Inc.