From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 208C9266B41; Mon, 7 Apr 2025 18:14:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744049671; cv=none; b=Ytl/YkaPUD+G5w88PQxWgewrW/jaCDrsf+SfHY0ROrEknnZISxiJhjPcB5mgCFDrjFoypH10OONsKje9ln9VMgzISOAVo3bLTWTg55EBrrUS1qEgv1iAGNUiNSRLNX+6ITcftPWuwr3TCQcRcm7DoK6ULvv3RddbVQvdmTau+kQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744049671; c=relaxed/simple; bh=0mCCtYKAYFjs9NmMVhHteIrRhXZpoHLaF0jqmAD86kw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=lU5VJxFNu2puK7mCHrBOmwpKTIJtLM7gu080FkTo6sUhG9ljkv+8i5ur5ek6FPHqlN74FpWts2ZM0PuNiACcDkCV42TaKK/XP5663/HAp/qX2iH+EHa/jQUpY55qHsle6HRvcsoVr8t/kcZ+VKvM6zKiaAPcaSIlO6xJchsOuEw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bjGCFiUg; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bjGCFiUg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F1C76C4CEF3; Mon, 7 Apr 2025 18:14:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1744049670; bh=0mCCtYKAYFjs9NmMVhHteIrRhXZpoHLaF0jqmAD86kw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bjGCFiUgODQRvxkUHSWn3whvpa8oc4jM1ZFEi3mB1lMlRtRX0JIsdcyrtE5rjTsSV GXVYZvMHBhzS4ox4OdcSpnRjoz1QJp8MVywo2UjVjYtnfjazo50m0UE74biXHjQxxK JT2YaimqOTRnVA1eidWqorj34jHNzPbjETlCw9MbbwaVmz/wGZprrZZTqTfo+/BGIp 9cF7S2PpfWuB+x75nXR5K0Sl83lg/1yYY8qnFisWDQJj+TfajSw2JXoa7eAGXHnACo 3Js9KHJkubEigDmkPmmDMM5YzJUps7vCYXd20Zak+zsNxxmRf5mYX8wamfSBXg0Z/e 5sBsklAlAInrQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Michal Pecio , Mathias Nyman , Greg Kroah-Hartman , Sasha Levin , mathias.nyman@intel.com, linux-usb@vger.kernel.org Subject: [PATCH AUTOSEL 6.6 07/15] usb: xhci: Avoid Stop Endpoint retry loop if the endpoint seems Running Date: Mon, 7 Apr 2025 14:14:07 -0400 Message-Id: <20250407181417.3183475-7-sashal@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250407181417.3183475-1-sashal@kernel.org> References: <20250407181417.3183475-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.6.86 Content-Transfer-Encoding: 8bit From: Michal Pecio [ Upstream commit 28a76fcc4c85dd39633fb96edb643c91820133e3 ] Nothing prevents a broken HC from claiming that an endpoint is Running and repeatedly rejecting Stop Endpoint with Context State Error. Avoid infinite retries and give back cancelled TDs. No such cases known so far, but HCs have bugs. Signed-off-by: Michal Pecio Signed-off-by: Mathias Nyman Link: https://lore.kernel.org/r/20250311154551.4035726-4-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/usb/host/xhci-ring.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index 4a081685a1953..09b9288dd87a4 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -1214,16 +1214,19 @@ static void xhci_handle_cmd_stop_ep(struct xhci_hcd *xhci, int slot_id, * Stopped state, but it will soon change to Running. * * Assume this bug on unexpected Stop Endpoint failures. - * Keep retrying until the EP starts and stops again, on - * chips where this is known to help. Wait for 100ms. + * Keep retrying until the EP starts and stops again. */ - if (time_is_before_jiffies(ep->stop_time + msecs_to_jiffies(100))) - break; fallthrough; case EP_STATE_RUNNING: /* Race, HW handled stop ep cmd before ep was running */ xhci_dbg(xhci, "Stop ep completion ctx error, ctx_state %d\n", GET_EP_CTX_STATE(ep_ctx)); + /* + * Don't retry forever if we guessed wrong or a defective HC never starts + * the EP or says 'Running' but fails the command. We must give back TDs. + */ + if (time_is_before_jiffies(ep->stop_time + msecs_to_jiffies(100))) + break; command = xhci_alloc_command(xhci, false, GFP_ATOMIC); if (!command) { -- 2.39.5