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 11745a2..401c219 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 7f31e89..42a186d 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);