From patchwork Mon Mar 10 16:59:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fiona Klute X-Patchwork-Id: 14010421 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (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 50881230988; Mon, 10 Mar 2025 16:59:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741625992; cv=none; b=lf5H+EPNv01Y0Hd7CQKg/Lqan0G0mBhqXKl/5C3mWJ18dcRS7EuDgeAH4PBQKpPqGRxnFNjjbRuVTKsKmpVVG9m/llu2HpKiwJRaQ5FB3ivR5yi1mHuhnjsBztgZMAD4cM0y1uHOuXfhHlJpcoAlcZl3fMcFNo/f8ncx7Aefs9U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741625992; c=relaxed/simple; bh=km2IGdJt2Zt2W/qgfZG1Lab7vtwETfZ7Ls52FOlKepE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=S0k/p8bvr7MYrEOKumr5zcxTg954mDA/OWi0IF2SrUcZJDKGULPkF+CiTZmN6mN5WZrWSOe8RvwDA6rseuOqYlQ4ViPHbQHziTNzNitsdZBOPLxeNKhVisqbwRrFaEOkSP0VEg90MpsqTX+fDUJn/dPrji+l0WGxf/QoJWiAy08= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=fiona.klute@gmx.de header.b=lEr+B2TM; arc=none smtp.client-ip=212.227.17.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=fiona.klute@gmx.de header.b="lEr+B2TM" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1741625981; x=1742230781; i=fiona.klute@gmx.de; bh=km2IGdJt2Zt2W/qgfZG1Lab7vtwETfZ7Ls52FOlKepE=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID: MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=lEr+B2TM1og/6h/R/DnZdw0KAubAPCXD6CmmBFRJkoBa/AOYay1Txdn/g1o+y4K3 oXtnPx/5qwXIr6cqzSq3GgMYXbhMN6lPlEqF1NjKEszAEvrsnN3vJmFOJIFZO19ct 7Ck9eH19W+nrOU5zqstS/R4DpAz5T8jiS2+G40KPammcEKzXUqv+smnGqZAZGLcrZ Ld74SXCrnFQhYGkjj7VAnFky/TjWwHPC4B4klm7p+RK+tHfXcYq23CRcis6tdmWxy WR7g1h4zttFF5eXZgAYZsjRzUAjN753IlEz0jK/4nmO2Zr/uG9DWmBUCtgbKqRFNo DCKG1KxKbvUrDSCXIA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from haruka.home.arpa ([85.22.124.30]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MGhyc-1u4LeA3Hne-000h9z; Mon, 10 Mar 2025 17:59:40 +0100 From: Fiona Klute To: netdev@vger.kernel.org Cc: Thangaraj Samynathan , Rengarajan Sundararajan , UNGLinuxDriver@microchip.com, Andrew Lunn , "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Fiona Klute , kernel-list@raspberrypi.com, stable@vger.kernel.org Subject: [PATCH] net: usb: lan78xx: Enforce a minimum interrupt polling period Date: Mon, 10 Mar 2025 17:59:31 +0100 Message-ID: <20250310165932.1201702-1-fiona.klute@gmx.de> X-Mailer: git-send-email 2.47.2 Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:YYGO+4uzgBGjMBAgVnoBmWV0/iNMfrX+PvlpPtClFX82DXYtx/t V0hQLs/Lg7kApN6BGiEWA2n61AMZfA6qQ2HRixcdn8FMqrckdrIS7msv3MwjsuNTBT6VVVw ezeEhMzwrdrEDhv1Vh7om3hdSPLUi9GdScYkxG4fKFH/9/vQ9MG2WmoEmnW3QufDVST5mIl OgTNEL0HEhBDmFpQBM9kg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:xX8wuS/r/h4=;d3UWide7pAM7x2u3z4E84qqiQ5x zTF/zGW9SAqyXGT7WMtqYfz1BzXB2bI2Lvlb5KDs+kByY2s7VNwDvbq/o+UjI0kjd+GbW8Nwp SRW/wtSCbA3z0+vC/XHVLQkJvm3meHrdwzUcg9Hx/k+Fdl5SblIwMEiloMaXR0JX9i7nxdsU4 cSDHar6Pcu51kaYOhT7NOOKM3IIn6SutZYBerYbaxFziII5UzI7WTMHdip6fB9SxVZDOr1k7+ OoS/L+e2+TZOuCKc9ix0zHspFlX0at0ZQSvpgXNhSnfmkR8Yq/dTF+v7EY4f+FsgbJX0CFzdM fhRheSQmLq/99dhgsIJmi+NufP1dyG902rT6xuQJ6odF03O3lwdTRTkxnWOWZpN2pnWmUBK1C 4nI5eXidryEpYi4ARlmYxjhN9vMlv4PGhEEMSp4CcMe0SQvquNQ/YzB6CPFkgnZNXjeTpBW0m eBf5kD8tSXGlwuQW+vORm7emELY7VyKHDQHte0GRn9preQENFhPev9uQvEVBNzLlk6MHFBTg8 OmPq4sCqRCdNC3KXKwUvxabN2unP37NjfDjCIUcKnBGD/m4Pgafg/ymrG2isIWGTz2eR2MC+a O0iaUdO5qRID0mvN9+jFfk/yqngkZRdFDUhuksYvoLLl1CFz1zU2SgLiSeHgnNB5GsbN0A6ye 6B9eHQYjjq1EKmRsQQpweOiT8j0zrlvKT8x2bSoCN6X9OpPbWU3z+YNpjM0UkkTMF9A70iXvR voPJwwCcTUD2e2gFaDi96wXKTE3QIvB7zJS+Gxr7ao73R+oIlUfLI7hzsVSx08jy/R88JOncN hmT3XnK+XTz9+iOpy8CmF57ktIYKWDzCYbIf4pTniCN8MndXIDJ0mMzepeBQSUz+jwvtvr5Bd j0BfyDl9mo+vE+XIcL87TBZDQLryOlf5dwDFIagNLzY0WWrjfbdHho0Pwb6uN87mMPfhLZpVQ vTwLWV/hL5X+zuoMLATMbRx2zTg5oVUroB0SYNNHPftpQGCeYPfTBeqFMr8LpKSgD+GgyUmyY e0PrOkb+2s/Rqox3SAmeDoGebRTYZg2lj50lYPepP6uGPeA0ucFPe6nQouNYO3Qzr/Fynm+BB t6JUy20vmod5O55FsBRMNADKL9UsktvjnV2N0Y/y9VnbtRvr/Et8hL4uOWKoAmTMPZkphkCp/ KUcFbROOX6OJcsgawpC2GZEVrcJ683iEJGTwKDIPdabCIglh4ovZd1l20gEaqTtdDnH3X9LS0 Gw+mBZkKugO9oP1WP9hj5sDvkrZtz56v0I6ipZ7xOi0hf/d1llzGZOdS0Jq7UYRRODSd0vH2s lnUJT8CKrPbdU46wBPOYDu6KkueS/KedqsHTvvxxrYLTm53Gl+idGzNzDTUTkeRMAXbCg2xDV zC6RiRc0YlQYBWZ+G4y0MrHP+k7zA7+Yw6S5I9/6iCLtghs/oEM/bfqJI3O17KSqmYOP7y0h2 D1jC8zyznKx00Gob7FCyw//fXS0RW6tXXv0yziycjBiql+/Ii If a new reset event appears before the previous one has been processed, the device can get stuck into a reset loop. This happens rarely, but blocks the device when it does, and floods the log with messages like the following: lan78xx 2-3:1.0 enp1s0u3: kevent 4 may have been dropped The only bit that the driver pays attention to in the interrupt data is "link was reset". If there's a flapping status bit in that endpoint data (such as if PHY negotiation needs a few tries to get a stable link), polling at a slower rate allows the state to settle. This is a simplified version of a patch that's been in the Raspberry Pi downstream kernel since their 4.14 branch, see also: https://github.com/raspberrypi/linux/issues/2447 Signed-off-by: Fiona Klute Cc: kernel-list@raspberrypi.com Cc: stable@vger.kernel.org --- For the stable crew: I've *tested* the patch with 6.12.7 and 6.13.5 on a Revolution Pi Connect 4 (Raspberry Pi CM4 based device with built-in LAN7800 as second ethernet port), according to the linked issue for the RPi downstream kernel the problem should be present in all maintained longterm kernel versions, too (based on how long they've carried a patch). drivers/net/usb/lan78xx.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) base-commit: dd83757f6e686a2188997cb58b5975f744bb7786 diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index a91bf9c7e31d..7bf01a31a932 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -173,6 +173,12 @@ #define INT_EP_GPIO_1 (1) #define INT_EP_GPIO_0 (0) +/* highspeed device, so polling interval is in microframes (eight per + * millisecond) + */ +#define INT_URB_MICROFRAMES_PER_MS 8 +#define MIN_INT_URB_INTERVAL_MS 8 + static const char lan78xx_gstrings[][ETH_GSTRING_LEN] = { "RX FCS Errors", "RX Alignment Errors", @@ -4527,7 +4533,11 @@ static int lan78xx_probe(struct usb_interface *intf, if (ret < 0) goto out4; - period = ep_intr->desc.bInterval; + period = max(ep_intr->desc.bInterval, + MIN_INT_URB_INTERVAL_MS * INT_URB_MICROFRAMES_PER_MS); + dev_info(&intf->dev, + "interrupt urb period set to %d, bInterval is %d\n", + period, ep_intr->desc.bInterval); maxp = usb_maxpacket(dev->udev, dev->pipe_intr); dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL);