Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2195364/?format=api
{ "id": 2195364, "url": "http://patchwork.ozlabs.org/api/patches/2195364/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20260210203332.23200-1-harshankmatkar1304@outlook.com/", "project": { "id": 46, "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api", "name": "Intel Wired Ethernet development", "link_name": "intel-wired-lan", "list_id": "intel-wired-lan.osuosl.org", "list_email": "intel-wired-lan@osuosl.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260210203332.23200-1-harshankmatkar1304@outlook.com>", "list_archive_url": null, "date": "2026-02-10T20:34:02", "name": "igc: Add PCIe link recovery for I225/I226", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": false, "hash": "56897fecd09064229c181a43509718a2897f8388", "submitter": { "id": 92612, "url": "http://patchwork.ozlabs.org/api/people/92612/?format=api", "name": "Harshank Matkar", "email": "harshankmatkar1304@outlook.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20260210203332.23200-1-harshankmatkar1304@outlook.com/mbox/", "series": [ { "id": 491738, "url": "http://patchwork.ozlabs.org/api/series/491738/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=491738", "date": "2026-02-10T20:34:02", "name": "igc: Add PCIe link recovery for I225/I226", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/491738/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2195364/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2195364/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<intel-wired-lan-bounces@osuosl.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=osuosl.org header.i=@osuosl.org header.a=rsa-sha256\n header.s=default header.b=bXZFLV4w;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=osuosl.org\n (client-ip=2605:bc80:3010::138; helo=smtp1.osuosl.org;\n envelope-from=intel-wired-lan-bounces@osuosl.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4f9YFQ2PcSz1xvg\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 11 Feb 2026 07:34:16 +1100 (AEDT)", "from localhost (localhost [127.0.0.1])\n\tby smtp1.osuosl.org (Postfix) with ESMTP id 36D40820B8;\n\tTue, 10 Feb 2026 20:34:13 +0000 (UTC)", "from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id iHeUpGSA0_R0; Tue, 10 Feb 2026 20:34:11 +0000 (UTC)", "from lists1.osuosl.org (lists1.osuosl.org [140.211.166.142])\n\tby smtp1.osuosl.org (Postfix) with ESMTP id EC3E281BD4;\n\tTue, 10 Feb 2026 20:34:10 +0000 (UTC)", "from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138])\n by lists1.osuosl.org (Postfix) with ESMTP id 1C8EA2EF\n for <intel-wired-lan@lists.osuosl.org>; Tue, 10 Feb 2026 20:34:09 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n by smtp1.osuosl.org (Postfix) with ESMTP id 0A9A581BD4\n for <intel-wired-lan@lists.osuosl.org>; Tue, 10 Feb 2026 20:34:09 +0000 (UTC)", "from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id lDifOUSBocYT for <intel-wired-lan@lists.osuosl.org>;\n Tue, 10 Feb 2026 20:34:08 +0000 (UTC)", "from SA9PR02CU001.outbound.protection.outlook.com\n (mail-southcentralusazolkn19013084.outbound.protection.outlook.com\n [52.103.14.84])\n by smtp1.osuosl.org (Postfix) with ESMTPS id C3B4581B7B\n for <intel-wired-lan@lists.osuosl.org>; Tue, 10 Feb 2026 20:34:07 +0000 (UTC)", "from MN2PR14MB2638.namprd14.prod.outlook.com (2603:10b6:208:cc::16)\n by SN7PR14MB5894.namprd14.prod.outlook.com (2603:10b6:806:26a::18)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Tue, 10 Feb\n 2026 20:34:05 +0000", "from MN2PR14MB2638.namprd14.prod.outlook.com\n ([fe80::101a:ee9b:a260:5e50]) by MN2PR14MB2638.namprd14.prod.outlook.com\n ([fe80::101a:ee9b:a260:5e50%6]) with mapi id 15.20.9611.006; Tue, 10 Feb 2026\n 20:34:02 +0000" ], "X-Virus-Scanned": [ "amavis at osuosl.org", "amavis at osuosl.org" ], "X-Comment": "SPF check N/A for local connections - client-ip=140.211.166.142;\n helo=lists1.osuosl.org; envelope-from=intel-wired-lan-bounces@osuosl.org;\n receiver=<UNKNOWN> ", "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 smtp1.osuosl.org EC3E281BD4", "OpenDKIM Filter v2.11.0 smtp1.osuosl.org C3B4581B7B" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=osuosl.org;\n\ts=default; t=1770755651;\n\tbh=s1QESa/MbosOGVwqqQRjSoMSoH/kPnhascspn4JCiMI=;\n\th=From:To:CC:Date:Subject:List-Id:List-Unsubscribe:List-Archive:\n\t List-Post:List-Help:List-Subscribe:From;\n\tb=bXZFLV4wOF2VMVeOTHtqoMA6Oie7nvnPLo7Bv0IjhKLWghklGFuOK+IAHEAUiyn5P\n\t jVcrTCoes/g3qKJ6dowVsxdDmtdOYKu2MPdJKG6E/IeDUJMuBattoJD0/ccNriQgi3\n\t 8OC33BpDCREp2oqtnd0yhQg3ONiOp9RlVuJeAiKYnfDbpSCvUtTGDGgxG7wo6bgbyS\n\t SFvHftljqruvfInnSSOWGEQkq68Nm7UMq9XjSf3jSzYKm1r6HDHqVj/UeIGJrzlUBE\n\t lPafVYqNFhEwN3U8GwS8xC496mS/U+gjurXnn6NTPvt505gHotqzbQCpaBdw7S0mub\n\t 0rkFBjMtGlIrg==", "Received-SPF": "Pass (mailfrom) identity=mailfrom; client-ip=52.103.14.84;\n helo=sa9pr02cu001.outbound.protection.outlook.com;\n envelope-from=harshankmatkar1304@outlook.com; receiver=<UNKNOWN>", "DMARC-Filter": "OpenDMARC Filter v1.4.2 smtp1.osuosl.org C3B4581B7B", "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=AuSyQD9IbwMKJ4XDc9jr9y+h1OPA916pcVaYwn9RdqHBE1Vmo48jShnW2mjUwipFnJAzetJxlb33qNI1zkjNYoXhltk8UtTXvHMLcbwdZ6rSSuK1RDRddB5PazwaZHuU7FyXv5lNDRfr9g60ZpagU/vjITPKCNLMahmFDSYTs5pan3601Q8SyvadY0WXAfGQYoAa532zXhdWYAYuQ+s00oUqjaAtDrsXS92dUIPs7aupnc1ER8tW9GTHJonXqNOejnioBu8XxyHz5t7yIY27x9mY56KJgi/c8qu7cpLPcguaJ2aTNzLDxa5sqgFnH6/kRsuZ0yUxmhLMLXewV6M4Lg==", "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=s1QESa/MbosOGVwqqQRjSoMSoH/kPnhascspn4JCiMI=;\n b=elEQ+9g4r6ERUAZP+7vKXAGS4s8Ixuzkn1AFJD8uXU63W/JnOzoHBz+ar3GxMgrDCh7t96M1KAAkTmm75lC8DdxP6DP0kxDK6ckyXxGGQl07zCDtjQShcqh4JaYMdQPtY9T1EeYAEMUsJgLTRpbU9P07fJTaBkwTTldnS6giiDNmajNWZaHL1IremlauHx4lYm1z8kWOTnLpOfqcrdz1gjJkuiWqBDhvVj64UfdXuDtYAHcIzckzEhl3oiYkYI0KXuhrt45+q5XOYn8dRrAe5hYrt9wDJkAl5zKDBZqxqAa7TfVjHBCIn3Owz+b6yfg3L/yiXogS1aRlVsaQAUgzTA==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=none; dmarc=none;\n dkim=none; arc=none", "From": "Harshank Matkar <harshankmatkar1304@outlook.com>", "To": "\"intel-wired-lan@lists.osuosl.org\" <intel-wired-lan@lists.osuosl.org>,\n \"netdev@vger.kernel.org\" <netdev@vger.kernel.org>", "CC": "\"tony.nguyen@intel.com\" <tony.nguyen@intel.com>, Harshank Matkar\n <harshankmatkar1304@outlook.com>, \"davem@davemloft.net\"\n <davem@davemloft.net>, \"kuba@kernel.org\" <kuba@kernel.org>,\n \"pabeni@redhat.com\" <pabeni@redhat.com>, \"edumazet@google.com\"\n <edumazet@google.com>, \"linux-kernel@vger.kernel.org\"\n <linux-kernel@vger.kernel.org>", "Thread-Topic": "[PATCH] igc: Add PCIe link recovery for I225/I226", "Thread-Index": "AQHcmsyX2pU9cEBI4U2inzjzUohpXg==", "Date": "Tue, 10 Feb 2026 20:34:02 +0000", "Message-ID": "<20260210203332.23200-1-harshankmatkar1304@outlook.com>", "Accept-Language": "en-IN, en-US", "Content-Language": "en-US", "X-MS-Has-Attach": "", "X-MS-TNEF-Correlator": "", "x-ms-publictraffictype": "Email", "x-ms-traffictypediagnostic": "MN2PR14MB2638:EE_|SN7PR14MB5894:EE_", "x-ms-office365-filtering-correlation-id": "01d006ae-72d6-47f2-ac0e-08de68e3ba79", "x-microsoft-antispam": "BCL:0;\n ARA:14566002|19110799012|8060799015|41001999006|12121999013|15080799012|8062599012|38102599003|31061999003|461199028|3412199025|440099028|102099032|53005399003|40105399003|1710799026;", "x-microsoft-antispam-message-info": "=?utf-8?q?RokbZAvHkZyPci/1/v24cXN5aBS0LGS?=\n\t=?utf-8?q?TfZ2SIgTTwJrr4AJ6VUu6Ga/jtrCRTc9vgPYOScC2XpUZp9zr0rPFqihjV7NDfch6?=\n\t=?utf-8?q?W87szMAB/mz2Pj57xZciOV7Fr2NWo0U85PO8kyfgTK1TCt4cWIlAgkOunMccKyiat?=\n\t=?utf-8?q?XSeoefO11VnaDeS8Nu2KbjMjuumYsvnNDfyUMoW9fmj5MC/y3sNF5QnSdDkZJmFy/?=\n\t=?utf-8?q?hbLdU5+T9T+2xS5dPguTcrJy5ytf+Ik0XCNXICJfSXvQ/mDxJuvaEpv6p0poi4vlT?=\n\t=?utf-8?q?ARWfk0oHZjn561z2SSu+ORIlGzRvGcORjUvS+v1Mc0CjJrWLILdI3JFQcdiXVNADB?=\n\t=?utf-8?q?zjtjOtFjv5BfB4w4qL3xVt5ghozQOqkgPCcyw0nmm0bLAdkXR1e/C/TiMOFHdjVz8?=\n\t=?utf-8?q?fKDTX5j8Zih3qaAH+25C+PaZgel+0dK1Cvax4KfMgI014RQyZljfe5UFon2G0Zwg+?=\n\t=?utf-8?q?YIWzUM3AXC3blxGk26sZ6R+PmVcUF9wJGELcl3hCpRDkGnAh/6jZiXgV+NGo9wIop?=\n\t=?utf-8?q?8qJmDz2WuYMAxM1nnZuGc/a9iTg48tU1TOyepZnlHhNLwSyvbU3vrDHG5r+qRhhfL?=\n\t=?utf-8?q?39kno5oOUzM4LKg6n7ybp90o4uxkzyEAN0IS0WDtfbUwYlbBE6rqfOsrn5LqmB+B/?=\n\t=?utf-8?q?wxM3+YmdNIypnR3FuZr0Yp03j6hK/jGTao1c54kncZewuQbPTG8GCfBE/dY4ZFkab?=\n\t=?utf-8?q?LZO4klWw6c98OfZ6F+yAhSsnH1ThP8uGV1639L5/SidQB661Kf+k7GApAXywOLQc9?=\n\t=?utf-8?q?H3N6MKMztyNBgiUPLfGlUPx84kSy9P1dmjHOtshyMHTw5r663EiZ+hi8SNZcYbMH0?=\n\t=?utf-8?q?j1t4n2Z4MTMLEhdEDhXj3eK9xThQDe9IDjAvaqf3TDHsrPjw6cWeBZivxjcDKDLK2?=\n\t=?utf-8?q?GURaYsHMF88Y9NiajXdck7gpRINbfGwkifUL4D7TSVF8dNvz+cUcsL519UJ4Fexx/?=\n\t=?utf-8?q?FfneKJxPlNHRlAKx+Lb1iZW3Y49Y9tS89bWpcbvvnIfFye/vgTDojdbFfvIXNHtVP?=\n\t=?utf-8?q?4XXMh63WJ+3mmpgWAAYvBoXyntldCPqjvNa9zrZaUOJ+PGFLIQYV7LFED+i5DIIOE?=\n\t=?utf-8?q?7oth4sGOVAW7X9T6umF4PGRMQXuGzFKVw2vtymW0KCqlb+sfpVocSKPc2HF7EIwcR?=\n\t=?utf-8?q?r4EAzceUs7lYWLHyDE3/SdVDJc0xru6xE91jv03e0U90vFyYcBVh5+feYe2bqtTJ0?=\n\t=?utf-8?q?AXFizc6F/enfSIlLdomvH8K3h+9cNcIvKFk9VuymqWMebYaNLflTxkkL8=3D?=", "x-ms-exchange-antispam-messagedata-chunkcount": "1", "x-ms-exchange-antispam-messagedata-0": "=?utf-8?q?le/ORKgCNdkog7sJC1GllRfj58wy?=\n\t=?utf-8?q?JMe4gSBzMwPIlsK2IJgWblD5umKBLkQveYVVqAsOqK7qOVSgNmGWsfkFM6BSSoaan?=\n\t=?utf-8?q?IfMkmqwF12iGW5Kcm1lvrk6AdJO/HKk1PY+4LZOEhlEuYKyT8LsoguZ+DcH2Nkhz0?=\n\t=?utf-8?q?FIEXGlsUdKqEWL9IfeAqrKfvDv7sLbZwgvHINpAZv9lX7Yjr3EBi4ZIJvkRt8td0I?=\n\t=?utf-8?q?bEFADUr9jRQglcOId1yg5LAqQK7lW1iL86NI6upQXNgmQ++dqOk9zuzWlTeabwGky?=\n\t=?utf-8?q?NqBlIIo0W7e0ToMqsjCwXPST1nfXyVxRNOsCHWBKkODiiu809ksJUjiqKFka3zIcT?=\n\t=?utf-8?q?ZdebnxDbmhpNj0CYtUPxmh9NAnEgfwGETiKDfiZVAjso3dy4RhFjH+kWHKabCrnl/?=\n\t=?utf-8?q?TmOTHuBSlndDlkhyP7bpwu2zDXRLAqo5+FV0XGbOnbkv2SurppU04+rcJiGZbX0V6?=\n\t=?utf-8?q?iTkogIjp6+4+o3hOv64THNDuuCA4NuXR4mn3nbvqgYNGyF+HGrc4yy633NXcHJbyP?=\n\t=?utf-8?q?uR5rVSmDS7jvgROai2RAOgppHEoqH7CC0j5xdj8b/6Bn3lWr5EgjhhOhIwR+7dxm4?=\n\t=?utf-8?q?tHdngRdwXlhpv9yglCyGiawwbTJRNuJZsH2n7Rw8XXj0KW34FtiiGDAaNPWXIfLOX?=\n\t=?utf-8?q?at2oTHZswUC/+O6vCEjNEcpiFgXskRuX+aiAmwKwuuvU5EpTUjeDj3kcAtdT9uHa+?=\n\t=?utf-8?q?iOmsC4iGbHAA889qtEdyjZIOg3cP5H91aWvMwbulHKPlZdBTiV0ZJjD5XsWYGchs6?=\n\t=?utf-8?q?QzlUIdjZsJg9WBFEf9rAZY12y8DyBD6bDCQP8X1XYr8R+XFV7mlUHMZzfu1Os8xMf?=\n\t=?utf-8?q?FexQ2IMcYxBGLaUKUhzYJVildD98qzA/HMVJh7ekRC1FXRIBlo6+NZFfLYwTgsdvo?=\n\t=?utf-8?q?8v1UivwcruKOONKGInfCyN3Q1qicIIbvMWmGlLSGhdF1+tItfxp4Z2JoXHVK2mIzU?=\n\t=?utf-8?q?7fo09IwG+r+0gkrvdrP9e2JKRxycrnVemITANF4O2DkEeLMz4AoYQHDri2k9cnB0l?=\n\t=?utf-8?q?xgUYk+dL9a7/WzK5ZiWZlQjDZWldPcq+MR2/lzD3hqBkVWnq/kDfwQAdUoR8qOrWq?=\n\t=?utf-8?q?0OefVYhokSuTfUA5PnEpBYOU+KMU9HbO0hOGLorYrFBmxZHTy+P6o4Hh7UZAiXri2?=\n\t=?utf-8?q?9Uz0+5ipOSk/bCxe72kjisPthfDzDmA5XF4LHfPsthtD4nhczJVq1r+vvh/pr2vO5?=\n\t=?utf-8?q?85YJDD8yZwaLxa6Cp5NEdeMmHg1Hny5cCzgJ7aJtpJLGXcZF+jZejKSKfzVCasBP6?=\n\t=?utf-8?q?kTLjld25s/WaPogicV1SirO3FtfFNcXtgZRJxaaaiaXIA2vE33F3paFdLacNhrCGM?=\n\t=?utf-8?q?mjmevM8ORM4mb/ulReQ3KOviqVKWHNoKFz9Pw=3D=3D?=", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-ID": "<B085AD058252D14E8B7595B5BB161EAC@namprd14.prod.outlook.com>", "Content-Transfer-Encoding": "base64", "MIME-Version": "1.0", "X-OriginatorOrg": "outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-AuthSource": "MN2PR14MB2638.namprd14.prod.outlook.com", "X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg": [ "\n 00000000-0000-0000-0000-000000000000", "\n 00000000-0000-0000-0000-000000000000" ], "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 01d006ae-72d6-47f2-ac0e-08de68e3ba79", "X-MS-Exchange-CrossTenant-originalarrivaltime": "10 Feb 2026 20:34:02.8480 (UTC)", "X-MS-Exchange-CrossTenant-fromentityheader": "Hosted", "X-MS-Exchange-CrossTenant-id": "84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa", "X-MS-Exchange-CrossTenant-rms-persistedconsumerorg": [ "\n 00000000-0000-0000-0000-000000000000", "\n 00000000-0000-0000-0000-000000000000" ], "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "SN7PR14MB5894", "X-Mailman-Original-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=outlook.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=s1QESa/MbosOGVwqqQRjSoMSoH/kPnhascspn4JCiMI=;\n b=VZxT1Yzdvg8gC8NbO3fhOiMFHrjjNjBVYfRf0Zu9fuM5TymLZ0WBbCoylh+hZbNoo6cLe7Ak1HwcDnppDcDgxKyASUSwmRs6l43TqeS8cd2J1fQvJN3XVH0uI1DgMD/YljBS14g7nTdNFoGnNnKlTVOv2ehvFfpiMHNyZVHEwoxry5eK85G/VUmkskfgCrYaozCsGLrEcyTU2Mwek6eT90el7iuTOy78LZd6lmAl1nHS60TAHEbex6KLCklzdWgOoYQxgxizWxtU6AGoyyGyx8KsqHtqE8jya0/zHhBhQTHw3Nc7IqqnRo1Ley1MnMRTpqvEIIQjgc0qRV25beo+4A==", "X-Mailman-Original-Authentication-Results": [ "smtp1.osuosl.org;\n dmarc=pass (p=none dis=none)\n header.from=outlook.com", "smtp1.osuosl.org;\n dkim=pass (2048-bit key,\n unprotected) header.d=outlook.com header.i=@outlook.com header.a=rsa-sha256\n header.s=selector1 header.b=VZxT1Yzd" ], "Subject": "[Intel-wired-lan] [PATCH] igc: Add PCIe link recovery for I225/I226", "X-BeenThere": "intel-wired-lan@osuosl.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n <intel-wired-lan.osuosl.org>", "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>,\n <mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>", "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>", "List-Post": "<mailto:intel-wired-lan@osuosl.org>", "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>", "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>,\n <mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>", "Errors-To": "intel-wired-lan-bounces@osuosl.org", "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>" }, "content": "From: Harshank Matkar <harshankmatkar1304@outlook.com>\n\nWhen ASPM L0s transitions occur on Intel I225/I226 controllers,\ntransient PCIe link instability can cause register read failures\n(0xFFFFFFFF responses). Implement a multi-layer recovery strategy:\n\n1. Immediate retries: 3 attempts with 100-200μs delays\n2. Link retraining: Trigger PCIe link retraining via capabilities\n3. Device detachment: Only as last resort after max attempts\n\nThe recovery mechanism includes rate limiting, maximum attempt\ntracking, and device presence validation to prevent false detaches\non transient ASPM glitches while maintaining safety through\nbounded retry limits.\n\nSigned-off-by: Harshank Matkar <harshankmatkar1304@outlook.com>\n---\n drivers/net/ethernet/intel/igc/igc.h | 6 +-\n drivers/net/ethernet/intel/igc/igc_main.c | 155 ++++++++++++++++++++--\n 2 files changed, 149 insertions(+), 12 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h\nindex a427f05814c1..2ef488b279b9 100644\n--- a/drivers/net/ethernet/intel/igc/igc.h\n+++ b/drivers/net/ethernet/intel/igc/igc.h\n@@ -346,6 +346,10 @@ struct igc_adapter {\n \tstruct mutex led_mutex;\n \tstruct igc_led_classdev *leds;\n \tbool leds_available;\n+\n+\t/* PCIe recovery tracking */\n+\tunsigned int pcie_recovery_attempts;\n+\tunsigned long last_recovery_time;\n };\n \n void igc_up(struct igc_adapter *adapter);\n@@ -422,7 +426,7 @@ enum igc_rss_type_num {\n \tIGC_RSS_TYPE_MAX\t\t= 10,\n };\n #define IGC_RSS_TYPE_MAX_TABLE\t\t16\n-#define IGC_RSS_TYPE_MASK\t\tGENMASK(3,0) /* 4-bits (3:0) = mask 0x0F */\n+#define IGC_RSS_TYPE_MASK\t\tGENMASK(3, 0) /* 4-bits (3:0) = mask 0x0F */\n \n /* igc_rss_type - Rx descriptor RSS type field */\n static inline u32 igc_rss_type(const union igc_adv_rx_desc *rx_desc)\ndiff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c\nindex 89a321a344d2..f0daa3edbb79 100644\n--- a/drivers/net/ethernet/intel/igc/igc_main.c\n+++ b/drivers/net/ethernet/intel/igc/igc_main.c\n@@ -1411,9 +1411,8 @@ static int igc_tx_map(struct igc_ring *tx_ring,\n \t/* Make sure there is space in the ring for the next send. */\n \tigc_maybe_stop_tx(tx_ring, DESC_NEEDED);\n \n-\tif (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {\n+\tif (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more())\n \t\twritel(i, tx_ring->tail);\n-\t}\n \n \treturn 0;\n dma_error:\n@@ -1613,8 +1612,7 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb,\n \t * otherwise try next time\n \t */\n \tfor (f = 0; f < skb_shinfo(skb)->nr_frags; f++)\n-\t\tcount += TXD_USE_COUNT(skb_frag_size(\n-\t\t\t\t\t\t&skb_shinfo(skb)->frags[f]));\n+\t\tcount += TXD_USE_COUNT(skb_frag_size(&skb_shinfo(skb)->frags[f]));\n \n \tif (igc_maybe_stop_tx(tx_ring, count + 5)) {\n \t\t/* this is a hard error */\n@@ -2524,7 +2522,6 @@ static int __igc_xdp_run_prog(struct igc_adapter *adapter,\n \t\tif (xdp_do_redirect(adapter->netdev, xdp, prog) < 0)\n \t\t\tgoto out_failure;\n \t\treturn IGC_XDP_REDIRECT;\n-\t\tbreak;\n \tdefault:\n \t\tbpf_warn_invalid_xdp_action(adapter->netdev, prog, act);\n \t\tfallthrough;\n@@ -2791,7 +2788,7 @@ static struct igc_xdp_buff *xsk_buff_to_igc_ctx(struct xdp_buff *xdp)\n \t * igc_xdp_buff shares its layout with xdp_buff_xsk and private\n \t * igc_xdp_buff fields fall into xdp_buff_xsk->cb\n \t */\n- return (struct igc_xdp_buff *)xdp;\n+\treturn (struct igc_xdp_buff *)xdp;\n }\n \n static int igc_clean_rx_irq_zc(struct igc_q_vector *q_vector, const int budget)\n@@ -3895,9 +3892,8 @@ static int igc_enable_nfc_rule(struct igc_adapter *adapter,\n {\n \tint err;\n \n-\tif (rule->flex) {\n+\tif (rule->flex)\n \t\treturn igc_add_flex_filter(adapter, rule);\n-\t}\n \n \tif (rule->filter.match_flags & IGC_FILTER_FLAG_ETHER_TYPE) {\n \t\terr = igc_add_etype_filter(adapter, rule->filter.etype,\n@@ -6984,11 +6980,112 @@ static const struct net_device_ops igc_netdev_ops = {\n \t.ndo_hwtstamp_set\t= igc_ptp_hwtstamp_set,\n };\n \n+#define IGC_REGISTER_READ_RETRIES\t3\n+#define IGC_PCIE_RECOVERY_MAX_ATTEMPTS\t10\n+#define IGC_PCIE_RECOVERY_INTERVAL_MS\t1000\n+\n+/**\n+ * igc_pcie_link_recover - Attempt PCIe link recovery\n+ * @adapter: board private structure\n+ *\n+ * Attempts to recover a failed PCIe link by triggering a link retrain.\n+ * Rate-limited to 1 attempt per second, maximum 10 attempts.\n+ *\n+ * Returns true if recovery was successful, false otherwise.\n+ */\n+static bool igc_pcie_link_recover(struct igc_adapter *adapter)\n+{\n+\tstruct pci_dev *pdev = adapter->pdev;\n+\tunsigned long now = jiffies;\n+\tu16 lnksta, lnkctl;\n+\tint ret;\n+\tint i;\n+\n+\t/* Rate limiting: no more than 1 attempt per second */\n+\tif (time_before(now, adapter->last_recovery_time +\n+\t\t\tmsecs_to_jiffies(IGC_PCIE_RECOVERY_INTERVAL_MS)))\n+\t\treturn false;\n+\n+\t/* Maximum attempt limit */\n+\tif (adapter->pcie_recovery_attempts >= IGC_PCIE_RECOVERY_MAX_ATTEMPTS) {\n+\t\tnetdev_err(adapter->netdev,\n+\t\t\t \"Exceeded maximum PCIe recovery attempts (%d)\\n\",\n+\t\t\t IGC_PCIE_RECOVERY_MAX_ATTEMPTS);\n+\t\treturn false;\n+\t}\n+\n+\tadapter->last_recovery_time = now;\n+\tadapter->pcie_recovery_attempts++;\n+\n+\tnetdev_warn(adapter->netdev,\n+\t\t \"Attempting PCIe link recovery (attempt %d/%d)\\n\",\n+\t\t adapter->pcie_recovery_attempts,\n+\t\t IGC_PCIE_RECOVERY_MAX_ATTEMPTS);\n+\n+\t/* Check if device is still present on the bus */\n+\tif (!pci_device_is_present(pdev)) {\n+\t\tnetdev_err(adapter->netdev, \"Device not present on PCIe bus\\n\");\n+\t\treturn false;\n+\t}\n+\n+\t/* Check link status */\n+\tret = pcie_capability_read_word(pdev, PCI_EXP_LNKSTA, &lnksta);\n+\tif (ret) {\n+\t\tnetdev_err(adapter->netdev, \"Failed to read link status\\n\");\n+\t\treturn false;\n+\t}\n+\n+\t/* Trigger link retrain if link appears down */\n+\tif (!(lnksta & PCI_EXP_LNKSTA_DLLLA)) {\n+\t\tnetdev_info(adapter->netdev,\n+\t\t\t \"Link down, attempting retrain\\n\");\n+\n+\t\t/* Read link control register */\n+\t\tret = pcie_capability_read_word(pdev, PCI_EXP_LNKCTL, &lnkctl);\n+\t\tif (ret == 0) {\n+\t\t\t/* Trigger retrain by setting RL bit */\n+\t\t\tpcie_capability_write_word(pdev, PCI_EXP_LNKCTL,\n+\t\t\t\t\t\t lnkctl | PCI_EXP_LNKCTL_RL);\n+\n+\t\t\t/* Wait for retrain to complete (up to 1 second) */\n+\t\t\tfor (i = 0; i < 100; i++) {\n+\t\t\t\tusleep_range(10000, 20000);\n+\t\t\t\tret = pcie_capability_read_word(pdev, PCI_EXP_LNKSTA,\n+\t\t\t\t\t\t\t\t&lnksta);\n+\t\t\t\tif (ret == 0 && (lnksta & PCI_EXP_LNKSTA_DLLLA) &&\n+\t\t\t\t !(lnksta & PCI_EXP_LNKSTA_LT)) {\n+\t\t\t\t\tnetdev_info(adapter->netdev,\n+\t\t\t\t\t\t \"PCIe link recovery successful\\n\");\n+\t\t\t\t\treturn true;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t/* Give the link some additional time to recover on its own */\n+\tmsleep(100);\n+\n+\t/* Check if device is responding now */\n+\tif (pci_device_is_present(pdev)) {\n+\t\tret = pcie_capability_read_word(pdev, PCI_EXP_LNKSTA, &lnksta);\n+\t\tif (ret == 0 && (lnksta & PCI_EXP_LNKSTA_DLLLA)) {\n+\t\t\tnetdev_info(adapter->netdev,\n+\t\t\t\t \"PCIe link recovered after delay\\n\");\n+\t\t\treturn true;\n+\t\t}\n+\t}\n+\n+\tnetdev_warn(adapter->netdev, \"PCIe link recovery failed\\n\");\n+\treturn false;\n+}\n+\n u32 igc_rd32(struct igc_hw *hw, u32 reg)\n {\n \tstruct igc_adapter *igc = container_of(hw, struct igc_adapter, hw);\n \tu8 __iomem *hw_addr = READ_ONCE(hw->hw_addr);\n+\tstruct net_device *netdev = igc->netdev;\n \tu32 value = 0;\n+\tint retry;\n \n \tif (IGC_REMOVED(hw_addr))\n \t\treturn ~value;\n@@ -6997,13 +7094,49 @@ u32 igc_rd32(struct igc_hw *hw, u32 reg)\n \n \t/* reads should not return all F's */\n \tif (!(~value) && (!reg || !(~readl(hw_addr)))) {\n-\t\tstruct net_device *netdev = igc->netdev;\n+\t\t/* Layer 1: Immediate retries with short delays (100-200μs) */\n+\t\tfor (retry = 0; retry < IGC_REGISTER_READ_RETRIES; retry++) {\n+\t\t\tusleep_range(100, 200);\n+\t\t\tvalue = readl(&hw_addr[reg]);\n+\n+\t\t\t/* If we got a valid read, return immediately */\n+\t\t\tif (~value || (reg && ~readl(hw_addr))) {\n+\t\t\t\tnetdev_dbg(netdev,\n+\t\t\t\t\t \"Register read recovered after %d retries\\n\",\n+\t\t\t\t\t retry + 1);\n+\t\t\t\treturn value;\n+\t\t\t}\n+\t\t}\n+\n+\t\t/* Layer 2: Attempt full PCIe link recovery */\n+\t\tnetdev_warn(netdev,\n+\t\t\t \"All immediate retries failed, attempting PCIe link recovery\\n\");\n+\n+\t\tif (igc_pcie_link_recover(igc)) {\n+\t\t\t/* Recovery succeeded, re-read the register */\n+\t\t\thw_addr = READ_ONCE(hw->hw_addr);\n+\t\t\tif (hw_addr && !IGC_REMOVED(hw_addr)) {\n+\t\t\t\tvalue = readl(&hw_addr[reg]);\n+\n+\t\t\t\t/* Verify the read is valid */\n+\t\t\t\tif (~value || (reg && ~readl(hw_addr))) {\n+\t\t\t\t\tnetdev_info(netdev,\n+\t\t\t\t\t\t \"Register read successful after link recovery\\n\");\n+\t\t\t\t\treturn value;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t/* Layer 3: All recovery attempts failed, detach device */\n+\t\tnetdev_err(netdev,\n+\t\t\t \"PCIe link lost after %d retries and recovery attempts, device now detached\\n\",\n+\t\t\t IGC_REGISTER_READ_RETRIES);\n \n \t\thw->hw_addr = NULL;\n \t\tnetif_device_detach(netdev);\n-\t\tnetdev_err(netdev, \"PCIe link lost, device now detached\\n\");\n+\n \t\tWARN(pci_device_is_present(igc->pdev),\n-\t\t \"igc: Failed to read reg 0x%x!\\n\", reg);\n+\t\t \"igc: Failed to read reg 0x%x after all recovery attempts!\\n\", reg);\n \t}\n \n \treturn value;\n", "prefixes": [] }