From nobody Fri Apr 17 07:48:06 2026 Received: from mx0f-003ea501.gpphosted.com (mx0f-003ea501.gpphosted.com [66.159.228.33]) (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 3BB3C1A256E; Mon, 23 Feb 2026 00:28:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=66.159.228.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771806526; cv=fail; b=sFIb6X00s23wSI6QtAzVMNPxunI/GID5o+xZ/hOqx0U5h0WxVtA4kOQ/DP3gzRnDXx1Qo4GOV5W+BvDICyIa0pCkcuveCTijoxr8MCS4MWRdGYYw93aMnaI8K7uyWhfCaxSCUibpDXkujYGjdJKNpK9edYC8VbBS77d+Jm100mM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771806526; c=relaxed/simple; bh=A9nLPxDQ+QNpQlc17USzo9rQ2ywJ9UtbxwEBjWa0Upg=; h=From:To:CC:Subject:Date:Message-ID:Content-Type:MIME-Version; b=J2ZO/GCFSqdymDvHHXLl5B+n16EsqogmqXjzMJdYA0AW0Ffdwi9w4dUr+wI8yg0i8Qhue+YgaBv5jXWcwNIGSnBekCqJZGJXq55VMVOs2J48fJtC/xv9xRvVimUwXMdczhiNVcLipMvLe9lnzzRMqxfr6DveyHS6hzpQ1Wamrnk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=spacex.com; spf=pass smtp.mailfrom=spacex.com; dkim=pass (2048-bit key) header.d=spacex.com header.i=@spacex.com header.b=vOtAhch4; dkim=pass (2048-bit key) header.d=spacexgcchigh.onmicrosoft.us header.i=@spacexgcchigh.onmicrosoft.us header.b=LOLFbc4p; arc=fail smtp.client-ip=66.159.228.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=spacex.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=spacex.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=spacex.com header.i=@spacex.com header.b="vOtAhch4"; dkim=pass (2048-bit key) header.d=spacexgcchigh.onmicrosoft.us header.i=@spacexgcchigh.onmicrosoft.us header.b="LOLFbc4p" Received: from pps.filterd (m0418031.ppops.net [127.0.0.1]) by mx0f-003ea501.gpphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 61MNJ4o0008462; Mon, 23 Feb 2026 00:05:18 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spacex.com; h=from : to : cc : subject : date : message-id : content-type : content-id : content-transfer-encoding : mime-version; s=dkim-cloud1; bh=A9nLPxDQ+QNpQlc17USzo9rQ2ywJ9UtbxwEBjWa0Upg=; b=vOtAhch4Q6JwgCUbEyXAd4jV2NP8LPTVCMb1Tb1JdZFuDJm3J4FfI2hMiP0JK25DjbfR Zumpk4SaQ1lR4Pzs7eAfDU7kXCeAAnrzuZOJsxyrD2ChxNM6rVf5hWkNxTnOlNrdeYmv S5W2/m1VdWegjkdpQekb2MDS8poOxs4maZd+HzSfnfxiSEPaiL/rMXwq2K3O+EDA5Bm8 faSgVeNrX1ff5TF0QkfAhtgMmqRwMmXz7gWuI1g3aALTXKdr42cSnRAolYazLmaoxwPg jFFnD//nvUTho86I6T+tCm1r+vTQQ4ITBDispyynDxMSd2ZaN3dbXAlwFC5R2l89oRfj LQ== Received: from usg02-cy1-obe.outbound.protection.office365.us (mail-cy1usg02on0075.outbound.protection.office365.us [23.103.209.75]) by mx0f-003ea501.gpphosted.com (PPS) with ESMTPS id 4cgb0882ej-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 23 Feb 2026 00:05:17 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector5401; d=microsoft.com; cv=none; b=nMRAu/3G5WQ2/uzUu3lW9BTS9xQiYA+qdYz2RNjh3VaMr6uzzFOOnEArzDO7REYSyxh+45uySj3sRcIugveYRNFgBp8JYq+iNgLFwWCFUBCNiXfQXhGpFxslkG7UUmRCkABiXNeGcHc2gArWU6HP6ZkGk63Aoymqd94hofLBti21y6s3oJ8+1nLPxdkH9sePLpkMFuWeFYaBKBZ0MyW4su/NlOxEbT+VUIzN6EIW9Hp2ohjmVVYSt10zu2+/jF8UB8CiV5XxyRCrk7PB3iY6UkkW/Nz7NmYJe6v3emdgm/XEka0QWNXO9+EmFacJU7nSaW7tKVtQe6Hzd+SdQ9+XHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector5401; 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=A9nLPxDQ+QNpQlc17USzo9rQ2ywJ9UtbxwEBjWa0Upg=; b=So6sy5VXDiwoqoPQ35AFjqXj8sgb6aaKKC6jfkosFaS8cNArWihjSplXRtxcvk2VEB7s031LiE3v1JpBuF9t43bhtsQ+RZztgdnJo9UMbaYfeQV/jYVJ+ywcz23kLsWI8YcgxrMSV5axOz7cylsOjV2yFS1ICFru98iVb34RMFsOu9GBPjZJZpPOVdkgWOyu4XBO1sbjInRkgmljv1jFbjk8xOCp6EBpUrcd1K+tkf/8T0GT131BOkyVMbqceTRlbqzB9cTyyqeY4L8bQZfAVe8uur7wC/c9yX5aSwMyjsAZPL+DjyVWG+WwllAVp1u/WwKMa5EakDZa3PplfJJXQg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=spacex.com; dmarc=pass action=none header.from=spacex.com; dkim=pass header.d=spacex.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spacexgcchigh.onmicrosoft.us; s=selector1-spacexgcchigh-onmicrosoft-us; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=A9nLPxDQ+QNpQlc17USzo9rQ2ywJ9UtbxwEBjWa0Upg=; b=LOLFbc4prEPdmHimHsWW9e+1i1lu1gOSvCFNE77z2bOVByf+ksvDy6AgSJNR0TugDNAGcl0K/wr/EvOZyKgLvfwq/1rTYnTJ8qY+MnUBT1oj8xU8sPbKPdnmuRy0CAS/gLcE3aHHG9F4NHTCDNEs/3/ls1YgPdSvIEqhfksU4jOwdjvY7sYdxN82Ul58vUrrMJWVLlQ9MpajZNlmMNXAB7zoF/Qmq8u57snI40BT/bzwLz3uUPTVicxhbCPMH5lhsLg9Lm1bK1EWzX/c61crOrecZv/lnBJHyED9ZW8ay07/IksNTfLdpa/22TEtLQIiKv7gRwgDck0WjcQnZ0pt+Q== Received: from PH1P110MB1186.NAMP110.PROD.OUTLOOK.COM (2001:489a:200:18d::6) by SA1P110MB1183.NAMP110.PROD.OUTLOOK.COM (2001:489a:200:197::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Mon, 23 Feb 2026 00:05:14 +0000 Received: from PH1P110MB1186.NAMP110.PROD.OUTLOOK.COM ([fe80::d215:34eb:6fa9:247d]) by PH1P110MB1186.NAMP110.PROD.OUTLOOK.COM ([fe80::d215:34eb:6fa9:247d%4]) with mapi id 15.20.9611.013; Mon, 23 Feb 2026 00:05:14 +0000 From: Finn Dayton To: "netdev@vger.kernel.org" CC: "Alexei Starovoitov ," , "Daniel Borkmann ," , "David S. Miller ," , "Jakub Kicinski ," , "Jesper Dangaard Brouer ," , "John Fastabend ," , "Stanislav Fomichev ," , "Saeed Mahameed ," , "Leon Romanovsky ," , "Tariq Toukan ," , "Mark Bloch ," , "Andrew Lunn ," , "Eric Dumazet ," , "Paolo Abeni ," , "stable@vger.kernel.org" , "bpf@vger.kernel.org" , "linux-rdma@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH net] net/mlx5e: Precompute xdpsq assignments for mlx5e_xdp_xmit() Thread-Topic: [PATCH net] net/mlx5e: Precompute xdpsq assignments for mlx5e_xdp_xmit() Thread-Index: AQHcpFgVNrGrdkK5lkuK7XP5p1ZbYQ== Date: Mon, 23 Feb 2026 00:05:14 +0000 Message-ID: <610D8F9E-0038-46D9-AD8A-1D596236B1EF@spacex.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH1P110MB1186:EE_|SA1P110MB1183:EE_ x-ms-office365-filtering-correlation-id: cff69ac5-188b-4ef4-762d-08de726f3854 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|38070700021; x-microsoft-antispam-message-info: =?utf-8?B?bkdTVW1ZUXp2ajBZZVR0Z2t2dG5YSmRKWDdVRW5kNnVPNUc1VEJtamhhaUdz?= =?utf-8?B?UzMxOENFM2pHdkg5REVDblM0enBBWmV4cHZNTkpuQWZtR2dQQVlmYllqdzNB?= =?utf-8?B?eGhsVEVYOFJpbmU4elQ1dFFrY0RtRmRzNStkUURpTXJsN3FWUVp2MTZVNHVE?= =?utf-8?B?Nm9BVFd4bUxETWE5U0V0YndJcmFleDhsQ2k2VWYvdnhLN2ZSSExPSnE4bGR1?= =?utf-8?B?NjRzU05KaGNONitTL09OcWdoOUxqQTNVVml3cnJVc1NHY1RqQStHT2RQS2Q0?= =?utf-8?B?bjhBY21Wc0VCbUdrallVYjF2MU1na3NQWWpNeS9Wck95d0RFR25wUTFlR1FV?= =?utf-8?B?NkJOWFNnaXFuZ29jdTJMWmNwME1iNlhDL0s4eFF0cEcxNXVMTnFvOHBBMjY4?= =?utf-8?B?dHRkRDRJaUV1dmNSUXJ4NTFONlg4dXI3RzQ3dE5XMGRzMjlmSWQwZ0dqZkNO?= =?utf-8?B?S3dyY09DM3duWEJPdHl1QmQxSEtqT0JxYUxXL3B3SEdIWG4xS3djZE9OdmlT?= =?utf-8?B?NEhEQk0zRXlPaEZaSnlLQXd0dzE3OHZ1ZTNjYkVML01JS1NqRVBYaytNWkVZ?= =?utf-8?B?ZDlXaGRmVmZNSzVoT3dtQnEwRzhpR1dCUlJIK2NBWTVDR0xFSDgwYzFOUmJF?= =?utf-8?B?N2xrRm4xRU96enJkYUt4VFNkVFRXNE9uQUwxTG1OQ2c0bjVPclh5RG05QXNO?= =?utf-8?B?V2F4QXhNUGI4Q0ZHQnlUaUtZUEZJWnl4TERZWHFpUlhXb3B1U3N2R29BZWZw?= =?utf-8?B?NC9UbUNnTGtDRWZvYkltRnVmQ2lFY2lZNDJuZSsrY2VUVkpXNnphL1BtNnBn?= =?utf-8?B?dUpSQjdvc2hKUEo3R2hmQVBPRlBwRTNlR1BkSzh2bCsyY2dPbHNCWU9IWkEz?= =?utf-8?B?NmhsVFBDcXBpcGZBWlFzS2NIMWljVXhjL1dyc1FYUDJENWJsdFU0ZHlGbEtY?= =?utf-8?B?WVRCWm05TUVORWFncjlxN0JmSWxwT2JMNHd5bndxS05qRzRrbk95bys2RHhZ?= =?utf-8?B?WkdkWjJuTzNFOGNZUzIxdXhEK09lQjRWbjBwdHlmVmxYUVdJdFN1eTl2akg0?= =?utf-8?B?cGVaMkpXT0ZqV0o1T3VKcm13Si9QMldPcEZXSEdLM2tUTmxCVy9yN0dUckZW?= =?utf-8?B?eGZncnFyQytuRnFiTWpVYUIwNENGQXNEUmdpNU9oWGpDMHJiL2hHRDJZVkNs?= =?utf-8?B?K1ZpcnQ4NVh1bjV3Tzh6RUVNNWgyTWRoV2s2MjcwWEl3WnpDNkNBVVEwYTR2?= =?utf-8?B?anUrQytDQThDTGdkQzBGbURUWS81NjFVN1Z0Z2lIRVgvR0NJb3pUbm9wemlF?= =?utf-8?B?OXY1V0FVa1ZJNno4bGZ4V05nZmhKbGpRUllwbHlnODlTSytPb3VRS0FybitD?= =?utf-8?B?NFFWVkVsL2JJS3pralZVTW1JNHlOMGI4OStOTzQ3Y2pYY2toRmc3WVlNM0tz?= =?utf-8?B?U3hocy8rc1pMeFRBSi9vTExQa2J3cTBlRFpJYzYrekFqQWpab0xJTXh3SVRP?= =?utf-8?B?bUxJTDVQdE5BdmU0dmxlZ2VmMTd1aEtlZmZkRyt4Q1JUL1c0bzZ1aXdzZFIv?= =?utf-8?B?ZGRCVzFQS09uMFlaYktVcjNHQlY3ZEZtZU51Rm4wdUxGVm1FVmpQaGpPZGY1?= =?utf-8?B?QnVTYm40bzRMaHMvcG9zckVkdmlwcHBHcTJYZUtkUzdndk9VTmhUVHZOU2J4?= =?utf-8?B?NEdsTGdHN3VPVUh4RGFyMFMrTUR3cjk0VTcwQ1ZtQWNQaFZDcUxReDFDYnZE?= =?utf-8?B?U3dyZDZ4ZGQ4b2NoZ1hPOTdOMm9qM2RyZndYT1lLZWFvWkpmMDF4MzdOU2F3?= =?utf-8?B?V0ppSmFJSGUrWmtlOTJrOEFpZXZuY21WdU9QRDV4cEhKN1ZSSzNadFJTZE8v?= =?utf-8?B?ajhKY1lwc1kvQm1lWXFhMTJNRHdkUU9vZFFmOHhCZFBESlJDbk1sSW43M3l5?= =?utf-8?B?VVJuRHJMTGRGREpxT01wMVV3SXF0cXNRTEllU29KTzF3VnJMbTFMTm1JOUtN?= =?utf-8?B?QzB6cmIyN0IxL3BwSmlUUWNCaWlJWmdGTWtLZFYrSWtPcGtLV0FLTUJ6WUE0?= =?utf-8?B?aGRRR0lZVW1MMTVMeGxmdk9CVUxCYytFNmNFSUp3cjYydTMvdUhtMjE4cWtI?= =?utf-8?B?R3ppR0hvRnB3MTNnbzltMmdHdHpsakszeXNjcFI2cU9PVlhBQnZlaVpZL0t3?= =?utf-8?Q?/kk+Pvh4hR7Tqd+IP1KjT9o=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH1P110MB1186.NAMP110.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?aFFmbkxSUTNQT3FvczlYSUpnZURWbExrZHBhbXk0NW50eVlNeVA2QldxQlhr?= =?utf-8?B?bWsrNnVaeDZ0RG1oQ0RkLzQ3cGtKK1RiTU8zQUFBT0VXWjZzNEdsNnJPMWRo?= =?utf-8?B?Rk9XeWtINWpQUEVNcmI4RHZpU1dxOWN0eERab291cWxnRUtzT1ZvbDFKWkJH?= =?utf-8?B?VUN0NW5jRmxqZmJTL1BNQ3A3UHZQczdYa3RlRmQ5QTdycUNxRkQvd2RVQ1Yr?= =?utf-8?B?d1lReDBYVXFKNWJyUDRGRTdkS2lYREVoSjM2T2hQN3VieFFlbDhBOUVYUkVW?= =?utf-8?B?MDBDUTJZWXZZVzJ3ZTlleTU4bVU4KzBtRUxIRXVJdUtINGVZTVU0eFl1ZXdx?= =?utf-8?B?NEJZL1hYb1R2NWZpY0RrcnRaeFR1ajZ4cWhzV0ZEY1JYeDAyNGkySVlFdkJV?= =?utf-8?B?ZzdMRCtoek1saFF3T2FrK2pzMDlHeVhiZWdKdEZlV3ZNSmU1aVBhdFRTSEpJ?= =?utf-8?B?WGcvaWdQZHdQVU50VFJVbktPdGNIUXFEdlpQWmlJYTNmK3NRd2RRcXNjM29E?= =?utf-8?B?eWRKQTQycWtvQUVsZkk3Tkt0YXdHYVorcU9NYUVqWW11R0UyZURoSXhiZTNE?= =?utf-8?B?dGNkNkxvM1Z6c01XTHdBOHNRTkV5LzhmR1U4dVZiYmNlRHQ4NnBoU2RLaUxy?= =?utf-8?B?UnhuVFpjbDNlaFhSWFBSa0RheHBZZnJONGxwWU5tRzAweGtOWUlZK2d2dXhm?= =?utf-8?B?anRvYmdIdmFqRWJTTWYrclpxaklBUXd1UHVIclRCTGg2Q2lHb0VZYTdGTHNX?= =?utf-8?B?ZEtxOWYza2JucXF4VDVxYitxbVVVMHpLcHM3OUw4SXlyVGFZVEdUOFZTVFEy?= =?utf-8?B?RjhGci9nZlp4UmRIYkFzSTNPalAvZWpsbzNKa2hmTXpRVkEreDVQQ1lMTysy?= =?utf-8?B?cENvRHc2bTNSeEhacWErVTNxSVByZVExZVB2ektCc3o3QjZQVFpOYS8wdEpH?= =?utf-8?B?bERtV2puMDJvSHQ0RjhVQ0IxbUJZc3RlTnBjVFJkaDBJbmZaTlV6YjV0Q2dY?= =?utf-8?B?OHdKNjdtQXNnWGNvTnA3ZmN5M2NPT0lOUkEwb3VXSlVrUmV4UEtlRlJ0dVBW?= =?utf-8?B?cWt4Z2FHTnZJQ1JESktaMzBpUlRXUEs1SEYwcEVTU0pzSGlMZWloaVB6aVBR?= =?utf-8?B?Nm5MaFEvOEhFQWFpTm52blZzblg0Nzg4QmQxb2lXK1BaT0Vqa1JxTy9iRkdO?= =?utf-8?B?YWxReFRTK3UyLzFYSVB2Vml4RkU4ZnNxZUhkNkM1VDdSRjJqN3hlRmt4aHZv?= =?utf-8?B?SlRKTlg0UTVDQzhoNXp5SlFEVmhuMmRIZkw2RnFoMm9kQktwZkluQmpzMUJG?= =?utf-8?B?Mm1hY2RFTmNuNk9jbUlyUnlWd1VkN2dKd0Y4YTNxUkdLeDUvb1ZMQUF3SXRw?= =?utf-8?B?dDIzem9zK2d1OUZVTmR4Umc5Qnhua090N1hhVWdTdjlsTnlFUUlHcFplUEJp?= =?utf-8?B?bGQ1aTUxc3FXMWdoQW9Ob0VmS1ZGUSswTXJiMkFFc2oxZ0Ria3p3ZnYvbE5X?= =?utf-8?B?QUdnQ0kzMHpWaEF5TjNXTVk3NHg3bk1wOWJBZFJZNDJzSExiQjc5WHVibFFU?= =?utf-8?B?WHA3V21YUW03ZTRycCs5TW9hVFp3WXVuK0x0a1gvQmxaRUxLLzc4Rnp4aUQr?= =?utf-8?B?eWkxb0oxaGpVbjFrT3RES2lPalV1TmZvUGNkc0EycEpvR2RkckNyTlhHY0Zm?= =?utf-8?B?Y1IvSE5BdnBIOXFleis1NXVBVHhxWXI3OWhuRVNLRWc4TStrMmtIdFF0aVJ2?= =?utf-8?B?Z2dwdzkrWXJZS1QvejBzblFRaVo1UXIxMlJaL0JyTFlaUmplankzYlVlZjIx?= =?utf-8?B?VlhoNFJOZ2FSVUJrUjZIRy9lMW5hTWkrcUxENStkKzd4a0xyQnJzVnNmK2hT?= =?utf-8?B?M1YvbXFwOCtmU1poRnQ5YVBIb2tCM3lWWFZlSlpLeGw0QXIzWWpvcE5JZHRI?= =?utf-8?B?YTc5eWkvV2hWRk9LcmlqbGlaM0RoWkx2SmptT0w0M0MwL2Y5OW5mTVVOQzBU?= =?utf-8?B?eFlRdXZBYVJLTFcyZVN2OUprWVEzdTk0UXFZMm9NSm01QTdmQnNwOHZMcHpJ?= =?utf-8?B?U2dYOWRVQlhnYkF0K1ZGT1R4OFQvTlVNLzkzZz09?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: spacex.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH1P110MB1186.NAMP110.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: cff69ac5-188b-4ef4-762d-08de726f3854 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Feb 2026 00:05:14.5042 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70922d1c-6e01-4d95-82dd-55b449e38bd1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1P110MB1183 X-Proofpoint-GUID: E_HW_UY41GXETZ4fqmxRYDDUlNfdx3Yw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjIyMDIzMCBTYWx0ZWRfXxnD1MXOegAd4 Fx+xPlz8n9y4gq6PzC3FRMlZaVVQIyjrZyKbcoSIBMa0qdE11FC75+ZDC5qGT5AcqlBLX8SfhH7 TOCfwN+XtryWx8lxpMtBkI65dxh7OFCkqijGkswSscZbVf8dSw4rSJWFw7wKvSZuFiORn/7II4D o4PkLNZUdQP/FtpjeAeItqJ/eHbm+Xo3bslIMz67Z9CiT1mM/HI5sUwpmqB22e9lx7W78FCOMb5 CtHqWLvXPS5PcIf+yqT2rj8SN/ozXrVHFxw4HBiK5YPDp0fxFDTnkwCfvBxo5DqvPjP0QiD9Bxz IeytfArOcfY/Cqf00nKfUBM796LAMLz4rx4fxjiY+cVHCJXx2mQ3i9tNdzbkEvi67Cpk5LzLq/p DepZRLj3 X-Proofpoint-ORIG-GUID: E_HW_UY41GXETZ4fqmxRYDDUlNfdx3Yw X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1011 bulkscore=0 malwarescore=0 impostorscore=0 adultscore=0 spamscore=0 mlxlogscore=999 phishscore=0 mlxscore=0 priorityscore=1501 suspectscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602220230 mlx5e_xdp_xmit() selects an XDP SQ (Send Queue) using smp_processor_id() (CPU ID). When doing XDP_REDIRECT from a CPU whose ID is >=3D priv->channels.num, mlx5e_xdp_xmit() returns -ENXIO and the redirect fails. Previous discussion proposed using modulo in mlx5e_xdp_xmit() to map CPU IDs into the channel range, but modulo/division is too costly in the hot path. Instead, this solution precomputes per-cpu priv->xdpsq assignments when channels are (re)configured and does a single lookup in mlx5e_xdp_xmit(). Because multiple CPUs map to the same xdpsq when CPU count exceeds channel count, serialize xdp_xmit on the ring with xdp_tx_lock. Fixes: 58b99ee3e3eb ("net/mlx5e: Add support for XDP_REDIRECT in device-out= side") Link: https://lore.kernel.org/netdev/20251031231038.1092673-1-zijianzhang@b= ytedance.com/ Link: https://lore.kernel.org/netdev/44f69955-b566-4fb1-904d-f551046ff2d4@g= mail.com Cc: stable@vger.kernel.org # 6.12+ Signed-off-by: Finn Dayton --- Testing: - XDP forwarding / XDP_REDIRECT verified with both low CPU ids and CPU ids > than number of send queues. - No -ENXIO observed, successful forwarding. drivers/net/ethernet/mellanox/mlx5/core/en.h | 4 +++ .../net/ethernet/mellanox/mlx5/core/en/xdp.c | 16 +++++++---- .../net/ethernet/mellanox/mlx5/core/en_main.c | 28 +++++++++++++++++++ 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/eth= ernet/mellanox/mlx5/core/en.h index ea2cd1f5d1d0..387954201640 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h @@ -519,6 +519,8 @@ struct mlx5e_xdpsq { /* control path */ struct mlx5_wq_ctrl wq_ctrl; struct mlx5e_channel *channel; + /* serialize writes by multiple CPUs to this send queue */ + spinlock_t xdp_tx_lock; } ____cacheline_aligned_in_smp; =20 struct mlx5e_xdp_buff { @@ -909,6 +911,8 @@ struct mlx5e_priv { struct mlx5e_rq drop_rq; =20 struct mlx5e_channels channels; + /* selects the xdpsq during mlx5e_xdp_xmit() */ + int __percpu *send_queue_idx_ptr; struct mlx5e_rx_res *rx_res; u32 *tx_rates; =20 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c b/drivers/net= /ethernet/mellanox/mlx5/core/en/xdp.c index 80f9fc10877a..2dd44ad873a1 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c @@ -845,7 +845,7 @@ int mlx5e_xdp_xmit(struct net_device *dev, int n, struc= t xdp_frame **frames, struct mlx5e_priv *priv =3D netdev_priv(dev); struct mlx5e_xdpsq *sq; int nxmit =3D 0; - int sq_num; + int send_queue_idx =3D 0; int i; =20 /* this flag is sufficient, no need to test internal sq state */ @@ -855,13 +855,19 @@ int mlx5e_xdp_xmit(struct net_device *dev, int n, str= uct xdp_frame **frames, if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK)) return -EINVAL; =20 - sq_num =3D smp_processor_id(); =20 - if (unlikely(sq_num >=3D priv->channels.num)) + if (unlikely(!priv->send_queue_idx_ptr)) return -ENXIO; =20 - sq =3D priv->channels.c[sq_num]->xdpsq; + send_queue_idx =3D *this_cpu_ptr(priv->send_queue_idx_ptr); + if (unlikely(send_queue_idx >=3D priv->channels.num || send_queue_idx < 0= )) + return -ENXIO; =20 + sq =3D priv->channels.c[send_queue_idx]->xdpsq; + /* The number of queues configured on a netdev may be smaller than the + * CPU pool, so two CPUs might map to this queue. We must serialize write= s. + */ + spin_lock(&sq->xdp_tx_lock); for (i =3D 0; i < n; i++) { struct mlx5e_xmit_data_frags xdptxdf =3D {}; struct xdp_frame *xdpf =3D frames[i]; @@ -941,7 +947,7 @@ int mlx5e_xdp_xmit(struct net_device *dev, int n, struc= t xdp_frame **frames, =20 if (flags & XDP_XMIT_FLUSH) mlx5e_xmit_xdp_doorbell(sq); - + spin_unlock(&sq->xdp_tx_lock); return nxmit; } =20 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/ne= t/ethernet/mellanox/mlx5/core/en_main.c index 7eb691c2a1bd..adef35d06b89 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -1492,6 +1492,7 @@ static int mlx5e_alloc_xdpsq(struct mlx5e_channel *c, sq->pdev =3D c->pdev; sq->mkey_be =3D c->mkey_be; sq->channel =3D c; + spin_lock_init(&sq->xdp_tx_lock); sq->uar_map =3D c->bfreg->map; sq->min_inline_mode =3D params->tx_min_inline_mode; sq->hw_mtu =3D MLX5E_SW2HW_MTU(params, params->sw_mtu) - ETH_FCS_LEN; @@ -3283,10 +3284,30 @@ static void mlx5e_build_txq_maps(struct mlx5e_priv = *priv) smp_wmb(); } =20 +static void build_priv_to_xdpsq_associations(struct mlx5e_priv *priv) +{ + /* + * Build the mapping from CPU to XDP send queue index for priv. + * This is used by mlx5e_xdp_xmit() to determine which xdpsq (send queue) + * should handle the xdptx data, based on the CPU running mlx5e_xdp_xmit() + * and the target priv (netdev). + */ + int send_queue_idx, cpu; + + if (unlikely(priv->channels.num =3D=3D 0)) + return; + + for_each_possible_cpu(cpu) { + send_queue_idx =3D cpu % priv->channels.num; + *per_cpu_ptr(priv->send_queue_idx_ptr, cpu) =3D send_queue_idx; + } +} + void mlx5e_activate_priv_channels(struct mlx5e_priv *priv) { mlx5e_build_txq_maps(priv); mlx5e_activate_channels(priv, &priv->channels); + build_priv_to_xdpsq_associations(priv); mlx5e_xdp_tx_enable(priv); =20 /* dev_watchdog() wants all TX queues to be started when the carrier is @@ -6263,8 +6284,14 @@ int mlx5e_priv_init(struct mlx5e_priv *priv, if (!priv->fec_ranges) goto err_free_channel_stats; =20 + priv->send_queue_idx_ptr =3D alloc_percpu(int); + if (!priv->send_queue_idx_ptr) + goto err_free_fec_ranges; + return 0; =20 +err_free_fec_ranges: + kfree(priv->fec_ranges); err_free_channel_stats: kfree(priv->channel_stats); err_free_tx_rates: @@ -6295,6 +6322,7 @@ void mlx5e_priv_cleanup(struct mlx5e_priv *priv) for (i =3D 0; i < priv->stats_nch; i++) kvfree(priv->channel_stats[i]); kfree(priv->channel_stats); + free_percpu(priv->send_queue_idx_ptr); kfree(priv->tx_rates); kfree(priv->txq2sq_stats); kfree(priv->txq2sq); --=20 2.43.0