net/mlx5e: XDP, Exclude headroom and tailroom from memory calculations
[linux-2.6-microblaze.git] / drivers / net / ethernet / mellanox / mlx5 / core / en / params.c
index b9d39ef..5757f4f 100644 (file)
@@ -257,6 +257,7 @@ static u32 mlx5e_rx_get_linear_stride_sz(struct mlx5_core_dev *mdev,
                                         struct mlx5e_xsk_param *xsk,
                                         bool mpwqe)
 {
+       bool no_head_tail_room;
        u32 sz;
 
        /* XSK frames are mapped as individual pages, because frames may come in
@@ -265,7 +266,13 @@ static u32 mlx5e_rx_get_linear_stride_sz(struct mlx5_core_dev *mdev,
        if (xsk)
                return mpwqe ? 1 << mlx5e_mpwrq_page_shift(mdev, xsk) : PAGE_SIZE;
 
-       sz = roundup_pow_of_two(mlx5e_rx_get_linear_sz_skb(params, false));
+       no_head_tail_room = params->xdp_prog && mpwqe && !mlx5e_rx_is_linear_skb(mdev, params, xsk);
+
+       /* When no_head_tail_room is set, headroom and tailroom are excluded from skb calculations.
+        * no_head_tail_room should be set in the case of XDP with Striding RQ
+        * when SKB is not linear. This is because another page is allocated for the linear part.
+        */
+       sz = roundup_pow_of_two(mlx5e_rx_get_linear_sz_skb(params, no_head_tail_room));
 
        /* XDP in mlx5e doesn't support multiple packets per page.
         * Do not assume sz <= PAGE_SIZE if params->xdp_prog is set.