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 67DB848AEF for ; Wed, 12 Nov 2025 17:54:38 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 613FC40DCD; Wed, 12 Nov 2025 17:54:38 +0100 (CET) Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) by mails.dpdk.org (Postfix) with ESMTP id 78D7240DC9 for ; Wed, 12 Nov 2025 17:54:37 +0100 (CET) Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-429c7869704so844231f8f.2 for ; Wed, 12 Nov 2025 08:54:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762966477; x=1763571277; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2fhhYpThyo7l2XuM8z5yQvSw+/9cBBakAOjuUH7I0FI=; b=J0cB728e3tjO24D4rQz1oMu9FJBc6v9pizvO7SlyF0ydVknyTYpwHn5wisCg14I+3Z jxlNw9NYlFkO8gm9w/Q1Esx5ynP3iSeZ+65GIPa5LhQj7ib95SEbdrMLlbJtw1h/bDG/ 0i7r5vXroVrHLrcFIrCH3p08k4qfT1qoLi1ohGasn1cLYIMOSttcqNdQAtBa3rrFfg1C NByUlk2FccoOJjgHE+DbGAgudjgtJHCAsrGM8rq7HbMxgxRcsjiPBwFfXVWoxcZQOlFo ve4/u7pL4c2w8oGWGn48LHgJuqp4S6ibIUiOLgDD+pfbWPtoZNEPp0XIW9oX6Q0L/1Q7 /HPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762966477; x=1763571277; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=2fhhYpThyo7l2XuM8z5yQvSw+/9cBBakAOjuUH7I0FI=; b=FO9zG4nrB/veGx/xcsX4FjDVDp6jkSk5Jw5G7N9lHsARgUliZX1cyXEwikwJqSujtE ulZSbuU7W9e4lyTTArrYevGNBJghMX96fJ/q07geueWI97ZJrJzH3z+/OQ91fbJpn/qa G04tAFf1JkntPpg8IlBEc5iE/NBDlTVqBCxCIiOM1VknPtlLRsGgm3fGUEaEP/oICgrw Fcgi4OshocMAOSSt+owxrLbtiQO+Ve/NFixS1QXgIKfxrQ0HGKNfu+lJS4b1QIiomDoI berewfqCnd1GK+UxEYkz8p072HUSeH/oF/B66I1Fb60bF4sdrkacO4iE2vaGflXHsVBI W+wQ== X-Gm-Message-State: AOJu0YzFr/z5nYq8IzAEIH1bWNZ43FX8O94FRRXAcjVBQtXno8GttXAV HCVhcXN0ySP3un2nmsgChJgoKnjiYC0az5AunkQ/7rnouWYYWKEjUudf6FAoag== X-Gm-Gg: ASbGncugmPzxhXpagqWRm/Wa38C3lDAKYLznrpsOj6cw/sgrZ8L09eSDMVJtcOonsrl aYZoEv3LXd3bUsTKsS9z7qPzXZo/aRWtN3prs1gjT6JU0gjTiNyY+M35a1TN89KYZLqh7GBh16S P48nCneXg1N0zBnwPEKHK0hpf9Iq4wmKOGbY2Rt62LAoBPp+CJBhXEItRKHI+jarH+Qfsub03Ua kVaZGx1Fv8bLThZvZCizkS7mP7WBFWr0nFsLd+1QLEjepAm7tI/3oXMz1r0t5rQX2ObrbAEP3DG EWJ3PAcQyOm02+DwYmYnjRb2kqJ2b9B2Aw3COkifYZ/Ct0TWoxIEb13vIYMJwGWRXNYtFJcnvAi zPtX++/PQOvCXfY/J12g3zF4D5IkSGcurBvT4Ite1SsZYExLFPc7k6GlwNt7b/LFKXAf+Wkj/0l DskfIbXA== X-Google-Smtp-Source: AGHT+IGMJY+16AL4OVjCsEQ8X14NdZRaNt9HsViOJJLDQoYGMUk+lp90wH30heByAuINy4mtpqqc7Q== X-Received: by 2002:a05:6000:250c:b0:42b:43cc:9830 with SMTP id ffacd0b85a97d-42b4bdb3012mr3239079f8f.41.1762966476910; Wed, 12 Nov 2025 08:54:36 -0800 (PST) Received: from localhost ([2a01:4b00:d036:ae00:a397:14bc:5982:5745]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-42b35ad7c16sm22286324f8f.15.2025.11.12.08.54.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 08:54:36 -0800 (PST) From: luca.boccassi@gmail.com To: Jiawen Wu Cc: dpdk stable Subject: patch 'net/txgbe: switch to FDIR when ntuple filter is full' has been queued to stable release 22.11.11 Date: Wed, 12 Nov 2025 16:52:42 +0000 Message-ID: <20251112165308.1618107-28-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251112165308.1618107-1-luca.boccassi@gmail.com> References: <20251027162001.3710450-79-luca.boccassi@gmail.com> <20251112165308.1618107-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 22.11.11 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/14/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/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/2764f319bbcfe01f961023b2a856bedd30dd3d49 Thanks. Luca Boccassi --- >From 2764f319bbcfe01f961023b2a856bedd30dd3d49 Mon Sep 17 00:00:00 2001 From: Jiawen Wu Date: Mon, 27 Oct 2025 11:15:39 +0800 Subject: [PATCH] net/txgbe: switch to FDIR when ntuple filter is full [ upstream commit ccac5e093041f255f38a59ea472c6dee493ccc7c ] Using ntuple filter has less performance loss on the hardware compared to FDIR filter. So when the flow rule both match ntuple filter and FDIR filter, ntuple filter will be created first. But there are only maximum 128 flow rules can be created on ntuple filter, it is far less than the requirements of many users. So switch to use FDIR when ntuple filters are full. Fixes: 77a72b4d9dc0 ("net/txgbe: support ntuple filter add and delete") Signed-off-by: Jiawen Wu --- drivers/net/txgbe/txgbe_ethdev.c | 5 ++++- drivers/net/txgbe/txgbe_ethdev.h | 1 + drivers/net/txgbe/txgbe_flow.c | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c index 8b4a134b08..004738f5ae 100644 --- a/drivers/net/txgbe/txgbe_ethdev.c +++ b/drivers/net/txgbe/txgbe_ethdev.c @@ -851,6 +851,7 @@ static int txgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev) } memset(filter_info->fivetuple_mask, 0, sizeof(uint32_t) * TXGBE_5TUPLE_ARRAY_SIZE); + filter_info->ntuple_is_full = false; return 0; } @@ -4070,7 +4071,8 @@ txgbe_add_5tuple_filter(struct rte_eth_dev *dev, } } if (i >= TXGBE_MAX_FTQF_FILTERS) { - PMD_DRV_LOG(ERR, "5tuple filters are full."); + PMD_DRV_LOG(INFO, "5tuple filters are full, switch to FDIR"); + filter_info->ntuple_is_full = true; return -ENOSYS; } @@ -4098,6 +4100,7 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev, ~(1 << (index % (sizeof(uint32_t) * NBBY))); TAILQ_REMOVE(&filter_info->fivetuple_list, filter, entries); rte_free(filter); + filter_info->ntuple_is_full = false; wr32(hw, TXGBE_5TFDADDR(index), 0); wr32(hw, TXGBE_5TFSADDR(index), 0); diff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h index 7b278da096..e02df98c41 100644 --- a/drivers/net/txgbe/txgbe_ethdev.h +++ b/drivers/net/txgbe/txgbe_ethdev.h @@ -241,6 +241,7 @@ struct txgbe_filter_info { /* Bit mask for every used 5tuple filter */ uint32_t fivetuple_mask[TXGBE_5TUPLE_ARRAY_SIZE]; struct txgbe_5tuple_filter_list fivetuple_list; + bool ntuple_is_full; /* store the SYN filter info */ uint32_t syn_info; /* store the rss filter info */ diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c index f947093014..074bbe6aab 100644 --- a/drivers/net/txgbe/txgbe_flow.c +++ b/drivers/net/txgbe/txgbe_flow.c @@ -580,8 +580,12 @@ txgbe_parse_ntuple_filter(struct rte_eth_dev *dev, struct rte_eth_ntuple_filter *filter, struct rte_flow_error *error) { + struct txgbe_filter_info *filter_info = TXGBE_DEV_FILTER(dev); int ret; + if (filter_info->ntuple_is_full) + return -ENOSYS; + ret = cons_parse_ntuple_filter(attr, pattern, actions, filter, error); if (ret) @@ -3200,6 +3204,7 @@ txgbe_flow_create(struct rte_eth_dev *dev, struct txgbe_fdir_rule_ele *fdir_rule_ptr; struct txgbe_rss_conf_ele *rss_filter_ptr; struct txgbe_flow_mem *txgbe_flow_mem_ptr; + struct txgbe_filter_info *filter_info = TXGBE_DEV_FILTER(dev); uint8_t first_mask = FALSE; flow = rte_zmalloc("txgbe_rte_flow", sizeof(struct rte_flow), 0); @@ -3245,10 +3250,13 @@ txgbe_flow_create(struct rte_eth_dev *dev, flow->rule = ntuple_filter_ptr; flow->filter_type = RTE_ETH_FILTER_NTUPLE; return flow; + } else if (filter_info->ntuple_is_full) { + goto next; } goto out; } +next: memset(ðertype_filter, 0, sizeof(struct rte_eth_ethertype_filter)); ret = txgbe_parse_ethertype_filter(dev, attr, pattern, actions, ðertype_filter, error); -- 2.47.3 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-11-12 16:20:42.011288021 +0000 +++ 0028-net-txgbe-switch-to-FDIR-when-ntuple-filter-is-full.patch 2025-11-12 16:20:40.927716946 +0000 @@ -1 +1 @@ -From ccac5e093041f255f38a59ea472c6dee493ccc7c Mon Sep 17 00:00:00 2001 +From 2764f319bbcfe01f961023b2a856bedd30dd3d49 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit ccac5e093041f255f38a59ea472c6dee493ccc7c ] + @@ -14 +15,0 @@ -Cc: stable@dpdk.org @@ -24 +25 @@ -index f650c5b7a4..21f0711762 100644 +index 8b4a134b08..004738f5ae 100644 @@ -27 +28 @@ -@@ -893,6 +893,7 @@ int txgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev) +@@ -851,6 +851,7 @@ static int txgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev) @@ -35 +36 @@ -@@ -4495,7 +4496,8 @@ txgbe_add_5tuple_filter(struct rte_eth_dev *dev, +@@ -4070,7 +4071,8 @@ txgbe_add_5tuple_filter(struct rte_eth_dev *dev, @@ -45 +46 @@ -@@ -4526,6 +4528,7 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev, +@@ -4098,6 +4100,7 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev, @@ -51,2 +52,2 @@ - if (!txgbe_is_pf(TXGBE_DEV_HW(dev))) { - txgbevf_remove_5tuple_filter(dev, index); + wr32(hw, TXGBE_5TFDADDR(index), 0); + wr32(hw, TXGBE_5TFSADDR(index), 0); @@ -54 +55 @@ -index 053aa1645f..1e7cc5ea80 100644 +index 7b278da096..e02df98c41 100644 @@ -57 +58 @@ -@@ -245,6 +245,7 @@ struct txgbe_filter_info { +@@ -241,6 +241,7 @@ struct txgbe_filter_info { @@ -66 +67 @@ -index d3113b6fc8..cd05ceffed 100644 +index f947093014..074bbe6aab 100644 @@ -90 +91 @@ -@@ -3245,6 +3250,8 @@ txgbe_flow_create(struct rte_eth_dev *dev, +@@ -3245,10 +3250,13 @@ txgbe_flow_create(struct rte_eth_dev *dev, @@ -97,3 +97,0 @@ - goto out; - } -@@ -3254,6 +3261,7 @@ txgbe_flow_create(struct rte_eth_dev *dev,