net/mlx5e: XSK, Exclude tailroom from non-linear SKBs memory calculations
authorCarolina Jubran <cjubran@nvidia.com>
Mon, 18 Dec 2023 11:58:27 +0000 (13:58 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Tue, 6 Feb 2024 00:45:53 +0000 (16:45 -0800)
Packet data buffers lack reserved headroom or tailroom,
and SKBs are allocated on a side memory when needed.

Exclude the tailroom from the SKB size calculations.

Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en/params.c

index 5d213a9886f11c4bed6a2b8c5e5bd708ce08bef3..b9d39ef8053c2d69546095f65d0708d82c9600dd 100644 (file)
@@ -240,11 +240,14 @@ static u32 mlx5e_rx_get_linear_sz_xsk(struct mlx5e_params *params,
        return xsk->headroom + hw_mtu;
 }
 
-static u32 mlx5e_rx_get_linear_sz_skb(struct mlx5e_params *params, bool xsk)
+static u32 mlx5e_rx_get_linear_sz_skb(struct mlx5e_params *params, bool no_head_tail_room)
 {
-       /* SKBs built on XDP_PASS on XSK RQs don't have headroom. */
-       u16 headroom = xsk ? 0 : mlx5e_get_linear_rq_headroom(params, NULL);
        u32 hw_mtu = MLX5E_SW2HW_MTU(params, params->sw_mtu);
+       u16 headroom;
+
+       if (no_head_tail_room)
+               return SKB_DATA_ALIGN(hw_mtu);
+       headroom = mlx5e_get_linear_rq_headroom(params, NULL);
 
        return MLX5_SKB_FRAG_SZ(headroom + hw_mtu);
 }
@@ -289,7 +292,11 @@ bool mlx5e_rx_is_linear_skb(struct mlx5_core_dev *mdev,
        if (params->packet_merge.type != MLX5E_PACKET_MERGE_NONE)
                return false;
 
-       /* Both XSK and non-XSK cases allocate an SKB on XDP_PASS. Packet data
+       /* Call mlx5e_rx_get_linear_sz_skb with the no_head_tail_room parameter set
+        * to exclude headroom and tailroom from calculations.
+        * no_head_tail_room is true when SKB is built on XDP_PASS on XSK RQs
+        * since packet data buffers don't have headroom and tailroom resreved for the SKB.
+        * Both XSK and non-XSK cases allocate an SKB on XDP_PASS. Packet data
         * must fit into a CPU page.
         */
        if (mlx5e_rx_get_linear_sz_skb(params, xsk) > PAGE_SIZE)