From nobody Fri Dec 19 18:46:56 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010026.outbound.protection.outlook.com [52.101.69.26]) (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 1F62B25B699; Sat, 26 Apr 2025 14:49:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745678963; cv=fail; b=MVihBrpih2RhzvAgmsbZl0eUb+9g5KPjzdUpf8GZ5FhjBHp1bVKwTcCn5ScRvji92DuIIZtvAFPcWruZX1KkfBHSePbDQhcmLK7SFuuZ5LSZBe7GdLRQqtbbqI1gH2rfzoMBhtCefjgsXvHSVXqKZfbrDnRzw0AmUCvA+P5cNv0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745678963; c=relaxed/simple; bh=AbPVMBs6XoOxoDPQuwVI/StlaABKKkkCF5IR8souCdo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=LldOBC2L3fS7DQjcFB9p7Zb+ByONSdKlSBThJNW+zM+E6QDSGGwlw8qbRvWhoiikxNeQTQxEhbecjoUROxGo7PddEGoNXwTFwwN1mKgfoQTluW2hdtYpshD+DeTqoWZ2F2OT0UWVNQl0uS0hB7Dl171256U3qmrzWHLHRW0E2jw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=kw13sQh9; arc=fail smtp.client-ip=52.101.69.26 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="kw13sQh9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YulrqPWibRNGqUK98C0m5VQDIxJ4CZSJMqzfQp2McWPi0XmDDAsv4J4a6cqj/ZFJth3rIaVMDRcGZn1u9EblyXiGg9QLmpkGES8QK36iEwWW1wUbXqpuyDGWe2Fjysyyy3R48LGbMWMtO9dyAu3b0OJAxQ09DZqM97fNjWLUmGvbwkgwYEwTCh2WJKnwI3EwwTJwC68RsjR9tZpj+eP/+LiUSDMXK5Dqg2G/SnFk5A6MHn4KMnFrxswl+wamlzTVp1d8sgGJVQLKSCqmBfDzTgZwu93DFmMdEuyDfZfmLDzL8YE0D2PSHyJGVARqkhqk7P+PZfVnKBRcAE+mwSI8oA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=C+wlHc+eAHwWXQAwmULLL83EPTtJf2ejkkvtphd30ZQ=; b=ECmWZyVhgVMPoFp1X/DESCcQ+Myr8RyuOtoUHPkP9EMKnhSDSAcd1Kmm45E8HMxnjDSsHWcJlLCSQ7G1pvUsmmD6I4IIjFWgRJy9lwcHY7HLfzvRwOnKCvQZYaq3NEskAuBNQz/2b3tGHAuB9VT5Sn2leECrxKjwhXPBBcgGP2pzTcufqcWEiZpb9AGH8+EegxxJSc2UmhDzcvkQj2H5yXGt4vHQIFNVTlxf+J1ARbS443Qbi5P5Vn4Hzo8/Lk6mYnUWVcw0fpg6wmQHBGZRVyQHdVDJT/s2mZp7fsOH5ioz1LoKzXNQhVOvirJEA7mZZWpo0Zo8xVwieqUd8/CSuw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=C+wlHc+eAHwWXQAwmULLL83EPTtJf2ejkkvtphd30ZQ=; b=kw13sQh9qx6Xvo/0OctCLH+pHpT73AHgS7eH0zXKaLPiqaDyO0C1la6oFjn1WTp7fIIO4H2uMt4JOk1Rc4RZuR4T/vEhfrkYIHCBqDwkzRHqkZaNP5cB3JIN1TsZayFQ4Qgh8TE9BdsfLIpb99SnepyS1riSwuS70ZKjQGNfs+WOtUkk3yZnk3ekgASsBcPR33g8jA1uwyd6hN5H+lxP2esNR8oaKrFNQYXl84U8ehuqe8URWE0vioeK1Igo5eP2cIYCQfz7J4KtwaqHCLrZ54TkKdimErCH20k1A2AoLGQT2vMTu6wr0Drx9KHratAnp8Mfb65K2doGnlpw/gPSNg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM8PR04MB7779.eurprd04.prod.outlook.com (2603:10a6:20b:24b::14) by DU2PR04MB9019.eurprd04.prod.outlook.com (2603:10a6:10:2d4::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Sat, 26 Apr 2025 14:49:13 +0000 Received: from AM8PR04MB7779.eurprd04.prod.outlook.com ([fe80::7417:d17f:8d97:44d2]) by AM8PR04MB7779.eurprd04.prod.outlook.com ([fe80::7417:d17f:8d97:44d2%4]) with mapi id 15.20.8678.028; Sat, 26 Apr 2025 14:49:13 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Richie Pearn , Xiaoliang Yang , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH net 1/4] net: dsa: felix: fix broken taprio gate states after clock jump Date: Sat, 26 Apr 2025 17:48:55 +0300 Message-ID: <20250426144859.3128352-2-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250426144859.3128352-1-vladimir.oltean@nxp.com> References: <20250426144859.3128352-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1PR04CA0055.eurprd04.prod.outlook.com (2603:10a6:802:2::26) To AM8PR04MB7779.eurprd04.prod.outlook.com (2603:10a6:20b:24b::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM8PR04MB7779:EE_|DU2PR04MB9019:EE_ X-MS-Office365-Filtering-Correlation-Id: dbce7fbe-f288-41ff-59da-08dd84d1826c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|52116014|7416014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?EphMRiFgoDi+bRMWLaTSicKq6YmScbz+MGZGBl7jGrG82kOoyjfJAQQxTFy/?= =?us-ascii?Q?CnK5KFiScX8F9+Q41xz7ELisj7mH0ZU/s7FL6PYWj9o6OKwQyxYOGn/jkJq+?= =?us-ascii?Q?ibPWJ3Ia3iwBC+mNYm0Z+5uE7q/iC5m1JKEehRf89hfCPrSjHYnmgXPCFeRU?= =?us-ascii?Q?NzC79tHUNqJ/6TqWZyg9kaL00bniPDPE4/qzeOr7ssz+wH1ogaieGuQAALL5?= =?us-ascii?Q?nhEH+G/elEbBofdxwk5fFFvj1WxfUrayxsKEuLxrcf7fGrwgKz8RLWQcOkh9?= =?us-ascii?Q?YOkLmwFOXXvpUTGKSKMQ6yCTCFTh20onkTz3On/MmGmRVgCRrIm7UvGibtlB?= =?us-ascii?Q?KaJ4hoNwDN+0EYTGyx8+lBLtMuCjaVU5f8WTdgRpOSxK16LOJcZDsd9iNsQp?= =?us-ascii?Q?En6ryT8pnTWs5e5NkAXhxYauXHHcaKtwdOMdNxDUl/M9j3EzEsWqqbOWRq3i?= =?us-ascii?Q?96csQyR9KEozu9Ywj3sDSFZo20dEIb/NPLFpzNJMpdoJPHVVnu3mBgdccySC?= =?us-ascii?Q?0+IvZLDWitZ3ZNqZjrnqALnasqOxiuzAuTuh/LXCwo2y9Mh51jA4qjN5ZZpV?= =?us-ascii?Q?oE2DN9emjftAv5Zqu+170bTSJeDIvaEWwlbDxiBMH3tVhDKXAy6EsntOpOMt?= =?us-ascii?Q?RObxVL8QblBVECO4qFMthxjoHPTaXlB18p2Xr7ZRGmeq4sXJBEBdoAN7iXIe?= =?us-ascii?Q?UDuO118bNJSdOlSdYNAQdReKEKgafXJu5f3j8cSP2t5piYfsRtBuAE1zzYE7?= =?us-ascii?Q?6OY64FLPeTSsDZpTXX6ouz80ukD52sn2W8xY6duzdMlWFbGoYNwv3iFfAxDM?= =?us-ascii?Q?En5nmRNH2LmHrTnvNyKHHvYUq8Sqqea0d7PrlLdOKFSkyn/3EJ6/QUl2ondm?= =?us-ascii?Q?+ycRnonRXWW3ZW7lx6Mdaccf8sW8lIipb4H33M+4/K+XBRSluKwe7yoNmhWT?= =?us-ascii?Q?X6ZZdgXLHNEHBuSwDxU4oBHUnk3vgRJWG2smcSFuNunZxlYc63MSOdOMspXw?= =?us-ascii?Q?1yVpMsvftnT1VSlarMdrqglsDWEyoONQR3RZWXrRGcQ5b3t6weNVTluv63u3?= =?us-ascii?Q?eNpuvg87HEbUa4GTEFR72uozUEWGVj9f1m4qhR62YLvJFr+ImOSyiTz8nICS?= =?us-ascii?Q?OrqrOGAdPvkJD+Cl+lLbY5g7QQOo4gkTbc9QTcv8+XbT0woiBzbf5s9ti/6J?= =?us-ascii?Q?PwKt3XumZouxZUrHQW+wI3sOzBDyD1kk4av7pN43Udt+/JQjXsCn/5rae7WL?= =?us-ascii?Q?Pv+Y+qB541C0UhRxh6YpeRrUOFeos9LULLzOopDVJfngNAdWPqzV7OfUclT9?= =?us-ascii?Q?JeeXJPHlD+2/KRCuRLsjlD9pzkQqYWXHD7PhBqu13DF3POMcE3rGcShJmNcx?= =?us-ascii?Q?bt7kai9FKoZOVxog0KvJM8KF5figeFBtN6de93TCcQk2W0UCmw5uExZu8exa?= =?us-ascii?Q?iIUKj0zne0eho+Bk0RHIvRFD5NJ5EGH5U996ylBiahW30dWEZuobLw=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM8PR04MB7779.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(52116014)(7416014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?r++K/SEOrgoQ73n+DzeqkCHsXVP8/tQab6uSWmbXbPCAdWL5WxR7WwR55Yvm?= =?us-ascii?Q?6RyggTuWJP/jSXMt04b9HO8OB0Xu1P7iKaLg2KRsefsNEKWh73QBk0MTxZpm?= =?us-ascii?Q?XPBsffnoW9SUFR91d9TvRQMYYxij3kzVebraQerAtS6QR8AzzjrY0AgE5jjK?= =?us-ascii?Q?qlIkZDt9IbHDQzF1zq6TXvvIOyHMXPqkYeFSBOJjL4VdSwbRYFj/8tO9czSY?= =?us-ascii?Q?SXfVIQx3HzGgq6p4tLBVAC3NF7cikLIDO61A6XLww/4HGtOuF7lC15qKAZ62?= =?us-ascii?Q?lq/hwLLNVizPdoKA7fXLovO9Dlm5cv8x9M+Lmhw+3yP//G+wNRL3h/svkmDV?= =?us-ascii?Q?QcyoJxacXIoT9LxJ8XBNJC/L1MskZh603kS1smURav9XT54KHjUEL0wBjlGQ?= =?us-ascii?Q?KwsMgv4EvwNeKsH333BrKlEWJK+MFWXYnv7v1AhzSepEyL1rH48kPRyG/OPD?= =?us-ascii?Q?EXoufL4xqwgX+pHbByjSw76Tf9uFv1j++KmINr66rwvDKK8Wde1U/PvDAVRK?= =?us-ascii?Q?Rtd+QnbtzbcqKf1KMoTNsYmzLDbGKqoPDt3xI+uZN6HlD0ntWkhXDfb+P/MR?= =?us-ascii?Q?jheX6gpCtX+hVsCHOPBDu1up0JaXroh+x/LGbVXfQJus1rvHTkBU2XJ+bvGz?= =?us-ascii?Q?s51DBgHbga970YxhMCupmeBl6n4olJzwNCz/HM6j1jg+OQIo16eW/ggWrZS3?= =?us-ascii?Q?icDQOCdFnUiyOlbIh0GTed9muMnsMxzFmUuF5S3dZUB+y8od9FHv/vRwhHUs?= =?us-ascii?Q?yhmBv1Wd0orF6QWo0qQAQdyWbvli8UA2bsa1U9Xqa7Z23irmig/hhYLghHws?= =?us-ascii?Q?4eAdFjYPsnB7/WVzT7VET9t5bnC+My1REhr0PSVNd+PHbV+btx1Lwc74k6Kv?= =?us-ascii?Q?ppIqAH8y7C1VfVwhJHGxYGNGohj3irjxlgtsmfpfABcEOw5KZGmbzPqmsoCV?= =?us-ascii?Q?Rghhvg2lBQ91fXthw1K6CBTALfmWwOd/LA7LIwxIiHCpDaPsHnLSoru5OOSf?= =?us-ascii?Q?SBuHITH49Ond/EEHlkFwYG22h301a6gfZ/Ignqqx9GMTCZN0khf7Wt3eITdz?= =?us-ascii?Q?aXc+H1TgPowpX7iXnGtSbdlgZHBntcOujF9ayiqibzjrIT9gEF7gu+Dr7WGs?= =?us-ascii?Q?u0ipa3n+B1mW7bWmFMrpzVyl2M0UZx+nv9PuDaksFHYxU3mf0jPJICpqT7cm?= =?us-ascii?Q?1gWtKhurTp99qymRe3XhsXQQoA/dTAPvsYSd0WV6NM3MFGFzcSaQg5WSGBAa?= =?us-ascii?Q?jsKpdIuJhQRf4qS5ggcaswOohsUzmWkp5okT5ySt9pkSfPP7xJWsTM4TbgCR?= =?us-ascii?Q?UFyrGAijE7Rm7K6Ou4b8TJiKIDOrSpVPY+Kk8Yoz1injk9cdI0ZHv6geZ+aA?= =?us-ascii?Q?vPW39/RBforXxtZk+Tcz5XR9tIIQtSnF1+28twCJ6dEZbRAhXKNrWIMhhlaT?= =?us-ascii?Q?lQ1CNpideBJeR+DqWSm3l+V/QmhOKt24o0LvELS/HRICDvptwJqQI0Wa+KMN?= =?us-ascii?Q?NRmhrb+On3E2pZopm4eo6JWW/iDGDa73JkrALOnSzUPqqeXeYVVnvnZuQ8IH?= =?us-ascii?Q?6sRedgYm2oaY3NkX2aZprFARnMwKhfS9vAhuVoX6YaFUVXzSfsE7LHGwe2sf?= =?us-ascii?Q?gA=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dbce7fbe-f288-41ff-59da-08dd84d1826c X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7779.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2025 14:49:12.9683 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WFHETtRU6dtN+VO7yffnbAVplaD5JlatzZh9mR8VLmL8VBWM/+PmrqUHgOerBTOKCwk+gsw4uxD7upUqyl68nA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB9019 Content-Type: text/plain; charset="utf-8" Simplest setup to reproduce the issue: connect 2 ports of the LS1028A-RDB together (eno0 with swp0) and run: $ ip link set eno0 up && ip link set swp0 up $ tc qdisc replace dev swp0 parent root handle 100 taprio num_tc 8 \ queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 map 0 1 2 3 4 5 6 7 \ base-time 0 sched-entry S 20 300000 sched-entry S 10 200000 \ sched-entry S 20 300000 sched-entry S 48 200000 \ sched-entry S 20 300000 sched-entry S 83 200000 \ sched-entry S 40 300000 sched-entry S 00 200000 flags 2 $ ptp4l -i eno0 -f /etc/linuxptp/configs/gPTP.cfg -m & $ ptp4l -i swp0 -f /etc/linuxptp/configs/gPTP.cfg -m One will observe that the PTP state machine on swp0 starts synchronizing, then it attempts to do a clock step, and after that, it never fails to recover from the condition below. ptp4l[82.427]: selected best master clock 00049f.fffe.05f627 ptp4l[82.428]: port 1 (swp0): MASTER to UNCALIBRATED on RS_SLAVE ptp4l[83.252]: port 1 (swp0): UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED ptp4l[83.886]: rms 4537731277 max 9075462553 freq -18518 +/- 11467 delay = 818 +/- 0 ptp4l[84.170]: timed out while polling for tx timestamp ptp4l[84.171]: increasing tx_timestamp_timeout or increasing kworker priori= ty may correct this issue, but a driver bug likely causes it ptp4l[84.172]: port 1 (swp0): send peer delay request failed ptp4l[84.173]: port 1 (swp0): clearing fault immediately ptp4l[84.269]: port 1 (swp0): SLAVE to LISTENING on INIT_COMPLETE ptp4l[85.303]: timed out while polling for tx timestamp ptp4l[84.171]: increasing tx_timestamp_timeout or increasing kworker priori= ty may correct this issue, but a driver bug likely causes it ptp4l[84.172]: port 1 (swp0): send peer delay request failed ptp4l[84.173]: port 1 (swp0): clearing fault immediately ptp4l[84.269]: port 1 (swp0): SLAVE to LISTENING on INIT_COMPLETE ptp4l[85.303]: timed out while polling for tx timestamp ptp4l[85.304]: increasing tx_timestamp_timeout or increasing kworker priori= ty may correct this issue, but a driver bug likely causes it ptp4l[85.305]: port 1 (swp0): send peer delay response failed ptp4l[85.306]: port 1 (swp0): clearing fault immediately ptp4l[86.304]: timed out while polling for tx timestamp A hint is given by the non-zero statistics for dropped packets which were expecting hardware TX timestamps: $ ethtool --include-statistics -T swp0 (...) Statistics: tx_pkts: 30 tx_lost: 11 tx_err: 0 We know that when PTP clock stepping takes place (from ocelot_ptp_settime64= () or from ocelot_ptp_adjtime()), vsc9959_tas_clock_adjust() is called. Another interesting hint is that placing an early return in vsc9959_tas_clock_adjust(), so as to neutralize this function, fixes the issue and TX timestamps are no longer dropped. The debugging function written by me and included below is intended to read the GCL RAM, after the admin schedule became operational, through the two status registers available for this purpose: QSYS_GCL_STATUS_REG_1 and QSYS_GCL_STATUS_REG_2. static void vsc9959_print_tas_gcl(struct ocelot *ocelot) { u32 val, list_length, interval, gate_state; int i, err; err =3D read_poll_timeout(ocelot_read, val, !(val & QSYS_PARAM_STATUS_REG_8_CONFIG_PENDING), 10, 100000, false, ocelot, QSYS_PARAM_STATUS_REG_8); if (err) { dev_err(ocelot->dev, "Failed to wait for TAS config pending bit to clear: %pe\n", ERR_PTR(err)); return; } val =3D ocelot_read(ocelot, QSYS_PARAM_STATUS_REG_3); list_length =3D QSYS_PARAM_STATUS_REG_3_LIST_LENGTH_X(val); dev_info(ocelot->dev, "GCL length: %u\n", list_length); for (i =3D 0; i < list_length; i++) { ocelot_rmw(ocelot, QSYS_GCL_STATUS_REG_1_GCL_ENTRY_NUM(i), QSYS_GCL_STATUS_REG_1_GCL_ENTRY_NUM_M, QSYS_GCL_STATUS_REG_1); interval =3D ocelot_read(ocelot, QSYS_GCL_STATUS_REG_2); val =3D ocelot_read(ocelot, QSYS_GCL_STATUS_REG_1); gate_state =3D QSYS_GCL_STATUS_REG_1_GATE_STATE_X(val); dev_info(ocelot->dev, "GCL entry %d: states 0x%x interval %u\n", i, gate_state, interval); } } Calling it from two places: after the initial QSYS_TAS_PARAM_CFG_CTRL_CONFI= G_CHANGE performed by vsc9959_qos_port_tas_set(), and after the one done by vsc9959_tas_clock_adjust(), I notice the following difference. From the tc-taprio process context, where the schedule was initially configured, the GCL looks like this: mscc_felix 0000:00:00.5: GCL length: 8 mscc_felix 0000:00:00.5: GCL entry 0: states 0x20 interval 300000 mscc_felix 0000:00:00.5: GCL entry 1: states 0x10 interval 200000 mscc_felix 0000:00:00.5: GCL entry 2: states 0x20 interval 300000 mscc_felix 0000:00:00.5: GCL entry 3: states 0x48 interval 200000 mscc_felix 0000:00:00.5: GCL entry 4: states 0x20 interval 300000 mscc_felix 0000:00:00.5: GCL entry 5: states 0x83 interval 200000 mscc_felix 0000:00:00.5: GCL entry 6: states 0x40 interval 300000 mscc_felix 0000:00:00.5: GCL entry 7: states 0x0 interval 200000 But from the ptp4l clock stepping process context, when the vsc9959_tas_clock_adjust() hook is called, the GCL RAM of the operational schedule now looks like this: mscc_felix 0000:00:00.5: GCL length: 8 mscc_felix 0000:00:00.5: GCL entry 0: states 0x0 interval 0 mscc_felix 0000:00:00.5: GCL entry 1: states 0x0 interval 0 mscc_felix 0000:00:00.5: GCL entry 2: states 0x0 interval 0 mscc_felix 0000:00:00.5: GCL entry 3: states 0x0 interval 0 mscc_felix 0000:00:00.5: GCL entry 4: states 0x0 interval 0 mscc_felix 0000:00:00.5: GCL entry 5: states 0x0 interval 0 mscc_felix 0000:00:00.5: GCL entry 6: states 0x0 interval 0 mscc_felix 0000:00:00.5: GCL entry 7: states 0x0 interval 0 I do not have a formal explanation, just experimental conclusions. It appears that after triggering QSYS_TAS_PARAM_CFG_CTRL_CONFIG_CHANGE for a port's TAS, the GCL entry RAM is updated anyway, despite what the documentation claims: "Specify the time interval in QSYS::GCL_CFG_REG_2.TIME_INTERVAL. This triggers the actual RAM write with the gate state and the time interval for the entry number specified". We don't touch that register (through vsc9959_tas_gcl_set()) from vsc9959_tas_clock_adjust(), yet the GCL RAM is updated anyway. It seems to be updated with effectively stale memory, which in my testing can hold a variety of things, including even pieces of the previously applied schedule, for particular schedule lengths. As such, in most circumstances it is very difficult to pinpoint this issue, because the newly updated schedule would "behave strangely", but ultimately might still pass traffic to some extent, due to some gate entries still being present in the stale GCL entry RAM. It is easy to miss. With the particular schedule given at the beginning, the GCL RAM "happens" to be reproducibly rewritten with all zeroes, and this is consistent with what we see: when the time-aware shaper has gate entries with all gates closed, traffic is dropped on TX, no wonder we can't retrieve TX timestamps. Rewriting the GCL entry RAM when reapplying the new base time fixes the observed issue. Fixes: 8670dc33f48b ("net: dsa: felix: update base time of time-aware shape= r when adjusting PTP time") Reported-by: Richie Pearn Signed-off-by: Vladimir Oltean --- drivers/net/dsa/ocelot/felix_vsc9959.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelo= t/felix_vsc9959.c index 940f1b71226d..7b35d24c38d7 100644 --- a/drivers/net/dsa/ocelot/felix_vsc9959.c +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c @@ -1543,7 +1543,7 @@ static void vsc9959_tas_clock_adjust(struct ocelot *o= celot) struct tc_taprio_qopt_offload *taprio; struct ocelot_port *ocelot_port; struct timespec64 base_ts; - int port; + int i, port; u32 val; =20 mutex_lock(&ocelot->fwd_domain_lock); @@ -1575,6 +1575,9 @@ static void vsc9959_tas_clock_adjust(struct ocelot *o= celot) QSYS_PARAM_CFG_REG_3_BASE_TIME_SEC_MSB_M, QSYS_PARAM_CFG_REG_3); =20 + for (i =3D 0; i < taprio->num_entries; i++) + vsc9959_tas_gcl_set(ocelot, i, &taprio->entries[i]); + ocelot_rmw(ocelot, QSYS_TAS_PARAM_CFG_CTRL_CONFIG_CHANGE, QSYS_TAS_PARAM_CFG_CTRL_CONFIG_CHANGE, QSYS_TAS_PARAM_CFG_CTRL); --=20 2.43.0 From nobody Fri Dec 19 18:46:56 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010026.outbound.protection.outlook.com [52.101.69.26]) (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 D09F725D1F4; Sat, 26 Apr 2025 14:49:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745678965; cv=fail; b=qoOfpb+PDXa7whak7fION0IB40isZ4UE2owPxLDWNyNnLGCmIcUQhl29vfGHvZxM8cMj0X1J+vc62uhuejAdfWQAfywadQM8YVGVtXdc4kBtBHjhZdDBQ7npZjObmd/qqfquT1l+R2tFtX2uWVHvBnt9d7YFtzr3E065q4Fy3iY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745678965; c=relaxed/simple; bh=lnEMYSc0uDmo4TYzWBvxcB+hsw7KI4jBaQWAWHBsfp0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=fMFFUGUj/btWpcLe4iRuA2frS9v1S/BdiPvJhSpgOISZA+3w2JXvTZCKXIydn4EU5413kWNXt4JQdlNWtNRI+rjGK0az5DpU7oZn2t452/G6vMjEeGyOFNVEMUyk93LKcUZNYFcUYInLwnenzr/9qKbuVWWWIj47lu+vGbJEWkw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=lMPWlMTv; arc=fail smtp.client-ip=52.101.69.26 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="lMPWlMTv" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mpncSCGN9mK5J1aJN3md46voKRkrdha3z46sCL8sIulkslaV/aglC7u6GQ0EutoiexDdndP6WOI7rRjMMFLlGal7/NjlbnTj0tJ8V9R9y/ejyDGHo6dXY0Gzcdee4Bw2sjvkMTvltY5LuAOsGELstGymArH0gfYRuYFmWcnG0QQsF8iEy18EO4c6k+jZC0dXHndDwQDXJ4Bwf+dGA9wvDYub5NofXBOVa5d2CkWZQD418/JstNIFi4Qur0hlXjcOO9rOs+aKWLbMCF+AxSBa3Wky80pD1pKHLuA5RcAjnTrm2HHmxPy34A+m3+KmR9WC1zE8sYqv2vViyJpsPVi6Dg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=kWIVsqB58uE+ixZgtvNd9dmIfy01pHPSY6r4cvgYMyI=; b=Vzm74ZhitC0tzqMV3xpnZ+kscRdYKvlK6V07OyONzfYvGuWJWLxVZALWrr3Y5z4iVuGSosgxhH6NhXic66XM6TqxWyw3NE1XBfl4+EeWwv9krGhArs5YVmzx70Qi2Kp4sB2whYpDjAg853QOv55DwbRgENTHecyeKdoASG0l409d3ZAupkqZu1k6kmtC76mc1Vn7fnXSWZZAfL3CeYZY/3Fznt+za7Y2648sweVsLUuHC3WKCi24DqEh6ZHoXZbTumnMq7s7WHgZMVkImBo9g6AcNfbO1oxtzpvvdnEhseibPMHoNMV4yPzZionK6Xioz0V9sH2K1qwinWIJn3Dgjg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kWIVsqB58uE+ixZgtvNd9dmIfy01pHPSY6r4cvgYMyI=; b=lMPWlMTvGvEXhAaz7y6nWESBTyaSfEP5Xz+WOCUaL/w1JxZzFc/HlGfF0Sv792pC8ktYyea2ppbd6hMeP+hMpXx6y/f+vsZ53laJIVKDzPe/Lh14nCAYhAncI7viMOEzVjVEnd/xTXxX238Bc/OIKdZ5pU51N630O1LD34GXLxbs7TxiB6kLTh1ZakLbbUfKuzKtv1GncQKWA5OCxxgdbx43Lkw28Uf9V+HLNAOr1yGLfJFPyiE8IWJU7W2+/Dk+gr0E6e3PXBpOwakyVTRfRh0/LCaPxIithAEffv81I6GpLmWNtldc6mAuRedVQW11tSwrI9XxY/2HFpghxTYjrQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM8PR04MB7779.eurprd04.prod.outlook.com (2603:10a6:20b:24b::14) by DU2PR04MB9019.eurprd04.prod.outlook.com (2603:10a6:10:2d4::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Sat, 26 Apr 2025 14:49:14 +0000 Received: from AM8PR04MB7779.eurprd04.prod.outlook.com ([fe80::7417:d17f:8d97:44d2]) by AM8PR04MB7779.eurprd04.prod.outlook.com ([fe80::7417:d17f:8d97:44d2%4]) with mapi id 15.20.8678.028; Sat, 26 Apr 2025 14:49:14 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Richie Pearn , Xiaoliang Yang , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH net 2/4] selftests: net: tsn_lib: create common helper for counting received packets Date: Sat, 26 Apr 2025 17:48:56 +0300 Message-ID: <20250426144859.3128352-3-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250426144859.3128352-1-vladimir.oltean@nxp.com> References: <20250426144859.3128352-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1PR04CA0055.eurprd04.prod.outlook.com (2603:10a6:802:2::26) To AM8PR04MB7779.eurprd04.prod.outlook.com (2603:10a6:20b:24b::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM8PR04MB7779:EE_|DU2PR04MB9019:EE_ X-MS-Office365-Filtering-Correlation-Id: 9d39d643-83a2-45a9-7dc2-08dd84d18323 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|52116014|7416014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?DYBJW+RHMmpEvXAvlSUbK62NwykeUoe+4G24gOU2AW+D7CT+QZgwlC44cg/x?= =?us-ascii?Q?GEkUmr+abIq56RWLiYJRFk12xbWlX4G10v3JTGFYfY/yBhczM4GuFUf1vciW?= =?us-ascii?Q?URXzZVQ2Ic/oxeJlxSEujUNTAEstjrGzrPUvu4JnmfXD6pkA4/2Yyx1wNEyD?= =?us-ascii?Q?4mQriREgWObU4xw3ma1+0XMxOdvWNMN8kaz/HSHe8ZgK8MliwGrIVaUku8HE?= =?us-ascii?Q?z1J3yJ4QXd5mw1oPSkvak5Ga7WCSVdro8yD5GwZs6sBmIRXtaMNLzD1Qpkuc?= =?us-ascii?Q?d6ci5xuYviHrCNSp8BYEGAAyWsxkLFDCOxGP+fo6C47gZezhhuD+RsKoUTAS?= =?us-ascii?Q?KFflkv3mnTqmngusBdZ+VfVX/WlcNWGFXVz8KEIjBhTkNjMuXyYiBtHEfiwB?= =?us-ascii?Q?qEqWXxt/kOWdAcz62UZcSe0XZkELRmv2y0W+287nbZB+1+GM4v8aQ1Oe7BKz?= =?us-ascii?Q?5O64qNIFilQyh1SBNEKrpTPBRbxt5FAxwJoXTI1IfRtKCLPJgClW71mMc4fA?= =?us-ascii?Q?Z365kGG5OEN+e1yh5pOb1ean1Dx/aXAcRM6aI2ECRe6g5ZPWbqAE4F9RtaYg?= =?us-ascii?Q?vB/XXAXUXkAWit4GWHOeLeGUqqFNnYswi5W7wxoRqbOzydVDKkNL8cfbk+m1?= =?us-ascii?Q?uXSPBYPO1ZNQtUVPmQjGoI7igeVySwyzPmBT7D081BTF2XbpZ0aqTZ60iXYz?= =?us-ascii?Q?h8L3FmBkfxswhH4Msp7lMAjdNenvqEGH5xuebwQ3Z2gStvWJX5y4hpWCAjhl?= =?us-ascii?Q?sFTBbVs3+ClVMXyQzvZCYgeoiVye4riL5I/Xa9pJGgb9HUp/L9GtwTSfT8ep?= =?us-ascii?Q?Hrb36flL3XoQd2UPnI6bPqBtpLIhipAVnmjzQpsfID/0fBFVMcf2rPSy4kEK?= =?us-ascii?Q?wG88iD9jEkATY8eNehok3dla3FaVzYJspnVglkR9DKSMe7Wu3mQhmbfKa3jd?= =?us-ascii?Q?KW7M4tFvq5CnqZGcAnJp9ZpLYaS2eq10gNfGf11POB8RnFhrX+GCnVknRqTZ?= =?us-ascii?Q?Cxu2cUzJsKJZx47MWDUuT8kvuFNAd1LCdMFUWf6gRKFZoTjSVlz2+3q8bS0/?= =?us-ascii?Q?6o1hcUbuImHlykkPymag6iw1Ofz1UmaTB5GOTqjRR0ALE+AhpWoOf17gYzRc?= =?us-ascii?Q?S0b/u+sisVPDX81HagZgkWfFSABioxA/Hl+TJiZDolJCL6J8TXf0uB3bL7Ys?= =?us-ascii?Q?l4WKJnwlRVEExQStjwpCCNGyZ5PGsOgaP8uFjvBaj6OsofiQmGgWvP3WKvPr?= =?us-ascii?Q?c5Hwm+oB3MjidmAZu5+JPwYifhrFt89orI6AUmFnBJv2jZJeZQWplDLgNw6i?= =?us-ascii?Q?S1yiTBMwP01/Q+YrYyNtHJyp83C9H/TmZ3OZje7SuwhKkcv2xFuTRSWXUbjZ?= =?us-ascii?Q?wlJ0gQ/z3da1g2pkgVhJgFvpSMX+qWOKUalx/XO4DLzSTEHBGB318adteD8F?= =?us-ascii?Q?UbguSvqj5qcKQdhKHczBqRTNOoQ/wg4v0dbBmb1KnrOgIgBVwnldcw=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM8PR04MB7779.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(52116014)(7416014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GexYAHzEXwy1SX6EX/f8bWSXQ/XPrXQJRiB5wjA+Y1I/IwtYOEAPmbtF+12I?= =?us-ascii?Q?8SOxR2T2RrI7jLVdU2JUj9BadsLbybFtmr7FYlIUCGCLRQMOoPqhGikQ6Up/?= =?us-ascii?Q?lT7O6RzmOKzo6479HjhgwZhkGnM5QEVAaXA2b7hzncFf1M8gccoTub5KELF+?= =?us-ascii?Q?UBqtGTH0yq80hGCMWATjupiedGtB5B6bfEzCNtZ0oVLYwwqq9KyL0e0OclJJ?= =?us-ascii?Q?TA3noMsiKwO22lD7cwhFMgcDjUOmOKpfDH7lL6pu4lFBVKXWIeXABbiE5PHd?= =?us-ascii?Q?bJFeK8GzGUw5gna7aGqE9FygM5urJyh9ViyfF9f8gjPzSo/mv7RhhWvH9K+0?= =?us-ascii?Q?eePhw1nL9CguSBPEwz95LxqSZ8HVGpyyfLkYIrQBpf9U3MOoDEGXs+jZlF9r?= =?us-ascii?Q?BwsD/nYByxSOYt07CVNPaCrufbnOKS1op4YVcDFhFKi8Uymsz/zA8d7289FT?= =?us-ascii?Q?mpJ2jlMRd6oIspJ0i+5FbalS6m97hCg9eYfQdZHndM3o74MbFnVxze09SZGg?= =?us-ascii?Q?5wu6EOwc0+CubrnopBBDo+ZkM3tGR7H/NdZmhuA/vGI1wyip5NWjFaID+QF/?= =?us-ascii?Q?Q/sQ6+IBzP8zL+2Jj1D2S4LD8T99D0iTKQQv11R7tTWrNrz0xTRDzyrDNmM1?= =?us-ascii?Q?xLUUGg9JbqCZDAHP4zDnL/wjodsXIPtjvrB45ke6XfEH3wTBdVsxlHi39Ys/?= =?us-ascii?Q?pAtaPwWyu1MamXwgk4cLObGGajisiRRUynDq2o+Tdpz3HbEyhgJpo7Xa74Pl?= =?us-ascii?Q?fDSx0GCiw9Y24s0EpWf6XAp7A06vcwWcQhWo8Ewhjj0ahVGOLopPf/+u+9VG?= =?us-ascii?Q?nBNrI8YInsDr1oxH4wufGHD2a4Bqe+DjXKm4N5jNbJF7pfbaPArqHqUpc/It?= =?us-ascii?Q?tnF1NTfJg8Hf7XblCcaGj9IBUyrpJ1yyYfc/f1G5qJ2+e65N2m2HwyuQyVgd?= =?us-ascii?Q?4NV4PArxNSAr/RrJkI3eFNmVwa0NON+K+p6WAosbsA1CyC5f9z1gf+cvMGqb?= =?us-ascii?Q?pB6F8hzBe2NHXOVF/FQ5ii9Nomm57Q+vvrndY8z+pB8GdoHFpwpUYj8/SKJz?= =?us-ascii?Q?5Xd8HNZThSGYdrPqNh0PHYcHMFGb+kiaZyS1mKwTchMAHl6shHcmlzqPx9J5?= =?us-ascii?Q?I6lVMblN8fphtTE+B3B7RcGmF8daOuu4elh9+HHKtRslh+aZFCwFsZx16eY0?= =?us-ascii?Q?tG4oOkuimtV6e4juL4G82Dop28/gkAuShyta5yyEiO2tORhctrtfSh+ItiPw?= =?us-ascii?Q?oI6SkKReIqkRPEuj2uef2sLVxwzce2hjKGEXiRUs7Z1vpgDg2YpNrncna8Os?= =?us-ascii?Q?G6BPI/fcy3eHU8uOa1MPa8TMvFxIuWM8fcWzmMBLD0kZpUiYr10c2Lk+h4Y1?= =?us-ascii?Q?YNjSErANL/eHPyY8klOfoSjYupBsFQxVqMUf3u7jirJ6HZ0X+2BaaqAH6SIX?= =?us-ascii?Q?FplbZ13XcPmYsDb+31wzSuNopYBb6j5hm4N/NUuidsbW2JjZvbo883I3sUGp?= =?us-ascii?Q?/LGP5RllMCPNYRfmWBYPh/82Iv2vBlwQ9paPmphUvccwr1ggjC5zuBfG1gkI?= =?us-ascii?Q?uPfu5n0SXKUXI2SOGX82aQ7XWLHjchM59GQyv0N7QVYbf43G7fWUbRUTb3YV?= =?us-ascii?Q?Ng=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9d39d643-83a2-45a9-7dc2-08dd84d18323 X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7779.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2025 14:49:14.1469 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: xgu0cYFoGh8obezO8H0GLECmmb0NvYZwuNfLT/aqYQG63etKTlRAEuc/d4vUPvBVLTrxFBWdgLYjm/CSc3MliA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB9019 Content-Type: text/plain; charset="utf-8" This snippet will be necessary for a future isochron-based test, so provide a simpler high-level interface for counting the received packets. Signed-off-by: Vladimir Oltean --- tools/testing/selftests/drivers/net/ocelot/psfp.sh | 7 +------ tools/testing/selftests/net/forwarding/tsn_lib.sh | 11 +++++++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/drivers/net/ocelot/psfp.sh b/tools/tes= ting/selftests/drivers/net/ocelot/psfp.sh index bed748dde4b0..f96a4bc7120f 100755 --- a/tools/testing/selftests/drivers/net/ocelot/psfp.sh +++ b/tools/testing/selftests/drivers/net/ocelot/psfp.sh @@ -272,12 +272,7 @@ run_test() "" \ "${isochron_dat}" =20 - # Count all received packets by looking at the non-zero RX timestamps - received=3D$(isochron report \ - --input-file "${isochron_dat}" \ - --printf-format "%u\n" --printf-args "R" | \ - grep -w -v '0' | wc -l) - + received=3D$(isochron_report_num_received "${isochron_dat}") if [ "${received}" =3D "${expected}" ]; then RET=3D0 else diff --git a/tools/testing/selftests/net/forwarding/tsn_lib.sh b/tools/test= ing/selftests/net/forwarding/tsn_lib.sh index b91bcd8008a9..19da1ccceac8 100644 --- a/tools/testing/selftests/net/forwarding/tsn_lib.sh +++ b/tools/testing/selftests/net/forwarding/tsn_lib.sh @@ -247,3 +247,14 @@ isochron_do() =20 cpufreq_restore ${ISOCHRON_CPU} } + +isochron_report_num_received() +{ + local isochron_dat=3D$1; shift + + # Count all received packets by looking at the non-zero RX timestamps + isochron report \ + --input-file "${isochron_dat}" \ + --printf-format "%u\n" --printf-args "R" | \ + grep -w -v '0' | wc -l +} --=20 2.43.0 From nobody Fri Dec 19 18:46:56 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010026.outbound.protection.outlook.com [52.101.69.26]) (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 18D2F25D534; Sat, 26 Apr 2025 14:49:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745678968; cv=fail; b=bhVPp1/1hCCj0arkwfMI2AFagB2u0gbqS9/3C8kFK+KulphBSt0TMpHJpKCVCGmscqGZLklYWftPSMn68PAM1+Rqir3W2tGoQDcrLyn5veO7RRJ0Jvw8Zu3Go9ab2mgXMZtuKM6HxFxSXeIduQmfbEIZ7dkEQ509CA/kkhqlIM0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745678968; c=relaxed/simple; bh=fUFWSX2AKWEIGYTwuFAHpp6EZ/Es+q1u2AtAHz4CNmM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=aHi8/5+XGuSW7e+3DqNh+q6d2NPlIrXX3+BQrCw3nxVvs+jXedFM8mcCAPf5Z76K99LcmNb7k8m1JuJTXORLMULi5+2KNmH/hJl+oiDJWhzfYCMyyk53CP3sFBrPGrUB/MnP0aSsLuEoMcnMHLPrQaFLVcUq4oG8dUoTTqjXPUA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=JOHk+tUE; arc=fail smtp.client-ip=52.101.69.26 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="JOHk+tUE" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A4+5Jom569jg5t5RDIX4trcVVN4JPKSGuHCIgjfW7PGFlqJB0+iCgsx9dvqI2E95QuJt+B6s+Kw1Z/ZuYVL/uz2ya+1NIu6/3w5ecPne4jNifQ8HYUR6iw/FrZordkV42h8rnGWnoEUsH9fYbvpTxdVvix13kR5KRF0bt7KwUmO+1rHwgkcEYmpNu5ION9U9r3DchsZ+sWVs5Bf60i1UHnb1juNeWJwdmtRxp8CBRjla9MtUxX5ElvQ/3aKPKwzxXOaEuDon79kjbuq9XHliv38aU0FbmMNQZ9/1ImgIUxq9JP89ruifMN1feqf+DsV66g8EB1jyhwXPURTfwD3gRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=fzGVlmcucbyEYDTN89eB1We7zilEXXSY3sBwPJbj/4Y=; b=Qhz/5NVIDDhcjAtOul9tK75s5eYcS2kcm87Wf7APGRwfOdK/YIx5rtHuVWonABZQllh/ailR4LS/lg9oWDKEDWEIXYf1ktj8uT2hDV/qKu9IcP99AWFx2Sw08nI6qlfqh/MyCcM2mwDeIjcxBaEpRmVXrmTsk2nVGxnp//r8Ocfw7VCylbtU6pFsAGcGbezbcxVpLqCuxoXibgbt4to5GxaUx3kVWvQKlBu0q17Tfg4AdvDKuQd14STtGT0o3UO78LkAFoAvMICMkz+z97Vbr++4dVzqJd80SzvtNb1GqQ+VvKdl+GfEvL+JR1KuPkLd4lBmCX/MM9N64btEMngTnQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fzGVlmcucbyEYDTN89eB1We7zilEXXSY3sBwPJbj/4Y=; b=JOHk+tUE92v7vJppVE+wsiCDzikafRUVDWhO5OY6vKcwlJjbcMLhq1Joix2cUoRBrSHWvj01U8q36LRu7NsiieTvTDdS3/+PasJzDnof7L9+l6+C2QM4SqvwEJAXSOwTmhRnqeeFV7jKlzNVYSiFjLCODxWc5t4X0RLnCl4bIv4nCCeC14e7Dswjf47E4uF9iIMKiAChn6mNMIfr0uvDfDnk6N1/PPnyimwH72s8ZZkCMPkVS08iuAhZBIXKl93amdA1uJ2NCjxaTrJUgjG/fDq8QyJENOQE5mh0x4IvsA6/iiHu+yEG09hSND7wNls1suTCP+qQAypMXeR4NdR7eQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM8PR04MB7779.eurprd04.prod.outlook.com (2603:10a6:20b:24b::14) by DU2PR04MB9019.eurprd04.prod.outlook.com (2603:10a6:10:2d4::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Sat, 26 Apr 2025 14:49:15 +0000 Received: from AM8PR04MB7779.eurprd04.prod.outlook.com ([fe80::7417:d17f:8d97:44d2]) by AM8PR04MB7779.eurprd04.prod.outlook.com ([fe80::7417:d17f:8d97:44d2%4]) with mapi id 15.20.8678.028; Sat, 26 Apr 2025 14:49:15 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Richie Pearn , Xiaoliang Yang , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH net 3/4] selftests: net: tsn_lib: add window_size argument to isochron_do() Date: Sat, 26 Apr 2025 17:48:57 +0300 Message-ID: <20250426144859.3128352-4-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250426144859.3128352-1-vladimir.oltean@nxp.com> References: <20250426144859.3128352-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1PR04CA0055.eurprd04.prod.outlook.com (2603:10a6:802:2::26) To AM8PR04MB7779.eurprd04.prod.outlook.com (2603:10a6:20b:24b::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM8PR04MB7779:EE_|DU2PR04MB9019:EE_ X-MS-Office365-Filtering-Correlation-Id: 19e3559c-dfa6-41fa-a303-08dd84d183d8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|52116014|7416014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?jtXKRYIzXJYkbnQWuYg9zo2WYG0sjBP8SesPzYEGwxwm+oULaM3Fjf7jdwW6?= =?us-ascii?Q?l68yWsUtww8lpfgslzZbHOztfO86nugXn6jDVRqaQbCipEMLDawe1BUQTjTq?= =?us-ascii?Q?UI7Jzc5GxZ7U4/UbrnGkVzmVKOBM5jwBmQGOBeZ5lTmA2NQdI6J5L/cTrwA9?= =?us-ascii?Q?bFbrQ3o0ndqQte59jiYPhAFzcvHX87k9Fj7uCeDoEGNUI5yqgvFHtXHDoxuW?= =?us-ascii?Q?FlUf7LXDuICevmo8/SZ0iZro1AGgqq4jUpP8jgM7lJsyJdxO0wbsICvB61PL?= =?us-ascii?Q?6R7EKMUxb0/CN920MFP//XAHlhzaDseScMuvbdc9aqHXZHZxB9TsShBdwfGF?= =?us-ascii?Q?xulah6FBwBOC5aQzzXOaWU3xJemv+BetHivinfefU+fSmsVQrNHgEHXQHRLs?= =?us-ascii?Q?79qK49a24DavZI7mtx7kVv/mmqQgZPKNGLYZcjiK0TnDTB/De0wb3MGAvYu8?= =?us-ascii?Q?1b6RdQuRbEOSNAJUsLztLSswOOmwhBOByP7uExF7pGrz6vyv3HUBiVUYxIWy?= =?us-ascii?Q?me7aohx8xCfh+8sEhPk58ewmL5/aV8aQCYf9LPCyUCBKib2g4tBstbynkupN?= =?us-ascii?Q?frUI9XS5V8hhsfP6Q0/CRB2hx4DZenHF5e+EnPKjZovHXVH2Vti4NrZbGjj2?= =?us-ascii?Q?FZEH/TEtP2A3UnaCxYgCTMenTr+KJ0fRsS4a8tharFtQgx3Y70I9I2Zeq2Kh?= =?us-ascii?Q?j/zN7mayPEV7vHMnWeyFIBUJGl7TH7xWQlSt1MNOaBENzQvxhKNeDozD9gED?= =?us-ascii?Q?l2poL8vTL8ye7LoVAzuDwgizKTd6bsoKJdN1uGKVs8fXUTbq0zdnUhHewvD4?= =?us-ascii?Q?enn3lJLMsXAl8TFYJHxctIO0EVBvhfn87o0VDQHPgNX4EAr8kmq2wjOPPS3F?= =?us-ascii?Q?C3P9OIQMWMsqcfkAiz/YCR4sIP/O9K5CC+zacc5I0xr5goedKE5CAKVbZkY8?= =?us-ascii?Q?VVaeSORZhC04B9PYyxvPCSRZnEvroFj3lhfm64XTnDE2gjr6byonx0cDeoCx?= =?us-ascii?Q?skf9BDa+6+8iUSI7YuufvMELIk6Czami4H8K4MvidW3nrxaQ2XKidHAvfY68?= =?us-ascii?Q?1xHLq2ory2/SNlzL5jA8a3wjPHn/ipg/kn2sZV/TuGU5D8XYMeKCUPfN40ao?= =?us-ascii?Q?BlSRJ9vj/pO2OYGF+uYFVMvb3bIrPa/xbTXEg+hAHyeNuzGhHYViELqu13nV?= =?us-ascii?Q?0RHRNUHm6ohBGKa1phj4Jtcix9PTMSBays8UADSj/N354sEVtRc8B8hfDdxB?= =?us-ascii?Q?YvxoTwomGg1zdmf/bOhiYfO59sLaZh8SV5/mP0mxSt8bONimZN8jlgWDeltu?= =?us-ascii?Q?X8nE01Sc2S/eeMO50n5CRzVGY5U2Ddnj8nPM4K73fpanFO+ztsC+ioVdLi9a?= =?us-ascii?Q?1m/t3G/CZYIGn1UgLRsNUhehwAxwq1mVHuifV25RP9fXSJpSTXnuxXihcLo2?= =?us-ascii?Q?mRjBcxMQqCFlkYDjUztefSPo3OF1PbW5chvWOg0hon6ghGiAx4wkNQ=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM8PR04MB7779.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(52116014)(7416014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mqIALqcpUaYhvcN9nBdvUAuDffEwS/DAw9Pm+KCmz+NXjtF9YaJN39mcMepu?= =?us-ascii?Q?9Icl5ysu008Ak3/0+PXOsCW0RtG1slQukJ4GJm/c0GFQubvkApdtyyouP4Pq?= =?us-ascii?Q?7C0ApB3qkw18dMbN0LPdWAhIgF9+pQBcuqDHN355zFAU2XPsNnYx+kIeKmxA?= =?us-ascii?Q?MRL6qHoo3zzFvJySJGrU5XqbhR2ZiK+4ptLbZVPuaMOTAph1/ZU5JO3oJieU?= =?us-ascii?Q?PEiKcnVtR8AywMk+8Y6LzdJjSnEHlcrgwlqcsIF9GuWsSNXpNCXKHHQzDsai?= =?us-ascii?Q?bxUivGfyF5r0BIefLG7459LuQLT9pcRHFK5YN+BwyVbaiAU2ahHQyfwc1ce/?= =?us-ascii?Q?WES3xPhUtX8wpqnmV+ROqW9ghA57v1NZ1Jw7NSdtWxaeQan2th42NQ/EZSeY?= =?us-ascii?Q?elSeH1JwOl9gN9ns6WRHJfSuGKB6L/AJ5+6ixwAiv7E5RVPzsohjb13sv8Qz?= =?us-ascii?Q?Ardk47T5nxMYGcwIPoZ1cyUKJTo0vqGyINE9g0p6LhpJBXrG0xYGVgZ5JiOO?= =?us-ascii?Q?FoEWY5CMGX63lGCPgcPgS9BOy914UXoz0HvxS+uoi9ghKV1wrRnFMpQC4id8?= =?us-ascii?Q?rDeyHk3otxUWVIlcGrlWD/KfYX4DYX48w3KpT1mwW1P/uIas0DbmSoX5tC59?= =?us-ascii?Q?eSFJJKCbj0vBXYuXy5hg+KtZtn9jGNHlQI8UAsi9kdlGc7Jac4JlXjAritOL?= =?us-ascii?Q?59s7mLVWA9tSpAEMy0ayKzCggw4x6J5y2RGnY/ZcYTZYZHvNXn96LmelYtV9?= =?us-ascii?Q?07Tc5UxE2cOEO2Hk59Ih/yqmkJO9BuiUYREj80V+yqZ2u0nEB8tyFlEulpaL?= =?us-ascii?Q?Sc9hFaiZr0E1+vw6nO9TxCiM6s3R7XFoWirIWpCeXNMedSGrnjfPo9BuV9UC?= =?us-ascii?Q?FxuvEUZLvhuft/NwjXQQAgerlBLd5BCVsbVV4ZVxCW87mA7yk6eaYE8tRAZR?= =?us-ascii?Q?DcdGyAhIWpyElwKaVCELn7gICH5a5S7YhPCU0+3DC2yOoPqnhewHjxFBTJ8R?= =?us-ascii?Q?hWo4oATfO1x+i8b8sAXPrs1ipgRp1crcdPSQcI7V1rEOcnGMaCNkKQKpox4e?= =?us-ascii?Q?S61G27hkV1uZcVK35lY748sRDqRuqavoBKzbitcAvShhPnlwWn+JjjbRI58V?= =?us-ascii?Q?03daGQYdSFw00dpZiubc5V51azROQQYldpH1FqrZHvRMDmNFkTsWv5QT7olh?= =?us-ascii?Q?/sqCA5z3ggNXbZBoiLcZG49KiZTKErK7D7/lhPV61Eo2XczUKiX7QTnDVt6t?= =?us-ascii?Q?YgS79Zd6biPki24xc6Nbw8/YrV7x2YGk/PDD/Q8nbcNMTFsWUbVsRFVuaObn?= =?us-ascii?Q?aFTFxx+OEMO8eMMTJK7VAAYvELTmnmQSPT97i5sNK5pcLiDNbTO3EmZmELLy?= =?us-ascii?Q?IKI4KDMsVHZ9aVEbmNnF91Fuc63VBXy8mqo6kzwMJWcbAyM58GjZt7nuzIo/?= =?us-ascii?Q?sGadGdvpOEU2ecIVyaPKw8M2d9CoHTdDl5XNxF39MBz8sdzZoKUAEmDTHVBM?= =?us-ascii?Q?+dOq7E9yL9zD8WdnEQoX5mTbFb56JKFN2U73xd33XWr7Z0PHm7KipE7EFwe/?= =?us-ascii?Q?f92UGcBptEMaRqciklGqI1Y5/aM0fjB/pwjWM6uuArn9r5nymWYjny8UPP+P?= =?us-ascii?Q?SQ=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 19e3559c-dfa6-41fa-a303-08dd84d183d8 X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7779.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2025 14:49:15.3426 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2zHvGDW91XnFuP9v5h+MjbQsF9Qdiy50bf9+xU6IQJpfj+b7Hj1O7u6Z3X8vcQvSOes7X9J+NMvGZ50xN8wtuw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB9019 Content-Type: text/plain; charset="utf-8" Make out-of-band testing (send a packet when its traffic class gate is closed, expecting it to be delayed) more predictable by allowing the window size to be customized by isochron_do(). From man isochron-send, the window size alters the advance time (the delta between the transmission time of the packet, and its expected TX time when using SO_TXTIME or tc-taprio on the sender). In absence of the argument, isochron-send defaults to maximizing the advance time (making it equal to the cycle length). The default behavior is exactly what is problematic. An advance time that is too large will make packets intended to be out-of-band still be potentially in-band with an open gate from the schedule's previous cycle. We need to allow that advance time to be reduced. Perhaps a bit confusingly, isochron_do() has a shift_time argument currently, but that does not help here. The shift time shifts both the user space wakeup time and the expected TX time by equal amounts, it is unable of bringing them closer to one another. Set the window size properly for the Ocelot PSFP selftest as well. That used to work due to a very carefully chosen SHIFT_TIME_NS. I've re-tested that the test still works properly. Signed-off-by: Vladimir Oltean --- tools/testing/selftests/drivers/net/ocelot/psfp.sh | 1 + tools/testing/selftests/net/forwarding/tsn_lib.sh | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/tools/testing/selftests/drivers/net/ocelot/psfp.sh b/tools/tes= ting/selftests/drivers/net/ocelot/psfp.sh index f96a4bc7120f..8972f42dfe03 100755 --- a/tools/testing/selftests/drivers/net/ocelot/psfp.sh +++ b/tools/testing/selftests/drivers/net/ocelot/psfp.sh @@ -266,6 +266,7 @@ run_test() "${base_time}" \ "${CYCLE_TIME_NS}" \ "${SHIFT_TIME_NS}" \ + "${GATE_DURATION_NS}" \ "${NUM_PKTS}" \ "${STREAM_VID}" \ "${STREAM_PRIO}" \ diff --git a/tools/testing/selftests/net/forwarding/tsn_lib.sh b/tools/test= ing/selftests/net/forwarding/tsn_lib.sh index 19da1ccceac8..bcee7960a39f 100644 --- a/tools/testing/selftests/net/forwarding/tsn_lib.sh +++ b/tools/testing/selftests/net/forwarding/tsn_lib.sh @@ -182,6 +182,7 @@ isochron_do() local base_time=3D$1; shift local cycle_time=3D$1; shift local shift_time=3D$1; shift + local window_size=3D$1; shift local num_pkts=3D$1; shift local vid=3D$1; shift local priority=3D$1; shift @@ -212,6 +213,10 @@ isochron_do() extra_args=3D"${extra_args} --shift-time=3D${shift_time}" fi =20 + if ! [ -z "${window_size}" ]; then + extra_args=3D"${extra_args} --window-size=3D${window_size}" + fi + if [ "${use_l2}" =3D "true" ]; then extra_args=3D"${extra_args} --l2 --etype=3D0xdead ${vid}" receiver_extra_args=3D"--l2 --etype=3D0xdead" --=20 2.43.0 From nobody Fri Dec 19 18:46:56 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010026.outbound.protection.outlook.com [52.101.69.26]) (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 64F9B25D919; Sat, 26 Apr 2025 14:49:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745678970; cv=fail; b=a0bVUalXQ7e/1ahkBKbJdIkjMrqZuuAi41Lrs2o9KL2wc3OUaR5RAhKqBfDohArc5lFz5RKTzF4hRzFLup59xg1kfklRDfe4MEjusSM5ERsUhZ+HtPBYSCmDF7tpfhDVe9HyF7GlW3f/S4fD16csHr5gbxmybp/Tq1VmiEUqS84= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745678970; c=relaxed/simple; bh=+e6AuJjrx3ZDLr97n5WDNrPLiH+XRMV23zALVxL4quQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JcOZituF2W5/E9U6m5JUW1KE0K/4AC2i/oZJvV8W+ILZjRDQi/8CJsVWfvp2wNObdFyMx4s+AJYkVgOgKGr6Le+WEllYpNW6Orl+pRXh7255fKl4zCi653e8zktKaPIioRfVk/2BSzmV9heZlQi0FhBK+1hQ5l37u5Xk+4WGKfY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=g1H1ALOv; arc=fail smtp.client-ip=52.101.69.26 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="g1H1ALOv" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vSWGJEgpDPzHeovExWOJVObuenb9fZR/MYirMJeDX8sJRKNiEie8RXq7IMQbntWfN+bX/NVKTqrMIXj4qXDW6ASx8JGJGnobAHkEZSc5go1ghI14rZki2VEXFs+NtoDR1lRXCBTqkn55ajfxoTJoYb0ZPx6MYpoZZY4ha21jQNkAUD1vBFZFCE0iHfw+sejwfG+cp5yqJr+74KB7OccWYbQFDGy/6QevxcRNqjpLD+NMtsLsYl2tEfxTB0FHf1eweAfiepqaxETN8ZKqOUatd5ih+NQXBsgXWvtoqotzjEtInX6VwQdc23Dgcv/MOwF679yo4LM95Q0H56EeQ7WwBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=Uj3UcCUW7uNCYJrRwVmo4Y+IWy1fEcYNqQRLQUzyQVI=; b=WtZ2++35kK7RHJXJMTVsPi2/h5gBy4dKyKETyK6zo5Oeyl/8ps4iOubuw+6rWSV07bARHB9vUTR2EQ2chs83Z9pl1n6jycXQ4sa2mKz/xzs4PKVUMsJHLJis0+sVVtDUG/O2S+Ie3LE+rkFWzJnBlYgowa+gJyCoT6sW8Yq8AF3Ghs9IZMUwlzbtnorO4CC0hjxbAFojz+LliKrrV/wpCcpso3qVWeFqGcV1CV5BWZNFySDR96VF6Zb2TFpnJtgLF0h013WHRBnVpArzAXmZNZ/mD8L49deOQVMUScXhqEHrb6S2kJHfjqgCA+gMyH46vGb64Rt7JZajnjqoBlQcWA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Uj3UcCUW7uNCYJrRwVmo4Y+IWy1fEcYNqQRLQUzyQVI=; b=g1H1ALOvhM6+OoaXBNIo4DudrXDS5Wjhp/r0+8a9DTlmMFv27MyijLMnibh3mpYd+PJ/q2MEMgwYP9QelGyMBS9zDSOuiSP9525grgiyMhCVhDWmB3ge8XKc7XaltzyNGj/h8ueTdBWiA87XXOhd3tg8/n3/K7pJ25FMh1eud41acm45WMTVBhzDug31NhzyGEeHejfrpW+R73hsBqBa7t4+CUPWFmKdKmJAtw7AeltdX9PVKgByVehUz7blZHQO/5jBJwGmnrSki9PHbaagj86MbrAGOUbG15Ua7zB8WT3ZgZwb7w1v1Je3NFfn5pLVsL1ZmGhrLZD5Zqqd/rUIXQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM8PR04MB7779.eurprd04.prod.outlook.com (2603:10a6:20b:24b::14) by DU2PR04MB9019.eurprd04.prod.outlook.com (2603:10a6:10:2d4::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Sat, 26 Apr 2025 14:49:16 +0000 Received: from AM8PR04MB7779.eurprd04.prod.outlook.com ([fe80::7417:d17f:8d97:44d2]) by AM8PR04MB7779.eurprd04.prod.outlook.com ([fe80::7417:d17f:8d97:44d2%4]) with mapi id 15.20.8678.028; Sat, 26 Apr 2025 14:49:16 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Richie Pearn , Xiaoliang Yang , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH net 4/4] selftests: net: tc_taprio: new test Date: Sat, 26 Apr 2025 17:48:58 +0300 Message-ID: <20250426144859.3128352-5-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250426144859.3128352-1-vladimir.oltean@nxp.com> References: <20250426144859.3128352-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1PR04CA0055.eurprd04.prod.outlook.com (2603:10a6:802:2::26) To AM8PR04MB7779.eurprd04.prod.outlook.com (2603:10a6:20b:24b::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM8PR04MB7779:EE_|DU2PR04MB9019:EE_ X-MS-Office365-Filtering-Correlation-Id: e947cd5f-a0eb-468d-789d-08dd84d1848f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|52116014|7416014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0NRmU/E2byY3ZhZM9U5wd3mvs11vt4hLGucN4NWhEAGY2AHIDzfvANq/8TPa?= =?us-ascii?Q?eOBZj+y70k6stECYd1vbNosrTteT96BKykK83VJLaaPMHSSr34kduSR/txTz?= =?us-ascii?Q?XuWFTT0VIgLJ1X+lbbApxX82T9VJ/WsgPb6FHEbJ5ZfQ8jEoq3AuYC+yEcEa?= =?us-ascii?Q?foCKcojc5o/EXNx82D5GUiXNKTWOImYdu57DbDuKbqHG3F21fmPh8RcUbARo?= =?us-ascii?Q?sKDcIjujEcpkhRkZeFRbWPCqIVelIWvvOVonQHLsnD+aP6N6sr6xR4z/2UuT?= =?us-ascii?Q?CumWMaqcCJVpB17JT4bD0Ww7wzWA5AU/7eVab8O+IV5ecQakdMRYQTuBtw9Y?= =?us-ascii?Q?z1G09HXAlY99xGteT8LRifavfwPZv8mkygwfZEFidpVmIUuTDm03rnH2XmKV?= =?us-ascii?Q?IXALSxRHEJf661Htfeqoz6lbt5sfMGNVJbeOlHr2v/PHnxYF+zgenpQXswDI?= =?us-ascii?Q?OqjsK+HYATPpFM6FQqk4kj4MzqiaFgU46K9xJMA60T9xbExjyQKLBmKYnE9W?= =?us-ascii?Q?D5oqNgyWduCC7E6fkdul097Vm+4xaeer7SAgCsrAVswiNpEWgYzS3N6evFsy?= =?us-ascii?Q?WYQHxw4oGjGgCnKLrpohpgd0mGeKfdxdN2lD+jOE3BqPrDbGkA66fHp6gAgM?= =?us-ascii?Q?BVujRfmdRjrAC6sQm/H+JdrIY7BDKWYAwVYSGY27MwfYrg2Mf4WkDs0yZFOr?= =?us-ascii?Q?6Y8VXQ9bn0XJfmCcT5Ht/HEKlWkVP6Y8kEul7k84yvLUjMfiD9QdOFqMo9zX?= =?us-ascii?Q?KGLzZGWPB1xMoU4D2dQF5q8dZz2fqnhJ9i3+mA1iGAiHdMW2B3Digwopq+25?= =?us-ascii?Q?8g1v704vdojKQ/70jbL9qYljpQj9peBrqxet3/uW4kd9NYlIOAH1pZ9IDnln?= =?us-ascii?Q?W/1nX793tcmbFVMoam0W/wTTDsbHBIESazdIhqwVC/Hvbwo0Dr1Hcf4oCMnn?= =?us-ascii?Q?pDb04W4kWcDx5cZIMBH/odc4jAfTieorrIzd7XQJE2I1M2ndxMIoEeVt9UYm?= =?us-ascii?Q?Kdf2eYKKAogjIpFAXkVBS9v9+Z8bFkji1H+lfjvysKpv+U7Q8rQBXysTFVGf?= =?us-ascii?Q?f5bhmEqrG2MxHBM8XAVZwD6g1Rx2y21Y88UBGApr5T1KADEs2h41UrAdWM3b?= =?us-ascii?Q?krojsadkt+4qqO9WGZiocDZQhLHt0neWmhlhtKWv6Ktkdn+GEAYDMql274FX?= =?us-ascii?Q?hSOLO2CCPPzagI8G06YsOD5YLLBiH0hqvnIMO4DeEgOLFViLDj6cnqY4MHXM?= =?us-ascii?Q?M14MC2zAX6Adb8XIRsCANC3RZoW5H5GtyjDWuBRE2bdk3/EzIPLjpSRnjNGX?= =?us-ascii?Q?7+TrdDdXf7wGHkTDHF8EoUuk7j1X5vKZ4ZQDm84J/cMkPKWPe5C+L9Px2eJ9?= =?us-ascii?Q?18zPNXcWHZTkkGzwYaAyXv4UllGg2FOTf1dYuQ2hUJYR9p2bKDKdjrjmKMP4?= =?us-ascii?Q?5UH2mz1zbWiXiGvlOCBU/bPkue4Xwaf17mN54DQAs6MA44Y7c3on7w=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM8PR04MB7779.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(52116014)(7416014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7awUrjQob0YBSPQa/ElLFhLX49rEwH+C2qHisWLx9J637LOsSAFo2s+xsS4O?= =?us-ascii?Q?VIfAM93MqAtSfvGu75F0mtPPqrR/acawsXvsPRgD2bfuACFExuHfR36Alfjx?= =?us-ascii?Q?NM6uwUwgcu3wTEsfIE31XIzpIbczd7LmD1d1TuC7dnLfQZR8w0PiwDHvoZnh?= =?us-ascii?Q?ebxq+hMLPC9Rkvj92TlfvwOtmlTDNG2CYaA6Fo0tLIHAB/4OoyQlnCn1JQwc?= =?us-ascii?Q?XG4RVGOyDZgbNGcW9C8BQ3PnhM1sx5Kq88TKOpDNC0rvivPOy+eKa5vPsBYT?= =?us-ascii?Q?DrqDdI3Ofc17jGTOd+7GpYyL+VpitAGvAPR7oKq7RobTvEB8SRGn/19LrA0/?= =?us-ascii?Q?VFdNpOKi/C+VmREY2nlkVQwy39ho3w3ktvrytzVIAupdFe0zm9O8APcnOlwZ?= =?us-ascii?Q?CY+MYyQE0olyoA/lektxul4UA/GI6tx3ik/PST7oPTXjvP2yebvXdGbqUrwu?= =?us-ascii?Q?UadfNUCzVM9r9Ll1P1+YJn/udujSrx4NQo5y2Hlx6fOoisg+uCAm5liaOXZc?= =?us-ascii?Q?/q8vizQ5CPymqA0AD7agE0gMNXg60VJPPjb9Dvl4LuPPhYuLWh62L2+nH2Pw?= =?us-ascii?Q?2QAf2WCq3sMDoe61a2aDlgLLb1wY43OGQs4YvJFpcrjEGPyO21G+OttDv8dd?= =?us-ascii?Q?oAsOjE+puFpsONMyXZERUylVm15RFohc2OCELdWDIoe8tc90bcPBNIW00Z6Y?= =?us-ascii?Q?LMdQch60qCC0Vw/VZY4k6DyHtu/2W3tzfu+zEZPyS5Hck/2NrRcpp6w4HyMS?= =?us-ascii?Q?v92Jf19iJ2OokBj3rv/WaYNe4Zp/zjPSAP2iyF19yh4xiPZ6fFaMsalWGJ1i?= =?us-ascii?Q?OGXDs9RisV5f8unemVxlTYoUosdNMPXr1hbHrQOITPLE+BRUVzpoOjAurjMa?= =?us-ascii?Q?tHcWVC092hfoNvq5zWl9DfD7GjBz11NuJPlGqnuDCNOzyd4BY3oc/x59QU+X?= =?us-ascii?Q?9YEybORkEhBb/L8OjHIutui0HnIHvaahQDYxByk7pmGAZW/HyxWCGMap+M7I?= =?us-ascii?Q?WkkwYfdDKb0fp5hjGr/v/797bHPZoYWn7jh1ykATneiYQ9PZbX4MpLnO8isj?= =?us-ascii?Q?nC3oZGQ0ksvdczOIGeWLtWT8bFgZtOke+wZBEy3WNU+gbWv/sVic/bcwzzuP?= =?us-ascii?Q?ocCPmlNOrKP+VfUpK0nwIMUjZkP8cEx5VSkdzPyrVfG5pZbb6QZYm4OdQmXj?= =?us-ascii?Q?h8esbQYGufNGEqbdBcF/GZUXyqjVZ0iDfkBpP/gNHj9wWiDCg98+O1jjeGam?= =?us-ascii?Q?b8s3TwraflrVuC4MCBNsWoVoVXgeCJhpn9x4WfSNMuUVdq5hRFmVCkZ1Rq4J?= =?us-ascii?Q?KqX9TbL5v9PHFA3RL/rVSDxoldfe6gWQAGnNz31vEOc8uAppsqLdeR4j6uKW?= =?us-ascii?Q?t60ba76qfQHTCc8lzyXRT1n8hUS+am+5b6f/TghWo9Yu6+E2Ghte8ezHZk07?= =?us-ascii?Q?ti9uGdWrgnrYo5aCR2iokwFsQCYW/p81plnCzNLB94dTt2aLwGYJGJ72I9Hi?= =?us-ascii?Q?d5PFTyJGR6c9XSgdLV4ja2DcKQs44ByWYZwfPGn48tPvD+BgRyrFbb765bv1?= =?us-ascii?Q?sP3INU1bYCawhqdbqidiTAmqPfAzb9REuVRHLm+gHJjaSEGMrhjm7jcw7YPW?= =?us-ascii?Q?fw=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e947cd5f-a0eb-468d-789d-08dd84d1848f X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7779.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2025 14:49:16.4982 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: borLN0gh1d0L6VWrFkm+mlmrzAUddfzZX8TI4RJRldfuMQfuhw5LjpUrxuc1W/wQPC9IlqY9zlbBUFHnLLNYIA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB9019 Content-Type: text/plain; charset="utf-8" Add a forwarding path test for tc-taprio, based on isochron. This is specifically intended for NICs with an offloaded data path (switchdev/DSA) and requires taprio 'flags 2'. Also, $h1 and $h2 must support hardware timestamping, and $h1 tc-etf offload, for isochron to work. Packets received by a switch while the egress port has a taprio schedule with an open gate for the traffic class must be sent right away. Packets received by the switch while the traffic class gate must be delayed until it opens. Packets received by the switch must be dropped if the gate for the traffic class never opens. Packets should pass if the maximum SDU for the traffic class allows it, and should be dropped otherwise. The schedule should auto-update itself if clock jumps take place while taprio is installed. Repeat most of the above tests after forcing two clock jumps, one backwards (in Jan 1970) and one back into the present. Symlink it from tools/testing/selftests/drivers/net/dsa, because usually DSA ports have the same MAC address, and we need STABLE_MAC_ADDRS=3Dyes from its forwarding.config for the test to run successfully. Signed-off-by: Vladimir Oltean --- .../selftests/drivers/net/dsa/tc_taprio.sh | 1 + .../selftests/net/forwarding/tc_taprio.sh | 421 ++++++++++++++++++ .../selftests/net/forwarding/tsn_lib.sh | 10 + 3 files changed, 432 insertions(+) create mode 120000 tools/testing/selftests/drivers/net/dsa/tc_taprio.sh create mode 100755 tools/testing/selftests/net/forwarding/tc_taprio.sh diff --git a/tools/testing/selftests/drivers/net/dsa/tc_taprio.sh b/tools/t= esting/selftests/drivers/net/dsa/tc_taprio.sh new file mode 120000 index 000000000000..d16a65e7595d --- /dev/null +++ b/tools/testing/selftests/drivers/net/dsa/tc_taprio.sh @@ -0,0 +1 @@ +run_net_forwarding_test.sh \ No newline at end of file diff --git a/tools/testing/selftests/net/forwarding/tc_taprio.sh b/tools/te= sting/selftests/net/forwarding/tc_taprio.sh new file mode 100755 index 000000000000..8992aeabfe0b --- /dev/null +++ b/tools/testing/selftests/net/forwarding/tc_taprio.sh @@ -0,0 +1,421 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +ALL_TESTS=3D" \ + test_clock_jump_backward \ + test_taprio_after_ptp \ + test_max_sdu \ + test_clock_jump_backward_forward \ +" +NUM_NETIFS=3D4 +source tc_common.sh +source lib.sh +source tsn_lib.sh + +require_command python3 + +# The test assumes the usual topology from the README, where h1 is connect= ed to +# swp1, h2 to swp2, and swp1 and swp2 are together in a bridge. +# Additional assumption: h1 and h2 use the same PHC, and so do swp1 and sw= p2. +# By synchronizing h1 to swp1 via PTP, h2 is also implicitly synchronized = to +# swp1 (and both to CLOCK_REALTIME). +h1=3D${NETIFS[p1]} +swp1=3D${NETIFS[p2]} +swp2=3D${NETIFS[p3]} +h2=3D${NETIFS[p4]} + +UDS_ADDRESS_H1=3D"/var/run/ptp4l_h1" +UDS_ADDRESS_SWP1=3D"/var/run/ptp4l_swp1" + +H1_IPV4=3D"192.0.2.1" +H2_IPV4=3D"192.0.2.2" +H1_IPV6=3D"2001:db8:1::1" +H2_IPV6=3D"2001:db8:1::2" + +# Tunables +NUM_PKTS=3D100 +STREAM_VID=3D10 +STREAM_PRIO_1=3D6 +STREAM_PRIO_2=3D5 +STREAM_PRIO_3=3D4 +# PTP uses TC 0 +ALL_GATES=3D$((1 << 0 | 1 << STREAM_PRIO_1 | 1 << STREAM_PRIO_2)) +# Use a conservative cycle of 10 ms to allow the test to still pass when t= he +# kernel has some extra overhead like lockdep etc +CYCLE_TIME_NS=3D10000000 +# Create two Gate Control List entries, one OPEN and one CLOSE, of equal +# durations +GATE_DURATION_NS=3D$((CYCLE_TIME_NS / 2)) +# Give 2/3 of the cycle time to user space and 1/3 to the kernel +FUDGE_FACTOR=3D$((CYCLE_TIME_NS / 3)) +# Shift the isochron base time by half the gate time, so that packets are +# always received by swp1 close to the middle of the time slot, to minimize +# inaccuracies due to network sync +SHIFT_TIME_NS=3D$((GATE_DURATION_NS / 2)) + +path_delay=3D + +h1_create() +{ + simple_if_init $h1 $H1_IPV4/24 $H1_IPV6/64 +} + +h1_destroy() +{ + simple_if_fini $h1 $H1_IPV4/24 $H1_IPV6/64 +} + +h2_create() +{ + simple_if_init $h2 $H2_IPV4/24 $H2_IPV6/64 +} + +h2_destroy() +{ + simple_if_fini $h2 $H2_IPV4/24 $H2_IPV6/64 +} + +switch_create() +{ + local h2_mac_addr=3D$(mac_get $h2) + + ip link set $swp1 up + ip link set $swp2 up + + ip link add br0 type bridge vlan_filtering 1 + ip link set $swp1 master br0 + ip link set $swp2 master br0 + ip link set br0 up + + bridge vlan add dev $swp2 vid $STREAM_VID + bridge vlan add dev $swp1 vid $STREAM_VID + bridge fdb add dev $swp2 \ + $h2_mac_addr vlan $STREAM_VID static master +} + +switch_destroy() +{ + ip link del br0 +} + +ptp_setup() +{ + # Set up swp1 as a master PHC for h1, synchronized to the local + # CLOCK_REALTIME. + phc2sys_start $UDS_ADDRESS_SWP1 + ptp4l_start $h1 true $UDS_ADDRESS_H1 + ptp4l_start $swp1 false $UDS_ADDRESS_SWP1 +} + +ptp_cleanup() +{ + ptp4l_stop $swp1 + ptp4l_stop $h1 + phc2sys_stop +} + +txtime_setup() +{ + local if_name=3D$1 + + tc qdisc add dev $if_name clsact + # Classify PTP on TC 7 and isochron on TC 6 + tc filter add dev $if_name egress protocol 0x88f7 \ + flower action skbedit priority 7 + tc filter add dev $if_name egress protocol 802.1Q \ + flower vlan_ethtype 0xdead action skbedit priority 6 + tc qdisc add dev $if_name handle 100: parent root mqprio num_tc 8 \ + queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 \ + map 0 1 2 3 4 5 6 7 \ + hw 1 + # Set up TC 5, 6, 7 for SO_TXTIME. tc-mqprio queues count from 1. + tc qdisc replace dev $if_name parent 100:$((STREAM_PRIO_1 + 1)) etf \ + clockid CLOCK_TAI offload delta $FUDGE_FACTOR + tc qdisc replace dev $if_name parent 100:$((STREAM_PRIO_2 + 1)) etf \ + clockid CLOCK_TAI offload delta $FUDGE_FACTOR + tc qdisc replace dev $if_name parent 100:$((STREAM_PRIO_3 + 1)) etf \ + clockid CLOCK_TAI offload delta $FUDGE_FACTOR +} + +txtime_cleanup() +{ + local if_name=3D$1 + + tc qdisc del dev $if_name clsact + tc qdisc del dev $if_name root +} + +taprio_replace() +{ + local if_name=3D"$1"; shift + local extra_args=3D"$1"; shift + + # STREAM_PRIO_1 always has an open gate. + # STREAM_PRIO_2 has a gate open for GATE_DURATION_NS (half the cycle time) + # STREAM_PRIO_3 always has a closed gate. + tc qdisc replace dev $if_name root stab overhead 24 taprio num_tc 8 \ + queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 \ + map 0 1 2 3 4 5 6 7 \ + sched-entry S $(printf "%x" $ALL_GATES) $GATE_DURATION_NS \ + sched-entry S $(printf "%x" $((ALL_GATES & ~(1 << STREAM_PRIO_2)))) $GAT= E_DURATION_NS \ + base-time 0 flags 0x2 $extra_args + taprio_wait_for_admin $if_name +} + +taprio_cleanup() +{ + local if_name=3D$1 + + tc qdisc del dev $if_name root +} + +probe_path_delay() +{ + local isochron_dat=3D"$(mktemp)" + local received + + log_info "Probing path delay" + + isochron_do "$h1" "$h2" "$UDS_ADDRESS_H1" "" 0 \ + "$CYCLE_TIME_NS" "" "" "$NUM_PKTS" \ + "$STREAM_VID" "$STREAM_PRIO_1" "" "$isochron_dat" + + received=3D$(isochron_report_num_received "$isochron_dat") + if [ "$received" !=3D "$NUM_PKTS" ]; then + echo "Cannot establish basic data path between $h1 and $h2" + exit $ksft_fail + fi + + printf "pdelay =3D {}\n" > isochron_data.py + isochron report --input-file "$isochron_dat" \ + --printf-format "pdelay[%u] =3D %d - %d\n" \ + --printf-args "qRT" \ + >> isochron_data.py + cat <<-'EOF' > isochron_postprocess.py + #!/usr/bin/env python3 + + from isochron_data import pdelay + import numpy as np + + w =3D np.array(list(pdelay.values())) + print("{}".format(np.max(w))) + EOF + path_delay=3D$(python3 ./isochron_postprocess.py) + + log_info "Path delay from $h1 to $h2 estimated at $path_delay ns" + + if [ "$path_delay" -gt "$GATE_DURATION_NS" ]; then + echo "Path delay larger than gate duration, aborting" + exit $ksft_fail + fi + + rm -f ./isochron_data.py 2> /dev/null + rm -f ./isochron_postprocess.py 2> /dev/null + rm -f "$isochron_dat" 2> /dev/null +} + +setup_prepare() +{ + vrf_prepare + + h1_create + h2_create + switch_create + + txtime_setup $h1 + + # Temporarily set up PTP just to probe the end-to-end path delay. + ptp_setup + probe_path_delay + ptp_cleanup +} + +cleanup() +{ + pre_cleanup + + isochron_recv_stop + txtime_cleanup $h1 + + switch_destroy + h2_destroy + h1_destroy + + vrf_cleanup +} + +run_test() +{ + local base_time=3D$1; shift + local stream_prio=3D$1; shift + local expected_delay=3D$1; shift + local should_fail=3D$1; shift + local test_name=3D$1; shift + local isochron_dat=3D"$(mktemp)" + local received + local median_delay + + RET=3D0 + + # Set the shift time equal to the cycle time, which effectively + # cancels the default advance time. Packets won't be sent early in + # software, which ensures that they won't prematurely enter through + # the open gate in __test_out_of_band(). Also, the gate is open for + # long enough that this won't cause a problem in __test_in_band(). + isochron_do "$h1" "$h2" "$UDS_ADDRESS_H1" "" "$base_time" \ + "$CYCLE_TIME_NS" "$SHIFT_TIME_NS" "$GATE_DURATION_NS" \ + "$NUM_PKTS" "$STREAM_VID" "$stream_prio" "" "$isochron_dat" + + received=3D$(isochron_report_num_received "$isochron_dat") + [ "$received" =3D "$NUM_PKTS" ] + check_err_fail $should_fail $? "Reception of $NUM_PKTS packets" + + if [ $should_fail =3D 0 ] && [ "$received" =3D "$NUM_PKTS" ]; then + printf "pdelay =3D {}\n" > isochron_data.py + isochron report --input-file "$isochron_dat" \ + --printf-format "pdelay[%u] =3D %d - %d\n" \ + --printf-args "qRT" \ + >> isochron_data.py + cat <<-'EOF' > isochron_postprocess.py + #!/usr/bin/env python3 + + from isochron_data import pdelay + import numpy as np + + w =3D np.array(list(pdelay.values())) + print("{}".format(int(np.median(w)))) + EOF + median_delay=3D$(python3 ./isochron_postprocess.py) + + # If the condition below is true, packets were delayed by a closed gate + [ "$median_delay" -gt $((path_delay + expected_delay)) ] + check_fail $? "Median delay $median_delay is greater than expected delay= $expected_delay plus path delay $path_delay" + + # If the condition below is true, packets were sent expecting them to + # hit a closed gate in the switch, but were not delayed + [ "$expected_delay" -gt 0 ] && [ "$median_delay" -lt "$expected_delay" ] + check_fail $? "Median delay $median_delay is less than expected delay $e= xpected_delay" + fi + + log_test "$test_name" + + rm -f ./isochron_data.py 2> /dev/null + rm -f ./isochron_postprocess.py 2> /dev/null + rm -f "$isochron_dat" 2> /dev/null +} + +__test_always_open() +{ + run_test 0.000000000 $STREAM_PRIO_1 0 0 "Gate always open" +} + +__test_always_closed() +{ + run_test 0.000000000 $STREAM_PRIO_3 0 1 "Gate always closed" +} + +__test_in_band() +{ + # Send packets in-band with the OPEN gate entry + run_test 0.000000000 $STREAM_PRIO_2 0 0 "In band with gate" +} + +__test_out_of_band() +{ + # Send packets in-band with the CLOSE gate entry + run_test 0.005000000 $STREAM_PRIO_2 \ + $((GATE_DURATION_NS - SHIFT_TIME_NS)) 0 \ + "Out of band with gate" +} + +run_subtests() +{ + __test_always_open + __test_always_closed + __test_in_band + __test_out_of_band +} + +test_taprio_after_ptp() +{ + log_info "Setting up taprio after PTP" + ptp_setup + taprio_replace $swp2 + run_subtests + taprio_cleanup $swp2 + ptp_cleanup +} + +__test_under_max_sdu() +{ + # Limit max-sdu for STREAM_PRIO_1 + taprio_replace "$swp2" "max-sdu 0 0 0 0 0 0 100 0" + run_test 0.000000000 $STREAM_PRIO_1 0 0 "Under maximum SDU" +} + +__test_over_max_sdu() +{ + # Limit max-sdu for STREAM_PRIO_1 + taprio_replace "$swp2" "max-sdu 0 0 0 0 0 0 20 0" + run_test 0.000000000 $STREAM_PRIO_1 0 1 "Over maximum SDU" +} + +test_max_sdu() +{ + ptp_setup + __test_under_max_sdu + __test_over_max_sdu + taprio_cleanup $swp2 + ptp_cleanup +} + +# Perform a clock jump in the past without synchronization running, so tha= t the +# time base remains where it was set by phc_ctl. +test_clock_jump_backward() +{ + # This is a more complex schedule specifically crafted in a way that + # has been problematic on NXP LS1028A. Not much to test with it other + # than the fact that it passes traffic. + tc qdisc replace dev $swp2 root stab overhead 24 taprio num_tc 8 \ + queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 map 0 1 2 3 4 5 6 7 \ + base-time 0 sched-entry S 20 300000 sched-entry S 10 200000 \ + sched-entry S 20 300000 sched-entry S 48 200000 \ + sched-entry S 20 300000 sched-entry S 83 200000 \ + sched-entry S 40 300000 sched-entry S 00 200000 flags 2 + + log_info "Forcing a backward clock jump" + phc_ctl $swp1 set 0 + + ping_test $h1 192.0.2.2 + taprio_cleanup $swp2 +} + +# Test that taprio tolerates clock jumps. +# Since ptp4l and phc2sys are running, it is expected for the time to +# eventually recover (through yet another clock jump). Isochron waits +# until that is the case. +test_clock_jump_backward_forward() +{ + log_info "Forcing a backward and a forward clock jump" + taprio_replace $swp2 + phc_ctl $swp1 set 0 + ptp_setup + ping_test $h1 192.0.2.2 + run_subtests + ptp_cleanup + taprio_cleanup $swp2 +} + +tc_offload_check +if [[ $? -ne 0 ]]; then + log_test_skip "Could not test offloaded functionality" + exit $EXIT_STATUS +fi + +trap cleanup EXIT + +setup_prepare +setup_wait +tests_run + +exit $EXIT_STATUS diff --git a/tools/testing/selftests/net/forwarding/tsn_lib.sh b/tools/test= ing/selftests/net/forwarding/tsn_lib.sh index bcee7960a39f..08c044ff6689 100644 --- a/tools/testing/selftests/net/forwarding/tsn_lib.sh +++ b/tools/testing/selftests/net/forwarding/tsn_lib.sh @@ -2,6 +2,8 @@ # SPDX-License-Identifier: GPL-2.0 # Copyright 2021-2022 NXP =20 +tc_testing_scripts_dir=3D$(dirname $0)/../../tc-testing/scripts + REQUIRE_ISOCHRON=3D${REQUIRE_ISOCHRON:=3Dyes} REQUIRE_LINUXPTP=3D${REQUIRE_LINUXPTP:=3Dyes} =20 @@ -18,6 +20,7 @@ fi if [[ "$REQUIRE_LINUXPTP" =3D "yes" ]]; then require_command phc2sys require_command ptp4l + require_command phc_ctl fi =20 phc2sys_start() @@ -263,3 +266,10 @@ isochron_report_num_received() --printf-format "%u\n" --printf-args "R" | \ grep -w -v '0' | wc -l } + +taprio_wait_for_admin() +{ + local if_name=3D"$1"; shift + + "$tc_testing_scripts_dir/taprio_wait_for_admin.sh" "$(which tc)" "$if_nam= e" +} --=20 2.43.0