From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1962C470AE for ; Sun, 21 Dec 2025 16:04:38 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E7D0B402B5; Sun, 21 Dec 2025 16:04:37 +0100 (CET) Received: from CH5PR02CU005.outbound.protection.outlook.com (mail-northcentralusazon11012028.outbound.protection.outlook.com [40.107.200.28]) by mails.dpdk.org (Postfix) with ESMTP id BABED402B5 for ; Sun, 21 Dec 2025 16:04:36 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kpIo/9v13jf7piq9o7V10okwFyoos1ICpU19vU/T7nu8OcKyfaWEQMXw3yPDDRUTitQ3tK/4dSHxZtS0dEL/ZVVMGSi4aUjl1wf/MUG6GFkkPqjBT+PixJDcA0bnSANU7MjmJ4YmLhBMBs///sgn/Yrh0zx564B9MKspiBzqWir4uQuzvOvlVEsUFgZALa9LnRjM88F0NaFD33vNS0u4qnIb1eMESMjAq15K9yn1d6mmnrOsKYeJ7lHn8itL+V9+aO/GnNXCHJdljtt2wxdaJY8DYjzrxsVuUPngsG1EVgdj1S+5JQBz1Y8IdJ14TXAtT+pckfTbutYfR2i5Kg4Ssg== 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=ApUst5AYEoRCWgy+cqMqbNJOF9QZlhRKknutJCWapRs=; b=IDNaxOoxhWzlekbJtblsOuAEZj/aOMnoRdZkmF+GgkquCsfhUJ2KUPLAhGd+jVZzKw3Dav2NTh+w4c4udujj6DjoqXjb9QAJxrtFr0BzBdlGsu66N5vLh7OE50QbLxmXC2OI4J022UdCjPOGxtwpYF1HfE1iuAhgZyz8bbJSmHkKoiyvLuNqyKId2CT6gEdr9JmmlsZlGAIWRzdkhtI5MVFqJr+gIBamZAoayK3jBFrwnZCzM0wTRXvzrTO6l/MMojw3F3R0TcvPiklM2zUZ2hpsqG5Y07DAMr6J+18BwF6IggKagzCBTJpCOcA1VjZoFQq/4SW8e3jCPawMb7BKnw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ApUst5AYEoRCWgy+cqMqbNJOF9QZlhRKknutJCWapRs=; b=qYnv2gwKj64cbdzw735L9TSmQmk3YhpgyLtoRtCqJDtJb3gH5qC9/s9dB/2vJh0FvjHSOVH0CBBnT0QCe+noOFrR7mrv4lHos7oWvnJ7M/8g78N+K7p6fp3T7jySWCgb6Q0aQTfvGkwxthfZblXgLDX12aHkPEFzd6fczsvvE12S/uzuWkraVQorCW5S1647149aqLtovhxr7QK/EFtO4EkIWYLA1oXM1lcH9iQlT8N/az29E1ZZv5DDnGFR183VHtR662oAIK3K302i3ziND9HzPHDx7xQeDP3x3J0ygs7uuJOKDwa1liPmCnEm2ES5Ux7h23Ufts+J/wCPG4NGkg== Received: from BY1P220CA0004.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:59d::15) by CY1PR12MB9601.namprd12.prod.outlook.com (2603:10b6:930:107::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.10; Sun, 21 Dec 2025 15:04:21 +0000 Received: from SJ5PEPF0000020A.namprd05.prod.outlook.com (2603:10b6:a03:59d:cafe::ca) by BY1P220CA0004.outlook.office365.com (2603:10b6:a03:59d::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9434.11 via Frontend Transport; Sun, 21 Dec 2025 15:04:41 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SJ5PEPF0000020A.mail.protection.outlook.com (10.167.244.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6 via Frontend Transport; Sun, 21 Dec 2025 15:04:19 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 21 Dec 2025 07:04:05 -0800 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 21 Dec 2025 07:04:04 -0800 Received: from nvidia.com (10.127.8.12) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Sun, 21 Dec 2025 07:04:03 -0800 From: Shani Peretz To: David Marchand CC: Stephen Hemminger , dpdk stable Subject: patch 'net/tap: fix build with LTO' has been queued to stable release 23.11.6 Date: Sun, 21 Dec 2025 16:57:07 +0200 Message-ID: <20251221145746.763179-79-shperetz@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251221145746.763179-1-shperetz@nvidia.com> References: <20251221145746.763179-1-shperetz@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF0000020A:EE_|CY1PR12MB9601:EE_ X-MS-Office365-Filtering-Correlation-Id: 70cf4c84-cb28-4c4c-7780-08de40a237f7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024|7053199007|13003099007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?QPa3Ggwz9G4dpdm6kltHQjUL1aJI3o+dMuAMkrNiyVugMJLPXTxjlA130bpl?= =?us-ascii?Q?Rt+ET3KBknKFuBsO9m5W/qhVtYVR2kXe44Mt05Cy+NioFYRe9x1qCAWQoJkr?= =?us-ascii?Q?NIxR3dXEa2+wo//hWmYpY7NE0FsE2RzWpehu3rGZ4f5h5c+QFCD4TZkxB4sa?= =?us-ascii?Q?1TbD2Sfy1szyxxXjNASioXM7uwUTlKFaPx3E5Y9ftt2JKxlRPeG0wnqgSnoF?= =?us-ascii?Q?GTeDy1cLqsLwcAp9kfSYzjDDBE3eCo+04GkrNdoEPGZmpYPeXBNbS9ZoRRe/?= =?us-ascii?Q?C23qaN8evvxuGQBtVisZPdN6Eie1wNm8+dRpECFzNqisQvL4iXRA1Ex+Q3yK?= =?us-ascii?Q?jchxDeYPi1TzrrwBX5dVwiR7EJkaqZ8FoAPwKXWcBlW6n+QXyAVlJ1q1Iefu?= =?us-ascii?Q?+c12T40J46qegH5tFZlGhujaK4YkrgVXo5eNsn29oMavjQ9/gjRGfteqZKHp?= =?us-ascii?Q?eOgRl2WZ8fJADzZzzmqHD4Bj4XaKGOwxrY8k4tzZXdBlIoHtPYrb88vN1W2I?= =?us-ascii?Q?p48qp01CgUQndb1m4EFoCaR7llKUS7Epr7P9/Lw1b+PREN9Q8amEGNOVPY05?= =?us-ascii?Q?HCYNyrb1dJkqSGHPGlKF3UOb+ex1GvlNMqujJk8m02v3DgYemCpJ7cXE3MRp?= =?us-ascii?Q?SHR6lnzqrBrHK0/fGfyJUlWQanN9xN2WSTYZ7d6CS7I4zirvWdidwSx1O+iK?= =?us-ascii?Q?S1SqCpTpocDqbU/H9bZ3xUDERzVY4eBMkNzXJV4XyRd+nuJma9uIZclaFTE9?= =?us-ascii?Q?b+jxxilzUeBMC7zuxybhri27Uhx/WloXyQq4psIZAdQsGUH4Ub4Q6PQ5Iz/l?= =?us-ascii?Q?/CRinXYSRyU/yCoeM6osPwBybGDRw8wuth2pHbnyJWsFdj66hjFxjhvkc0v/?= =?us-ascii?Q?e0oa6LdOXTZZU/cMOh3d9x8MQWzjlvapt2y5yVvB24RHDt0PnmW0qxSYSlkP?= =?us-ascii?Q?gJtYywjTHEzaovM9GGqQDqnBDBc88uKv+yIl6Exov9GVQ+gTPYRSXSpnya6E?= =?us-ascii?Q?+Mpcv1HQl6zpfQy3u32ujD0TlpofUYQXLKnRuJ67g8i0kh7RG9I80qorN6Yj?= =?us-ascii?Q?NtZ8wNa5SimvSacWBHdh09RRqH0qzW9vqXO6V4kwNjms9Iu9DDuvpAKVVTGu?= =?us-ascii?Q?3R3TEmleV7dbXkJ9AeHBfk5B7WbdpVNYWKIEyTHQYbukXZYpSZo8wGv5HcB3?= =?us-ascii?Q?eMqXJXfx+U70QzMAwb95URz+2/VibC691OZtHlp70tbndKLSc76ZpfHbprmA?= =?us-ascii?Q?CQ48a+bM1xp254OokDWKeEvYjVD5lw3n32mRUT0Yp+UtiHqJG3IyVqJBnlJo?= =?us-ascii?Q?HtfyHp4tdG3XGcF+AFDMExHP83oafxUNzs8FjGP9u1qEnBH0+DsibMijAApT?= =?us-ascii?Q?eRLyTgguBBxUrU4ERGu2oBdPbg6Yd+eDxH9WDL5UKnkQQlevC6GDTH26i2C4?= =?us-ascii?Q?/Gp82Zw5+sXuzexgwzQ1cs/K9hqE80BCqP7XGQ/K/oDnGGOzyiN+blj16byv?= =?us-ascii?Q?EXecl2i7e92VOgYOpyjB7WBingvHz+49xiYxi2b4JoYccbDLw/KaXZ58EGHr?= =?us-ascii?Q?mDVv7lSm2SycAMS+2cpgZqBOJYty9hlCrFEO4V04?= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024)(7053199007)(13003099007); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Dec 2025 15:04:19.9766 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 70cf4c84-cb28-4c4c-7780-08de40a237f7 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF0000020A.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB9601 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 23.11.6 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 12/26/25. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/shanipr/dpdk-stable This queued commit can be viewed at: https://github.com/shanipr/dpdk-stable/commit/4f83e9a5d1a8051ce5837585c983a1ace8a35090 Thanks. Shani --- >From 4f83e9a5d1a8051ce5837585c983a1ace8a35090 Mon Sep 17 00:00:00 2001 From: David Marchand Date: Wed, 29 Oct 2025 15:27:50 +0100 Subject: [PATCH] net/tap: fix build with LTO [ upstream commit adb95cc6644103d055609f5bcae5df91afea02ab ] The compiler has trouble understanding that the code is actually pointing at the data in the message past the nh struct. Update the tap_nlattr_add* helpers and the NLMSG_TAIL macro passing a pointer to msg. Bugzilla ID: 1511 Fixes: 7c25284e30c2 ("net/tap: add netlink back-end for flow API") Signed-off-by: David Marchand Acked-by: Stephen Hemminger --- drivers/net/tap/tap_flow.c | 124 +++++++++++++--------------------- drivers/net/tap/tap_netlink.c | 24 +++---- drivers/net/tap/tap_netlink.h | 10 +-- drivers/net/tap/tap_tcmsgs.c | 6 +- 4 files changed, 68 insertions(+), 96 deletions(-) diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c index 79cd6a12ca..b32ad7eaa5 100644 --- a/drivers/net/tap/tap_flow.c +++ b/drivers/net/tap/tap_flow.c @@ -539,20 +539,16 @@ tap_flow_create_eth(const struct rte_flow_item *item, void *data) return 0; msg = &flow->msg; if (!rte_is_zero_ether_addr(&mask->hdr.dst_addr)) { - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_ETH_DST, - RTE_ETHER_ADDR_LEN, - &spec->hdr.dst_addr.addr_bytes); - tap_nlattr_add(&msg->nh, - TCA_FLOWER_KEY_ETH_DST_MASK, RTE_ETHER_ADDR_LEN, - &mask->hdr.dst_addr.addr_bytes); + tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_DST, RTE_ETHER_ADDR_LEN, + &spec->hdr.dst_addr.addr_bytes); + tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_DST_MASK, RTE_ETHER_ADDR_LEN, + &mask->hdr.dst_addr.addr_bytes); } if (!rte_is_zero_ether_addr(&mask->hdr.src_addr)) { - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_ETH_SRC, - RTE_ETHER_ADDR_LEN, + tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_SRC, RTE_ETHER_ADDR_LEN, &spec->hdr.src_addr.addr_bytes); - tap_nlattr_add(&msg->nh, - TCA_FLOWER_KEY_ETH_SRC_MASK, RTE_ETHER_ADDR_LEN, - &mask->hdr.src_addr.addr_bytes); + tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_SRC_MASK, RTE_ETHER_ADDR_LEN, + &mask->hdr.src_addr.addr_bytes); } return 0; } @@ -608,11 +604,9 @@ tap_flow_create_vlan(const struct rte_flow_item *item, void *data) uint8_t vid = VLAN_ID(tci); if (prio) - tap_nlattr_add8(&msg->nh, - TCA_FLOWER_KEY_VLAN_PRIO, prio); + tap_nlattr_add8(msg, TCA_FLOWER_KEY_VLAN_PRIO, prio); if (vid) - tap_nlattr_add16(&msg->nh, - TCA_FLOWER_KEY_VLAN_ID, vid); + tap_nlattr_add16(msg, TCA_FLOWER_KEY_VLAN_ID, vid); } return 0; } @@ -655,20 +649,15 @@ tap_flow_create_ipv4(const struct rte_flow_item *item, void *data) if (!spec) return 0; if (mask->hdr.dst_addr) { - tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_DST, - spec->hdr.dst_addr); - tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_DST_MASK, - mask->hdr.dst_addr); + tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_DST, spec->hdr.dst_addr); + tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_DST_MASK, mask->hdr.dst_addr); } if (mask->hdr.src_addr) { - tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_SRC, - spec->hdr.src_addr); - tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_SRC_MASK, - mask->hdr.src_addr); + tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_SRC, spec->hdr.src_addr); + tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_SRC_MASK, mask->hdr.src_addr); } if (spec->hdr.next_proto_id) - tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO, - spec->hdr.next_proto_id); + tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, spec->hdr.next_proto_id); return 0; } @@ -711,20 +700,19 @@ tap_flow_create_ipv6(const struct rte_flow_item *item, void *data) if (!spec) return 0; if (memcmp(mask->hdr.dst_addr, empty_addr, 16)) { - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_DST, - sizeof(spec->hdr.dst_addr), &spec->hdr.dst_addr); - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_DST_MASK, - sizeof(mask->hdr.dst_addr), &mask->hdr.dst_addr); + tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_DST, sizeof(spec->hdr.dst_addr), + &spec->hdr.dst_addr); + tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_DST_MASK, sizeof(mask->hdr.dst_addr), + &mask->hdr.dst_addr); } if (memcmp(mask->hdr.src_addr, empty_addr, 16)) { - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_SRC, - sizeof(spec->hdr.src_addr), &spec->hdr.src_addr); - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_SRC_MASK, - sizeof(mask->hdr.src_addr), &mask->hdr.src_addr); + tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_SRC, sizeof(spec->hdr.src_addr), + &spec->hdr.src_addr); + tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_SRC_MASK, sizeof(mask->hdr.src_addr), + &mask->hdr.src_addr); } if (spec->hdr.proto) - tap_nlattr_add8(&msg->nh, - TCA_FLOWER_KEY_IP_PROTO, spec->hdr.proto); + tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, spec->hdr.proto); return 0; } @@ -762,15 +750,13 @@ tap_flow_create_udp(const struct rte_flow_item *item, void *data) if (!flow) return 0; msg = &flow->msg; - tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_UDP); + tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_UDP); if (!spec) return 0; if (mask->hdr.dst_port) - tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_UDP_DST, - spec->hdr.dst_port); + tap_nlattr_add16(msg, TCA_FLOWER_KEY_UDP_DST, spec->hdr.dst_port); if (mask->hdr.src_port) - tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_UDP_SRC, - spec->hdr.src_port); + tap_nlattr_add16(msg, TCA_FLOWER_KEY_UDP_SRC, spec->hdr.src_port); return 0; } @@ -808,15 +794,13 @@ tap_flow_create_tcp(const struct rte_flow_item *item, void *data) if (!flow) return 0; msg = &flow->msg; - tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_TCP); + tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_TCP); if (!spec) return 0; if (mask->hdr.dst_port) - tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_TCP_DST, - spec->hdr.dst_port); + tap_nlattr_add16(msg, TCA_FLOWER_KEY_TCP_DST, spec->hdr.dst_port); if (mask->hdr.src_port) - tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_TCP_SRC, - spec->hdr.src_port); + tap_nlattr_add16(msg, TCA_FLOWER_KEY_TCP_SRC, spec->hdr.src_port); return 0; } @@ -924,35 +908,27 @@ add_action(struct rte_flow *flow, size_t *act_index, struct action_data *adata) if (tap_nlattr_nested_start(msg, (*act_index)++) < 0) return -1; - tap_nlattr_add(&msg->nh, TCA_ACT_KIND, - strlen(adata->id) + 1, adata->id); + tap_nlattr_add(msg, TCA_ACT_KIND, strlen(adata->id) + 1, adata->id); if (tap_nlattr_nested_start(msg, TCA_ACT_OPTIONS) < 0) return -1; if (strcmp("gact", adata->id) == 0) { - tap_nlattr_add(&msg->nh, TCA_GACT_PARMS, sizeof(adata->gact), - &adata->gact); + tap_nlattr_add(msg, TCA_GACT_PARMS, sizeof(adata->gact), &adata->gact); } else if (strcmp("mirred", adata->id) == 0) { if (adata->mirred.eaction == TCA_EGRESS_MIRROR) adata->mirred.action = TC_ACT_PIPE; else /* REDIRECT */ adata->mirred.action = TC_ACT_STOLEN; - tap_nlattr_add(&msg->nh, TCA_MIRRED_PARMS, - sizeof(adata->mirred), - &adata->mirred); + tap_nlattr_add(msg, TCA_MIRRED_PARMS, sizeof(adata->mirred), &adata->mirred); } else if (strcmp("skbedit", adata->id) == 0) { - tap_nlattr_add(&msg->nh, TCA_SKBEDIT_PARMS, - sizeof(adata->skbedit.skbedit), - &adata->skbedit.skbedit); - tap_nlattr_add16(&msg->nh, TCA_SKBEDIT_QUEUE_MAPPING, - adata->skbedit.queue); + tap_nlattr_add(msg, TCA_SKBEDIT_PARMS, sizeof(adata->skbedit.skbedit), + &adata->skbedit.skbedit); + tap_nlattr_add16(msg, TCA_SKBEDIT_QUEUE_MAPPING, adata->skbedit.queue); } else if (strcmp("bpf", adata->id) == 0) { - tap_nlattr_add32(&msg->nh, TCA_ACT_BPF_FD, adata->bpf.bpf_fd); - tap_nlattr_add(&msg->nh, TCA_ACT_BPF_NAME, - strlen(adata->bpf.annotation) + 1, - adata->bpf.annotation); - tap_nlattr_add(&msg->nh, TCA_ACT_BPF_PARMS, - sizeof(adata->bpf.bpf), - &adata->bpf.bpf); + tap_nlattr_add32(msg, TCA_ACT_BPF_FD, adata->bpf.bpf_fd); + tap_nlattr_add(msg, TCA_ACT_BPF_NAME, strlen(adata->bpf.annotation) + 1, + adata->bpf.annotation); + tap_nlattr_add(msg, TCA_ACT_BPF_PARMS, sizeof(adata->bpf.bpf), + &adata->bpf.bpf); } else { return -1; } @@ -1082,7 +1058,7 @@ priv_flow_process(struct pmd_internals *pmd, TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0); } /* use flower filter type */ - tap_nlattr_add(&flow->msg.nh, TCA_KIND, sizeof("flower"), "flower"); + tap_nlattr_add(&flow->msg, TCA_KIND, sizeof("flower"), "flower"); if (tap_nlattr_nested_start(&flow->msg, TCA_OPTIONS) < 0) { rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_ACTION, actions, "could not allocated netlink msg"); @@ -1122,15 +1098,11 @@ priv_flow_process(struct pmd_internals *pmd, } if (flow) { if (data.vlan) { - tap_nlattr_add16(&flow->msg.nh, TCA_FLOWER_KEY_ETH_TYPE, - htons(ETH_P_8021Q)); - tap_nlattr_add16(&flow->msg.nh, - TCA_FLOWER_KEY_VLAN_ETH_TYPE, - data.eth_type ? - data.eth_type : htons(ETH_P_ALL)); + tap_nlattr_add16(&flow->msg, TCA_FLOWER_KEY_ETH_TYPE, htons(ETH_P_8021Q)); + tap_nlattr_add16(&flow->msg, TCA_FLOWER_KEY_VLAN_ETH_TYPE, + data.eth_type ? data.eth_type : htons(ETH_P_ALL)); } else if (data.eth_type) { - tap_nlattr_add16(&flow->msg.nh, TCA_FLOWER_KEY_ETH_TYPE, - data.eth_type); + tap_nlattr_add16(&flow->msg, TCA_FLOWER_KEY_ETH_TYPE, data.eth_type); } } if (mirred && flow) { @@ -1923,13 +1895,13 @@ static int rss_enable(struct pmd_internals *pmd, msg->t.tcm_info = TC_H_MAKE(prio << 16, msg->t.tcm_info); msg->t.tcm_parent = TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0); - tap_nlattr_add(&msg->nh, TCA_KIND, sizeof("bpf"), "bpf"); + tap_nlattr_add(msg, TCA_KIND, sizeof("bpf"), "bpf"); if (tap_nlattr_nested_start(msg, TCA_OPTIONS) < 0) return -1; - tap_nlattr_add32(&msg->nh, TCA_BPF_FD, pmd->bpf_fd[i]); + tap_nlattr_add32(msg, TCA_BPF_FD, pmd->bpf_fd[i]); snprintf(annotation, sizeof(annotation), "[%s%d]", SEC_NAME_CLS_Q, i); - tap_nlattr_add(&msg->nh, TCA_BPF_NAME, strlen(annotation) + 1, + tap_nlattr_add(msg, TCA_BPF_NAME, strlen(annotation) + 1, annotation); /* Actions */ { diff --git a/drivers/net/tap/tap_netlink.c b/drivers/net/tap/tap_netlink.c index c1f7ff56da..98f48a399a 100644 --- a/drivers/net/tap/tap_netlink.c +++ b/drivers/net/tap/tap_netlink.c @@ -292,18 +292,18 @@ retry: * The data to append. */ void -tap_nlattr_add(struct nlmsghdr *nh, unsigned short type, +tap_nlattr_add(struct nlmsg *msg, unsigned short type, unsigned int data_len, const void *data) { /* see man 3 rtnetlink */ struct rtattr *rta; - rta = (struct rtattr *)NLMSG_TAIL(nh); + rta = (struct rtattr *)NLMSG_TAIL(msg); rta->rta_len = RTA_LENGTH(data_len); rta->rta_type = type; if (data_len > 0) memcpy(RTA_DATA(rta), data, data_len); - nh->nlmsg_len = NLMSG_ALIGN(nh->nlmsg_len) + RTA_ALIGN(rta->rta_len); + msg->nh.nlmsg_len = NLMSG_ALIGN(msg->nh.nlmsg_len) + RTA_ALIGN(rta->rta_len); } /** @@ -317,9 +317,9 @@ tap_nlattr_add(struct nlmsghdr *nh, unsigned short type, * The data to append. */ void -tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data) +tap_nlattr_add8(struct nlmsg *msg, unsigned short type, uint8_t data) { - tap_nlattr_add(nh, type, sizeof(uint8_t), &data); + tap_nlattr_add(msg, type, sizeof(uint8_t), &data); } /** @@ -333,9 +333,9 @@ tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data) * The data to append. */ void -tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data) +tap_nlattr_add16(struct nlmsg *msg, unsigned short type, uint16_t data) { - tap_nlattr_add(nh, type, sizeof(uint16_t), &data); + tap_nlattr_add(msg, type, sizeof(uint16_t), &data); } /** @@ -349,9 +349,9 @@ tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data) * The data to append. */ void -tap_nlattr_add32(struct nlmsghdr *nh, unsigned short type, uint32_t data) +tap_nlattr_add32(struct nlmsg *msg, unsigned short type, uint32_t data) { - tap_nlattr_add(nh, type, sizeof(uint32_t), &data); + tap_nlattr_add(msg, type, sizeof(uint32_t), &data); } /** @@ -378,9 +378,9 @@ tap_nlattr_nested_start(struct nlmsg *msg, uint16_t type) return -1; } - tail->tail = (struct rtattr *)NLMSG_TAIL(&msg->nh); + tail->tail = (struct rtattr *)NLMSG_TAIL(msg); - tap_nlattr_add(&msg->nh, type, 0, NULL); + tap_nlattr_add(msg, type, 0, NULL); tail->prev = msg->nested_tails; @@ -403,7 +403,7 @@ tap_nlattr_nested_finish(struct nlmsg *msg) { struct nested_tail *tail = msg->nested_tails; - tail->tail->rta_len = (char *)NLMSG_TAIL(&msg->nh) - (char *)tail->tail; + tail->tail->rta_len = (char *)NLMSG_TAIL(msg) - (char *)tail->tail; if (tail->prev) msg->nested_tails = tail->prev; diff --git a/drivers/net/tap/tap_netlink.h b/drivers/net/tap/tap_netlink.h index faa73ba163..c1493b6bf0 100644 --- a/drivers/net/tap/tap_netlink.h +++ b/drivers/net/tap/tap_netlink.h @@ -23,7 +23,7 @@ struct nlmsg { struct nested_tail *nested_tails; }; -#define NLMSG_TAIL(nlh) (void *)((char *)(nlh) + NLMSG_ALIGN((nlh)->nlmsg_len)) +#define NLMSG_TAIL(msg) (void *)((char *)(msg) + NLMSG_ALIGN((msg)->nh.nlmsg_len)) int tap_nl_init(uint32_t nl_groups); int tap_nl_final(int nlsk_fd); @@ -31,11 +31,11 @@ int tap_nl_send(int nlsk_fd, struct nlmsghdr *nh); int tap_nl_recv(int nlsk_fd, int (*callback)(struct nlmsghdr *, void *), void *arg); int tap_nl_recv_ack(int nlsk_fd); -void tap_nlattr_add(struct nlmsghdr *nh, unsigned short type, +void tap_nlattr_add(struct nlmsg *msg, unsigned short type, unsigned int data_len, const void *data); -void tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data); -void tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data); -void tap_nlattr_add32(struct nlmsghdr *nh, unsigned short type, uint32_t data); +void tap_nlattr_add8(struct nlmsg *msg, unsigned short type, uint8_t data); +void tap_nlattr_add16(struct nlmsg *msg, unsigned short type, uint16_t data); +void tap_nlattr_add32(struct nlmsg *msg, unsigned short type, uint32_t data); int tap_nlattr_nested_start(struct nlmsg *msg, uint16_t type); void tap_nlattr_nested_finish(struct nlmsg *msg); diff --git a/drivers/net/tap/tap_tcmsgs.c b/drivers/net/tap/tap_tcmsgs.c index 24a0423a0e..f811deef24 100644 --- a/drivers/net/tap/tap_tcmsgs.c +++ b/drivers/net/tap/tap_tcmsgs.c @@ -123,8 +123,8 @@ qdisc_add_multiq(int nlsk_fd, unsigned int ifindex) NLM_F_REQUEST | NLM_F_ACK | NLM_F_EXCL | NLM_F_CREATE); msg.t.tcm_handle = TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0); msg.t.tcm_parent = TC_H_ROOT; - tap_nlattr_add(&msg.nh, TCA_KIND, sizeof("multiq"), "multiq"); - tap_nlattr_add(&msg.nh, TCA_OPTIONS, sizeof(opt), &opt); + tap_nlattr_add(&msg, TCA_KIND, sizeof("multiq"), "multiq"); + tap_nlattr_add(&msg, TCA_OPTIONS, sizeof(opt), &opt); if (tap_nl_send(nlsk_fd, &msg.nh) < 0) return -1; if (tap_nl_recv_ack(nlsk_fd) < 0) @@ -152,7 +152,7 @@ qdisc_add_ingress(int nlsk_fd, unsigned int ifindex) NLM_F_REQUEST | NLM_F_ACK | NLM_F_EXCL | NLM_F_CREATE); msg.t.tcm_handle = TC_H_MAKE(TC_H_INGRESS, 0); msg.t.tcm_parent = TC_H_INGRESS; - tap_nlattr_add(&msg.nh, TCA_KIND, sizeof("ingress"), "ingress"); + tap_nlattr_add(&msg, TCA_KIND, sizeof("ingress"), "ingress"); if (tap_nl_send(nlsk_fd, &msg.nh) < 0) return -1; if (tap_nl_recv_ack(nlsk_fd) < 0) -- 2.43.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-12-21 16:54:21.113834822 +0200 +++ 0079-net-tap-fix-build-with-LTO.patch 2025-12-21 16:54:17.344060000 +0200 @@ -1 +1 @@ -From adb95cc6644103d055609f5bcae5df91afea02ab Mon Sep 17 00:00:00 2001 +From 4f83e9a5d1a8051ce5837585c983a1ace8a35090 Mon Sep 17 00:00:00 2001 @@ -3 +3 @@ -Date: Mon, 22 Sep 2025 09:30:43 +0200 +Date: Wed, 29 Oct 2025 15:27:50 +0100 @@ -5,0 +6,2 @@ +[ upstream commit adb95cc6644103d055609f5bcae5df91afea02ab ] + @@ -14 +15,0 @@ -Cc: stable@dpdk.org @@ -19 +20 @@ - drivers/net/tap/tap_flow.c | 117 +++++++++++++--------------------- + drivers/net/tap/tap_flow.c | 124 +++++++++++++--------------------- @@ -23 +24 @@ - 4 files changed, 65 insertions(+), 92 deletions(-) + 4 files changed, 68 insertions(+), 96 deletions(-) @@ -26 +27 @@ -index 373b773e2d..9d4ef27a8a 100644 +index 79cd6a12ca..b32ad7eaa5 100644 @@ -29 +30 @@ -@@ -430,20 +430,16 @@ tap_flow_create_eth(const struct rte_flow_item *item, struct convert_data *info) +@@ -539,20 +539,16 @@ tap_flow_create_eth(const struct rte_flow_item *item, void *data) @@ -57 +58 @@ -@@ -498,11 +494,9 @@ tap_flow_create_vlan(const struct rte_flow_item *item, struct convert_data *info +@@ -608,11 +604,9 @@ tap_flow_create_vlan(const struct rte_flow_item *item, void *data) @@ -71 +72 @@ -@@ -544,20 +538,15 @@ tap_flow_create_ipv4(const struct rte_flow_item *item, struct convert_data *info +@@ -655,20 +649,15 @@ tap_flow_create_ipv4(const struct rte_flow_item *item, void *data) @@ -97 +98 @@ -@@ -599,20 +588,19 @@ tap_flow_create_ipv6(const struct rte_flow_item *item, struct convert_data *info +@@ -711,20 +700,19 @@ tap_flow_create_ipv6(const struct rte_flow_item *item, void *data) @@ -100 +101 @@ - if (memcmp(&mask->hdr.dst_addr, empty_addr, 16)) { + if (memcmp(mask->hdr.dst_addr, empty_addr, 16)) { @@ -110 +111 @@ - if (memcmp(&mask->hdr.src_addr, empty_addr, 16)) { + if (memcmp(mask->hdr.src_addr, empty_addr, 16)) { @@ -127 +128 @@ -@@ -649,15 +637,13 @@ tap_flow_create_udp(const struct rte_flow_item *item, struct convert_data *info) +@@ -762,15 +750,13 @@ tap_flow_create_udp(const struct rte_flow_item *item, void *data) @@ -146 +147 @@ -@@ -694,15 +680,13 @@ tap_flow_create_tcp(const struct rte_flow_item *item, struct convert_data *info) +@@ -808,15 +794,13 @@ tap_flow_create_tcp(const struct rte_flow_item *item, void *data) @@ -165 +166 @@ -@@ -810,37 +794,30 @@ add_action(struct rte_flow *flow, size_t *act_index, struct action_data *adata) +@@ -924,35 +908,27 @@ add_action(struct rte_flow *flow, size_t *act_index, struct action_data *adata) @@ -189 +190,4 @@ -- sizeof(adata->skbedit.skbedit), &adata->skbedit.skbedit); +- sizeof(adata->skbedit.skbedit), +- &adata->skbedit.skbedit); +- tap_nlattr_add16(&msg->nh, TCA_SKBEDIT_QUEUE_MAPPING, +- adata->skbedit.queue); @@ -192,6 +196 @@ - if (adata->skbedit.mark) -- tap_nlattr_add32(&msg->nh, TCA_SKBEDIT_MARK, adata->skbedit.mark); -+ tap_nlattr_add32(msg, TCA_SKBEDIT_MARK, adata->skbedit.mark); - else -- tap_nlattr_add16(&msg->nh, TCA_SKBEDIT_QUEUE_MAPPING, adata->skbedit.queue); -+ tap_nlattr_add16(msg, TCA_SKBEDIT_QUEUE_MAPPING, adata->skbedit.queue); ++ tap_nlattr_add16(msg, TCA_SKBEDIT_QUEUE_MAPPING, adata->skbedit.queue); @@ -199 +197,0 @@ - #ifdef HAVE_BPF_RSS @@ -210,3 +208,3 @@ -+ tap_nlattr_add(msg, TCA_ACT_BPF_PARMS, sizeof(adata->bpf.bpf), &adata->bpf.bpf); - #else - TAP_LOG(ERR, "Internal error: bpf requested but not supported"); ++ tap_nlattr_add(msg, TCA_ACT_BPF_PARMS, sizeof(adata->bpf.bpf), ++ &adata->bpf.bpf); + } else { @@ -214 +212,2 @@ -@@ -975,7 +952,7 @@ priv_flow_process(struct pmd_internals *pmd, + } +@@ -1082,7 +1058,7 @@ priv_flow_process(struct pmd_internals *pmd, @@ -223 +222 @@ -@@ -1015,15 +992,11 @@ priv_flow_process(struct pmd_internals *pmd, +@@ -1122,15 +1098,11 @@ priv_flow_process(struct pmd_internals *pmd, @@ -242,0 +242,17 @@ +@@ -1923,13 +1895,13 @@ static int rss_enable(struct pmd_internals *pmd, + msg->t.tcm_info = TC_H_MAKE(prio << 16, msg->t.tcm_info); + msg->t.tcm_parent = TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0); + +- tap_nlattr_add(&msg->nh, TCA_KIND, sizeof("bpf"), "bpf"); ++ tap_nlattr_add(msg, TCA_KIND, sizeof("bpf"), "bpf"); + if (tap_nlattr_nested_start(msg, TCA_OPTIONS) < 0) + return -1; +- tap_nlattr_add32(&msg->nh, TCA_BPF_FD, pmd->bpf_fd[i]); ++ tap_nlattr_add32(msg, TCA_BPF_FD, pmd->bpf_fd[i]); + snprintf(annotation, sizeof(annotation), "[%s%d]", + SEC_NAME_CLS_Q, i); +- tap_nlattr_add(&msg->nh, TCA_BPF_NAME, strlen(annotation) + 1, ++ tap_nlattr_add(msg, TCA_BPF_NAME, strlen(annotation) + 1, + annotation); + /* Actions */ + { @@ -244 +260 @@ -index 8a57c9242c..5ff60f41d4 100644 +index c1f7ff56da..98f48a399a 100644 @@ -247 +263 @@ -@@ -293,18 +293,18 @@ retry: +@@ -292,18 +292,18 @@ retry: @@ -252 +268 @@ -+tap_nlattr_add(struct tap_nlmsg *msg, unsigned short type, ++tap_nlattr_add(struct nlmsg *msg, unsigned short type, @@ -269 +285 @@ -@@ -318,9 +318,9 @@ tap_nlattr_add(struct nlmsghdr *nh, unsigned short type, +@@ -317,9 +317,9 @@ tap_nlattr_add(struct nlmsghdr *nh, unsigned short type, @@ -274 +290 @@ -+tap_nlattr_add8(struct tap_nlmsg *msg, unsigned short type, uint8_t data) ++tap_nlattr_add8(struct nlmsg *msg, unsigned short type, uint8_t data) @@ -281 +297 @@ -@@ -334,9 +334,9 @@ tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data) +@@ -333,9 +333,9 @@ tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data) @@ -286 +302 @@ -+tap_nlattr_add16(struct tap_nlmsg *msg, unsigned short type, uint16_t data) ++tap_nlattr_add16(struct nlmsg *msg, unsigned short type, uint16_t data) @@ -293 +309 @@ -@@ -350,9 +350,9 @@ tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data) +@@ -349,9 +349,9 @@ tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data) @@ -298 +314 @@ -+tap_nlattr_add32(struct tap_nlmsg *msg, unsigned short type, uint32_t data) ++tap_nlattr_add32(struct nlmsg *msg, unsigned short type, uint32_t data) @@ -305 +321 @@ -@@ -379,9 +379,9 @@ tap_nlattr_nested_start(struct tap_nlmsg *msg, uint16_t type) +@@ -378,9 +378,9 @@ tap_nlattr_nested_start(struct nlmsg *msg, uint16_t type) @@ -317 +333 @@ -@@ -404,7 +404,7 @@ tap_nlattr_nested_finish(struct tap_nlmsg *msg) +@@ -403,7 +403,7 @@ tap_nlattr_nested_finish(struct nlmsg *msg) @@ -327 +343 @@ -index 466c47a6d7..5eff6edbb1 100644 +index faa73ba163..c1493b6bf0 100644 @@ -330 +346 @@ -@@ -23,7 +23,7 @@ struct tap_nlmsg { +@@ -23,7 +23,7 @@ struct nlmsg { @@ -344 +360 @@ -+void tap_nlattr_add(struct tap_nlmsg *msg, unsigned short type, ++void tap_nlattr_add(struct nlmsg *msg, unsigned short type, @@ -349,5 +365,5 @@ -+void tap_nlattr_add8(struct tap_nlmsg *msg, unsigned short type, uint8_t data); -+void tap_nlattr_add16(struct tap_nlmsg *msg, unsigned short type, uint16_t data); -+void tap_nlattr_add32(struct tap_nlmsg *msg, unsigned short type, uint32_t data); - int tap_nlattr_nested_start(struct tap_nlmsg *msg, uint16_t type); - void tap_nlattr_nested_finish(struct tap_nlmsg *msg); ++void tap_nlattr_add8(struct nlmsg *msg, unsigned short type, uint8_t data); ++void tap_nlattr_add16(struct nlmsg *msg, unsigned short type, uint16_t data); ++void tap_nlattr_add32(struct nlmsg *msg, unsigned short type, uint32_t data); + int tap_nlattr_nested_start(struct nlmsg *msg, uint16_t type); + void tap_nlattr_nested_finish(struct nlmsg *msg); @@ -356 +372 @@ -index caca9445c8..c32f0ff815 100644 +index 24a0423a0e..f811deef24 100644