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 BD2D448B69 for ; Fri, 21 Nov 2025 12:23:06 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B7C50402DB; Fri, 21 Nov 2025 12:23:06 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id 4E3314026F for ; Fri, 21 Nov 2025 12:23:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1763724184; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2keMUvBeZZbBgkC18BYeIAQYyMsuVkEV8SqIf1aLH+M=; b=YI/is2FT9b8yc2HdjMaYQ6r8kNCnk3rwwdltYyQJr68h0jHiJPyaM61iK+DAKXmKzb6AJF 7RboaYEZiPVPeMzhfZ7Dz/wtvfeVeqPDVs6SoQmSlIOK49SSFw8Qy6jGbCTwzCgRCne6IA Zn2T/VKESnhxNYqCrwPGbbV/3QXA+vY= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-651-BvnzxATBMNiFpgIe2DoRcg-1; Fri, 21 Nov 2025 06:23:01 -0500 X-MC-Unique: BvnzxATBMNiFpgIe2DoRcg-1 X-Mimecast-MFC-AGG-ID: BvnzxATBMNiFpgIe2DoRcg_1763724181 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C150E19560B7; Fri, 21 Nov 2025 11:23:00 +0000 (UTC) Received: from rh.redhat.com (unknown [10.42.28.165]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A90ED30044DB; Fri, 21 Nov 2025 11:22:59 +0000 (UTC) From: Kevin Traynor To: Jiawen Wu Cc: dpdk stable Subject: patch 'net/txgbe: switch to FDIR when ntuple filter is full' has been queued to stable release 24.11.4 Date: Fri, 21 Nov 2025 11:20:20 +0000 Message-ID: <20251121112128.485623-36-ktraynor@redhat.com> In-Reply-To: <20251121112128.485623-1-ktraynor@redhat.com> References: <20251121112128.485623-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: gU7I_q7hPNY3IsqCIc8ANDxmolb2cTScLy_mcSXwaeo_1763724181 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true 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 24.11.4 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/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/kevintraynor/dpdk-stable This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable/commit/348509e3fe19edb1cfde5f36771775d916420e48 Thanks. Kevin --- >From 348509e3fe19edb1cfde5f36771775d916420e48 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 7df1841561..49ac1c1c82 100644 --- a/drivers/net/txgbe/txgbe_ethdev.c +++ b/drivers/net/txgbe/txgbe_ethdev.c @@ -854,4 +854,5 @@ 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; @@ -4268,5 +4269,6 @@ 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; } @@ -4296,4 +4298,5 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev, TAILQ_REMOVE(&filter_info->fivetuple_list, filter, entries); rte_free(filter); + filter_info->ntuple_is_full = false; wr32(hw, TXGBE_5TFDADDR(index), 0); diff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h index 288d9a43da..33d72e68d5 100644 --- a/drivers/net/txgbe/txgbe_ethdev.h +++ b/drivers/net/txgbe/txgbe_ethdev.h @@ -244,4 +244,5 @@ struct txgbe_filter_info { 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; diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c index cb8004e48c..c87bb4dd63 100644 --- a/drivers/net/txgbe/txgbe_flow.c +++ b/drivers/net/txgbe/txgbe_flow.c @@ -581,6 +581,10 @@ txgbe_parse_ntuple_filter(struct rte_eth_dev *dev, 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); @@ -3201,4 +3205,5 @@ txgbe_flow_create(struct rte_eth_dev *dev, 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; @@ -3246,8 +3251,11 @@ txgbe_flow_create(struct rte_eth_dev *dev, 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, -- 2.51.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-11-21 11:05:10.721727017 +0000 +++ 0036-net-txgbe-switch-to-FDIR-when-ntuple-filter-is-full.patch 2025-11-21 11:05:09.431201033 +0000 @@ -1 +1 @@ -From ccac5e093041f255f38a59ea472c6dee493ccc7c Mon Sep 17 00:00:00 2001 +From 348509e3fe19edb1cfde5f36771775d916420e48 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 7df1841561..49ac1c1c82 100644 @@ -27 +28 @@ -@@ -894,4 +894,5 @@ int txgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev) +@@ -854,4 +854,5 @@ static int txgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev) @@ -33 +34 @@ -@@ -4496,5 +4497,6 @@ txgbe_add_5tuple_filter(struct rte_eth_dev *dev, +@@ -4268,5 +4269,6 @@ txgbe_add_5tuple_filter(struct rte_eth_dev *dev, @@ -41 +42 @@ -@@ -4527,4 +4529,5 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev, +@@ -4296,4 +4298,5 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev, @@ -46 +47 @@ - if (!txgbe_is_pf(TXGBE_DEV_HW(dev))) { + wr32(hw, TXGBE_5TFDADDR(index), 0); @@ -48 +49 @@ -index 053aa1645f..1e7cc5ea80 100644 +index 288d9a43da..33d72e68d5 100644 @@ -51 +52 @@ -@@ -246,4 +246,5 @@ struct txgbe_filter_info { +@@ -244,4 +244,5 @@ struct txgbe_filter_info { @@ -58 +59 @@ -index d3113b6fc8..cd05ceffed 100644 +index cb8004e48c..c87bb4dd63 100644 @@ -78 +79 @@ -@@ -3246,4 +3251,6 @@ txgbe_flow_create(struct rte_eth_dev *dev, +@@ -3246,8 +3251,11 @@ txgbe_flow_create(struct rte_eth_dev *dev, @@ -85 +85,0 @@ -@@ -3255,4 +3262,5 @@ txgbe_flow_create(struct rte_eth_dev *dev,