From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D4470176FB1 for ; Wed, 11 Feb 2026 15:04:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.175 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770822280; cv=none; b=JdgYIKSvCi3uqizwbSUq3CAPlbXXrlnVhEobog90+JPGtVCqhMCq23T0RdH0e5HdBBKZP4wiPPgHrgzDc5JGZznK5tyf9TxK9qTl6OuK3RTI3VGpfs7mBpl0EI1C6SOk2dokuOAAgmBzX1wNOKBc1leoOeXkgCy3ZzAFNfktX7U= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770822280; c=relaxed/simple; bh=AmZMzOclZ8x0kbRdv+6orlxHCTBrmpBGJ67CosDnpSY=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=fvGPSI4jLoFTzSZa0uAhHtKrZ3XF63mQBF3QbSVr+YrdxrLEQ0X5uzf/ibCj5878tHE6kTZT2MlAh7N6MUgfaLXAuB3bgCOGA3V4wYpkLJUgGZGc3gKuSBFREvPjTHGgmztwZauhlSMJYKHXEx//2RbDeC6KQLM+MdJ3t1ZPEu8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rowland.harvard.edu; spf=fail smtp.mailfrom=g.harvard.edu; dkim=pass (2048-bit key) header.d=rowland.harvard.edu header.i=@rowland.harvard.edu header.b=qJlnJbUy; arc=none smtp.client-ip=209.85.160.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rowland.harvard.edu Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=g.harvard.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rowland.harvard.edu header.i=@rowland.harvard.edu header.b="qJlnJbUy" Received: by mail-qt1-f175.google.com with SMTP id d75a77b69052e-5014b7de222so69123651cf.0 for ; Wed, 11 Feb 2026 07:04:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rowland.harvard.edu; s=google; t=1770822277; x=1771427077; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=YQ2XuMNlJ0VrBoxBJpOB6BdQH/fRgWhyXV6P5UB4GYc=; b=qJlnJbUyvrqXQTgBoH7KfqLTu4Gb+hiq97dWzAGDLTWt8qorWJM+8EJpNjLFODT6OQ BwJkc518Sz8gxt37JfTydTGpQJWF+j2bNI/lBPPuYurkEJHh9BXY9Xe3cK+E+p1VM/TH w8OwFu/m5H1mIvERQD+YiDikbBRuE12RUFZ9YupP5mkUpARWSR61SeUrvFWJR4pw4im5 wCB0ImLfAInG5S6i2oFjzmo2Hw/PDv0qX7l5TNWZO+57WzDszl5BFfT6YLtkUX0ft9lY MyfPOwlEe6xwewC08OkeUiLspVUqKE1d80MgTDmSVREMWfq2+dSWeppQ+0u2sKbONeJe w5Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770822277; x=1771427077; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YQ2XuMNlJ0VrBoxBJpOB6BdQH/fRgWhyXV6P5UB4GYc=; b=sgqviCSIs9Msbzzc2wxdn+Wlw7ddMof7FX/F/7P13wrw5Kmwv6f5LAeRwPVawYgQg8 fmsI0RHkuuReEHs6bF+WmCr5p6ieaI8TRJ05PoGMdzn8/B8mArFPBXU6t2Vmc7N9n2Ev oHC2mBRyKsvIpwcndHJjKzr1Awa8u4mjEc7IBlZDAUnZoTppFzeLg+3htPfj76Ou8JIN 7o3dLmdy5UvMTGqXrTOI/ZSHO7zFKwIDA7Zc0YS6ItXmlZoW0aOvcXkED4ulx7lvTETk PU2BGPh5wm284cK1pnUAOvcDyKPLl9GcXCOL5Vgvgj5tEjKwxPX+caHf5JvZcvLYtGEl tY9A== X-Forwarded-Encrypted: i=1; AJvYcCVaL6hjErNWieDK1LgguV8xpqAhqlfqwWHgtcsUTYawBFwSAMTYmOtLVG6ff8hd6xGA9yVIVVfkYChlv9Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yz361/V0/HePM0mT4oEKtk43X/n+hFSl3FxPt9lM4eqhs6Oc1EQ X405ZUx1rz73nwRv8ywsol8u2LP4WEvWLDsrNNqq0l3KNSeC7it4qDhBDgdpIlxksA== X-Gm-Gg: AZuq6aKjQs9/a9fD/AfyRU12ep4Jdw2qRdS81j6LXxuIIdU+CNxlN7upAsRS1IOso09 +AKOP2F+Y0qO3R0q9BlJw5QFboafaQhFSGss34f7jFZeRsZLl2HHh+o7yLzcD37yzSBPAxubzTF EGNpHzdCLujxRbTYT3+QwGUO+jFDJ3ql1Sqi4OcDcVFFivV/2Iw3I4tqfr1Muumx0o3qr3Pw9C9 l664uXmckSpdtiu2Uq+7UDbjcRhroxIKWN+fW0nW0z9N5ZN2/JVJD4ckiI4JQL67lKSZ1MEoSH8 rjoOCNJ4/M2m3aklKdLpQTVS8QdEdFwBFG1pRNX0C6b2l3qOlyeGmPh6xa0XgQdrRMq6OmYjF7I csksyFTxjZ5EaHK9F4gTzXoQjBQpFdi/MrSDfPFK21XfII4a+CqBLWGkgo7xjQCos8v5522FlRN PGrhObRUDph8Kdfv18L7VlSP0UCrOb4AapUpYhDl0yyA== X-Received: by 2002:a05:622a:11cf:b0:4ee:2984:7d93 with SMTP id d75a77b69052e-50673cf1ec0mr71711981cf.17.1770822275252; Wed, 11 Feb 2026 07:04:35 -0800 (PST) Received: from rowland.harvard.edu ([140.247.181.15]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-8971cda750dsm18472026d6.35.2026.02.11.07.04.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Feb 2026 07:04:34 -0800 (PST) Date: Wed, 11 Feb 2026 10:04:32 -0500 From: Alan Stern To: Xu Yang Cc: gregkh@linuxfoundation.org, m.grzeschik@pengutronix.de, 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() Message-ID: <1be3ca8a-032d-487e-92f4-67b2070be213@rowland.harvard.edu> References: <20260211103628.3265850-1-xu.yang_2@nxp.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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. This is not a very good description of the problem. Here's a better one: When a port is disabled, an attached device will be disconnected. This causes a port-status-change event, which will race with hub autosuspend (if the disabled port was the only connected port on its hub), causing an immediate resume and a second autosuspend. Both of these can be avoided by adding a short delay after the call to usb_hub_set_port_power(). Alan Stern > 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 > --- > 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)); > > if (disabled) { > usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_CONNECTION); > -- > 2.34.1 >