From: Greg KH <gregkh@linuxfoundation.org>
To: Xu Yang <xu.yang_2@nxp.com>
Cc: m.grzeschik@pengutronix.de, stern@rowland.harvard.edu,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
imx@lists.linux.dev, jun.li@nxp.com
Subject: Re: [PATCH] usb: port: add delay after usb_hub_set_port_power()
Date: Wed, 11 Feb 2026 12:19:38 +0100 [thread overview]
Message-ID: <2026021130-seminar-comma-5a7d@gregkh> (raw)
In-Reply-To: <20260211103628.3265850-1-xu.yang_2@nxp.com>
On Wed, Feb 11, 2026 at 06:36:28PM +0800, Xu Yang wrote:
> When disable the root hub port, somehow the device is disconnected and
> re-connected again. This happens because usb_clear_port_feature() does not
> clear a truly happened port change. That says, in fact, port change event
> may happen after usb_clear_port_feature() is called. Then the subsequent
> port change event will have impact on usb device suspend routine.
>
> Below log shows what is happening:
>
> $ echo 1 > usb1-port1/disable
> [ 37.958239] usb 1-1: USB disconnect, device number 2
> [ 37.964101] usb 1-1: unregistering device
> [ 37.970070] hub 1-0:1.0: hub_suspend
> [ 37.971305] hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0002
> [ 37.974412] usb usb1: bus auto-suspend, wakeup 1
> [ 37.988175] usb usb1: suspend raced with wakeup event <---
> [ 37.993947] usb usb1: usb auto-resume
> [ 37.998401] hub 1-0:1.0: hub_resume
> [ 38.105688] usb usb1-port1: status 0000, change 0000, 12 Mb/s
> [ 38.112399] hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0000
> [ 38.118645] hub 1-0:1.0: hub_suspend
> [ 38.122963] usb usb1: bus auto-suspend, wakeup 1
> [ 38.200368] usb usb1: usb wakeup-resume
> [ 38.204982] usb usb1: usb auto-resume
> [ 38.209376] hub 1-0:1.0: hub_resume
> [ 38.213676] usb usb1-port1: status 0101 change 0001
> [ 38.321552] hub 1-0:1.0: state 7 ports 1 chg 0002 evt 0000
> [ 38.327978] usb usb1-port1: status 0101, change 0000, 12 Mb/s
> [ 38.457429] usb 1-1: new high-speed USB device number 3 using ci_hdrc
>
> To fix the issue, add delay after usb_hub_set_port_power(). So port change
> bit will be fixed to the final state and usb_clear_port_feature() can
> correctly clear it after this period. This will also avoid usb runtime
> suspend routine to run because usb_autopm_put_interface() not run yet.
>
> Fixes: f061f43d7418 ("usb: hub: port: add sysfs entry to switch port power")
> Cc: stable@kernel.org
> Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
> ---
> drivers/usb/core/port.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c
> index f54198171b6a..a47df5d32f7c 100644
> --- a/drivers/usb/core/port.c
> +++ b/drivers/usb/core/port.c
> @@ -141,6 +141,7 @@ static ssize_t disable_store(struct device *dev, struct device_attribute *attr,
> usb_disconnect(&port_dev->child);
>
> rc = usb_hub_set_port_power(hdev, hub, port1, !disabled);
> + msleep(2 * hub_power_on_good_delay(hub));
This feels like a hack, and you are just getting lucky. Why this
specific amount of time, what guarantees that this is ok?
And why are you disabling a root hub port at all? How is that even
guaranteed to work?
thanks,
greg k-h
next prev parent reply other threads:[~2026-02-11 11:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-11 10:36 [PATCH] usb: port: add delay after usb_hub_set_port_power() Xu Yang
2026-02-11 11:19 ` Greg KH [this message]
2026-02-12 10:19 ` Xu Yang
2026-02-11 15:04 ` Alan Stern
2026-02-11 15:47 ` Greg KH
2026-02-11 16:07 ` Alan Stern
2026-02-12 10:20 ` Xu Yang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2026021130-seminar-comma-5a7d@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=imx@lists.linux.dev \
--cc=jun.li@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=m.grzeschik@pengutronix.de \
--cc=stern@rowland.harvard.edu \
--cc=xu.yang_2@nxp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.