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 487BE48AEF 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 42E9540DC9; Wed, 12 Nov 2025 17:54:38 +0100 (CET) Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) by mails.dpdk.org (Postfix) with ESMTP id 2B057402A0 for ; Wed, 12 Nov 2025 17:54:36 +0100 (CET) Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-477632d9326so7261415e9.1 for ; Wed, 12 Nov 2025 08:54:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762966476; x=1763571276; 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=vU30R9iIa/VvB/K6046942h5oKcbJcfFaT9EisIFdXQ=; b=aDp00XO9R3ipZk9YkPgAbWMUkXCFMANIsNGgTYUMVeZMMc67ki1HDY29ztSLIVqW1B 6ab3n/V2ZPMcj3oq2nwSdM3yEbTYmMAe6e4k4h4bNnQX1Ny5owbJFHShLIp9bShJmDl6 THAEBqprvvveSVZI0JvwoHn1H+AJsKKVXztHxMPFeR5Gs/Wcoo9Gzl4sOz7mH2ytNWs6 ADqEqxPmPha4Zt3MJqaVSxPLgcRZnvUNY+Ejyc+dkve5HRBoOsSkdz1eh6wqjEvKK7EA zxUhJlQfiN12ad8Ydl7kz1QzVzoR0pea/VuQa+xXP/zrnNH9psWUNjix/ZpyDBH0HUz5 STpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762966476; x=1763571276; 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=vU30R9iIa/VvB/K6046942h5oKcbJcfFaT9EisIFdXQ=; b=Fp/stuxHR2WMbeyof7WMKbwNoDFb+PpW26KzhjM7b3bopgC1vEyKahoa2ZmeVWLFAb Idfjxw1S2PE8NkySM5nwewXLPWkQ3jWBpPvbsWHZW92YXdaTYYKZFCeIbHyHrWpsqF3G 3xNlmgXjIGs/j/oviXOMXIxXVdsU1SAHc0gw6ekKLu37hv12JPC7jqG1aQ50VWZqHysM oHS3Z4l4+308iR+Vn+hL4hORo8h9Oixm4rUIaCMUGt5jRsOq8hM16XtW1950Z3MpIA86 Vu3ba8V2F21Aw/tmGzxUGcFyBKz70uOqncGaRzLm0dhgKaRHVojbWSUZBCSWH46/6PA7 J4VA== X-Gm-Message-State: AOJu0Yzi7/XWmThRAg20y3PjWXuelzTPcAbSn7fxUJOkqlIL3YZhfspg f34PjrN7g/FLlooNMqs1a9q5eX7s6KarHFF9csELEM4JaYDW5CbxlsrW7ZSKbA== X-Gm-Gg: ASbGncvzwO4yLkPuUx1ytkY6EZ9OUvQlcnia/2u+kg7ixcZDy+l0JXPM5yqEjonGg6G z7xGliL6u09Pgt+1SN1UFzVcy8l6Emzfob368h9/Frrg9H2m3ruzgsU56GS99wEhcWsq9laxtrq uudue7IgbXm7aNfPNtt+YToe9oIzdQ/cnNuhGW1r4GePb2MXqBQkrtJB2dq7dspiww4rGhb6Vfa bVbkF/GY5uYlH6Xkz0Y2jVYx1xmWg/t8KWO/CSxDwlymrRiLri4Zo4zQdxe8bghRefGx56H18QP vILFItIvUPwP804XElJlits7JRDg5X9TwxQ7hulEChO2E2fSpZpW0+YbygN+x/Xs3z/4BxTm0Tp HZaTxuEd8I36zuobJhHiTWDXaaeslm/UgwVYw9sYmvwZH5krXXzCk95bkCzKvrPTno/GXSCcKvA o1GP7fvrMRaSqdeFe+ X-Google-Smtp-Source: AGHT+IEt+bzbvl8ey6/UJYVJCXWXEgy1ot/AfNID3eUm71krLZfSenQobptgPiBd8V/FUTHtt4hmZA== X-Received: by 2002:a05:600c:3145:b0:475:df91:ddf0 with SMTP id 5b1f17b1804b1-477870a6c93mr36392635e9.33.1762966475660; Wed, 12 Nov 2025 08:54:35 -0800 (PST) Received: from localhost ([2a01:4b00:d036:ae00:a397:14bc:5982:5745]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-47787ea3b56sm43854675e9.16.2025.11.12.08.54.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 08:54:35 -0800 (PST) From: luca.boccassi@gmail.com To: Jiawen Wu Cc: dpdk stable Subject: patch 'net/txgbe: fix FDIR input mask' has been queued to stable release 22.11.11 Date: Wed, 12 Nov 2025 16:52:41 +0000 Message-ID: <20251112165308.1618107-27-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/9c31a51f442859a96a7e0db0b51b360c8ea04e1f Thanks. Luca Boccassi --- >From 9c31a51f442859a96a7e0db0b51b360c8ea04e1f Mon Sep 17 00:00:00 2001 From: Jiawen Wu Date: Mon, 27 Oct 2025 11:15:38 +0800 Subject: [PATCH] net/txgbe: fix FDIR input mask [ upstream commit a2d4de27109033d5061da44aed919bf46cfd7ca9 ] Fix FDIR mask settings to comply with the hardware configuration. And mask out the spec field instead of manually setting it to 0. There are some requirements of mask in hardware: 1) IPv4 mask should be little-endian. 2) Ipv6 source address mask has only 16 bits, one bit of mask corresponds to one byte of spec. 3) IPv6 dest address is only supported to perfect match the low 8 bits, so it is not taken into account for support in the driver. Fixes: ea230dda16ad ("net/txgbe: configure flow director filter") Signed-off-by: Jiawen Wu --- drivers/net/txgbe/txgbe_fdir.c | 49 +++++++++++++++++++++++++++++----- drivers/net/txgbe/txgbe_flow.c | 8 ++---- 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/drivers/net/txgbe/txgbe_fdir.c b/drivers/net/txgbe/txgbe_fdir.c index 8d181db33f..6b83a7379d 100644 --- a/drivers/net/txgbe/txgbe_fdir.c +++ b/drivers/net/txgbe/txgbe_fdir.c @@ -165,6 +165,15 @@ configure_fdir_flags(const struct rte_eth_fdir_conf *conf, return 0; } +static inline uint16_t +txgbe_reverse_fdir_bitmasks(uint16_t mask) +{ + mask = ((mask & 0x5555) << 1) | ((mask & 0xAAAA) >> 1); + mask = ((mask & 0x3333) << 2) | ((mask & 0xCCCC) >> 2); + mask = ((mask & 0x0F0F) << 4) | ((mask & 0xF0F0) >> 4); + return ((mask & 0x00FF) << 8) | ((mask & 0xFF00) >> 8); +} + int txgbe_fdir_set_input_mask(struct rte_eth_dev *dev) { @@ -206,15 +215,15 @@ txgbe_fdir_set_input_mask(struct rte_eth_dev *dev) wr32(hw, TXGBE_FDIRUDPMSK, ~fdirtcpm); wr32(hw, TXGBE_FDIRSCTPMSK, ~fdirtcpm); - /* Store source and destination IPv4 masks (big-endian) */ - wr32(hw, TXGBE_FDIRSIP4MSK, ~info->mask.src_ipv4_mask); - wr32(hw, TXGBE_FDIRDIP4MSK, ~info->mask.dst_ipv4_mask); + /* Store source and destination IPv4 masks (little-endian) */ + wr32(hw, TXGBE_FDIRSIP4MSK, rte_be_to_cpu_32(~info->mask.src_ipv4_mask)); + wr32(hw, TXGBE_FDIRDIP4MSK, rte_be_to_cpu_32(~info->mask.dst_ipv4_mask)); /* * Store source and destination IPv6 masks (bit reversed) */ - fdiripv6m = TXGBE_FDIRIP6MSK_DST(info->mask.dst_ipv6_mask) | - TXGBE_FDIRIP6MSK_SRC(info->mask.src_ipv6_mask); + fdiripv6m = txgbe_reverse_fdir_bitmasks(info->mask.dst_ipv6_mask) << 16; + fdiripv6m |= txgbe_reverse_fdir_bitmasks(info->mask.src_ipv6_mask); wr32(hw, TXGBE_FDIRIP6MSK, ~fdiripv6m); return 0; @@ -636,8 +645,14 @@ fdir_write_perfect_filter(struct txgbe_hw *hw, fdircmd |= TXGBE_FDIRPICMD_QP(queue); fdircmd |= TXGBE_FDIRPICMD_POOL(input->vm_pool); - if (input->flow_type & TXGBE_ATR_L3TYPE_IPV6) + if (input->flow_type & TXGBE_ATR_L3TYPE_IPV6) { + /* use SIP4 to store LS Dword of the Source iPv6 address */ + wr32(hw, TXGBE_FDIRPISIP4, be_to_le32(input->src_ip[3])); + wr32(hw, TXGBE_FDIRPISIP6(0), be_to_le32(input->src_ip[2])); + wr32(hw, TXGBE_FDIRPISIP6(1), be_to_le32(input->src_ip[1])); + wr32(hw, TXGBE_FDIRPISIP6(2), be_to_le32(input->src_ip[0])); fdircmd |= TXGBE_FDIRPICMD_IP6; + } wr32(hw, TXGBE_FDIRPICMD, fdircmd); PMD_DRV_LOG(DEBUG, "Rx Queue=%x hash=%x", queue, fdirhash); @@ -783,6 +798,26 @@ txgbe_remove_fdir_filter(struct txgbe_hw_fdir_info *fdir_info, return 0; } +static void +txgbe_fdir_mask_input(struct txgbe_hw_fdir_mask *mask, + struct txgbe_atr_input *input) +{ + int i; + + if (input->flow_type & TXGBE_ATR_L3TYPE_IPV6) { + for (i = 0; i < 16; i++) { + if (!(mask->src_ipv6_mask & (1 << i))) + input->src_ip[i / 4] &= ~(0xFF << ((i % 4) * 8)); + } + } else { + input->src_ip[0] &= mask->src_ipv4_mask; + input->dst_ip[0] &= mask->dst_ipv4_mask; + } + + input->src_port &= mask->src_port_mask; + input->dst_port &= mask->dst_port_mask; +} + int txgbe_fdir_filter_program(struct rte_eth_dev *dev, struct txgbe_fdir_rule *rule, @@ -805,6 +840,8 @@ txgbe_fdir_filter_program(struct rte_eth_dev *dev, if (fdir_mode >= RTE_FDIR_MODE_PERFECT) is_perfect = TRUE; + txgbe_fdir_mask_input(&info->mask, &rule->input); + if (is_perfect) { fdirhash = atr_compute_perfect_hash(&rule->input, TXGBE_DEV_FDIR_CONF(dev)->pballoc); diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c index 81eb8f111c..f947093014 100644 --- a/drivers/net/txgbe/txgbe_flow.c +++ b/drivers/net/txgbe/txgbe_flow.c @@ -1849,9 +1849,7 @@ txgbe_parse_fdir_filter_normal(struct rte_eth_dev *dev __rte_unused, /* check dst addr mask */ for (j = 0; j < 16; j++) { - if (ipv6_mask->hdr.dst_addr[j] == UINT8_MAX) { - rule->mask.dst_ipv6_mask |= 1 << j; - } else if (ipv6_mask->hdr.dst_addr[j] != 0) { + if (ipv6_mask->hdr.dst_addr[j] != 0) { memset(rule, 0, sizeof(struct txgbe_fdir_rule)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, @@ -2612,9 +2610,7 @@ txgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr, /* check dst addr mask */ for (j = 0; j < 16; j++) { - if (ipv6_mask->hdr.dst_addr[j] == UINT8_MAX) { - rule->mask.dst_ipv6_mask |= 1 << j; - } else if (ipv6_mask->hdr.dst_addr[j] != 0) { + if (ipv6_mask->hdr.dst_addr[j] != 0) { memset(rule, 0, sizeof(struct txgbe_fdir_rule)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, -- 2.47.3 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-11-12 16:20:41.972956684 +0000 +++ 0027-net-txgbe-fix-FDIR-input-mask.patch 2025-11-12 16:20:40.919716748 +0000 @@ -1 +1 @@ -From a2d4de27109033d5061da44aed919bf46cfd7ca9 Mon Sep 17 00:00:00 2001 +From 9c31a51f442859a96a7e0db0b51b360c8ea04e1f Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit a2d4de27109033d5061da44aed919bf46cfd7ca9 ] + @@ -17 +18,0 @@ -Cc: stable@dpdk.org @@ -119 +120 @@ -index 095c84823f..d3113b6fc8 100644 +index 81eb8f111c..f947093014 100644 @@ -126 +127 @@ -- if (ipv6_mask->hdr.dst_addr.a[j] == UINT8_MAX) { +- if (ipv6_mask->hdr.dst_addr[j] == UINT8_MAX) { @@ -128,2 +129,2 @@ -- } else if (ipv6_mask->hdr.dst_addr.a[j] != 0) { -+ if (ipv6_mask->hdr.dst_addr.a[j] != 0) { +- } else if (ipv6_mask->hdr.dst_addr[j] != 0) { ++ if (ipv6_mask->hdr.dst_addr[j] != 0) { @@ -137 +138 @@ -- if (ipv6_mask->hdr.dst_addr.a[j] == UINT8_MAX) { +- if (ipv6_mask->hdr.dst_addr[j] == UINT8_MAX) { @@ -139,2 +140,2 @@ -- } else if (ipv6_mask->hdr.dst_addr.a[j] != 0) { -+ if (ipv6_mask->hdr.dst_addr.a[j] != 0) { +- } else if (ipv6_mask->hdr.dst_addr[j] != 0) { ++ if (ipv6_mask->hdr.dst_addr[j] != 0) {