]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
eth: fbnic: set DMA_HINT_L4 for all flows
authorBobby Eshleman <bobbyeshleman@meta.com>
Thu, 12 Feb 2026 01:00:43 +0000 (17:00 -0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 17 Feb 2026 09:40:14 +0000 (10:40 +0100)
fbnic always advertises ETHTOOL_TCP_DATA_SPLIT_ENABLED via ethtool
.get_ringparam. To enable proper splitting for all flow types, even for
IP/Ethernet flows, this patch sets DMA_HINT_L4 unconditionally for all
RSS and NFC flow steering rules. According to the spec, L4 falls back to
L3 if no valid L4 is found, and L3 falls back to L2 if no L3 is found.
This makes sure that the correct header boundary is used regardless of
traffic type. This is important for zero-copy use cases where we must
ensure that all ZC packets are split correctly.

Fixes: 2b30fc01a6c7 ("eth: fbnic: Add support for HDS configuration")
Signed-off-by: Bobby Eshleman <bobbyeshleman@meta.com>
Link: https://patch.msgid.link/20260211-fbnic-tcp-hds-fixes-v1-3-55d050e6f606@meta.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c
drivers/net/ethernet/meta/fbnic/fbnic_rpc.c

index 11745a2d8a4438ee5787f499e69b3094c6c37ca3..401c2196b9ff31cebce90a498574e389fcdc5eed 100644 (file)
@@ -1145,6 +1145,9 @@ ipv6_flow:
                return -EINVAL;
        }
 
+       dest |= FIELD_PREP(FBNIC_RPC_ACT_TBL0_DMA_HINT,
+                          FBNIC_RCD_HDR_AL_DMA_HINT_L4);
+
        /* Write action table values */
        act_tcam->dest = dest;
        act_tcam->rss_en_mask = fbnic_flow_hash_2_rss_en_mask(fbn, hash_idx);
index 7f31e890031c06b5d61ff79f8bf7f777741d5e0c..42a186db43ea93274896570d82a098716d38e343 100644 (file)
@@ -338,9 +338,8 @@ void fbnic_rss_reinit(struct fbnic_dev *fbd, struct fbnic_net *fbn)
                else if (tstamp_mask & (1u << flow_type))
                        dest |= FBNIC_RPC_ACT_TBL0_TS_ENA;
 
-               if (act1_value[flow_type] & FBNIC_RPC_TCAM_ACT1_L4_VALID)
-                       dest |= FIELD_PREP(FBNIC_RPC_ACT_TBL0_DMA_HINT,
-                                          FBNIC_RCD_HDR_AL_DMA_HINT_L4);
+               dest |= FIELD_PREP(FBNIC_RPC_ACT_TBL0_DMA_HINT,
+                                  FBNIC_RCD_HDR_AL_DMA_HINT_L4);
 
                rss_en_mask = fbnic_flow_hash_2_rss_en_mask(fbn, flow_type);