net/mlx5e: XDP, Consider large muti-buffer packets in Striding RQ params calculations
Function mlx5e_rx_get_linear_stride_sz() returns PAGE_SIZE immediately in case an XDP program is attached. The more accurate formula is ALIGN(sz, PAGE_SIZE), to prevent two packets from residing on the same page. The assumption behind the current code is that sz <= PAGE_SIZE holds for all cases with XDP program set. This is true because it is being called from: - 3 times from Striding RQ flows, in which XDP is not supported for such large packets. - 1 time from Legacy RQ flow, under the condition mlx5e_rx_is_linear_skb(). No functional change here, just removing the implied assumption in preparation for supporting XDP multi-buffer in Striding RQ. Reviewed-by: Saeed Mahameed <saeedm@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
abd3f84eca
commit
20409abe52
@ -253,17 +253,20 @@ static u32 mlx5e_rx_get_linear_stride_sz(struct mlx5_core_dev *mdev,
|
||||
struct mlx5e_xsk_param *xsk,
|
||||
bool mpwqe)
|
||||
{
|
||||
u32 sz;
|
||||
|
||||
/* XSK frames are mapped as individual pages, because frames may come in
|
||||
* an arbitrary order from random locations in the UMEM.
|
||||
*/
|
||||
if (xsk)
|
||||
return mpwqe ? 1 << mlx5e_mpwrq_page_shift(mdev, xsk) : PAGE_SIZE;
|
||||
|
||||
/* XDP in mlx5e doesn't support multiple packets per page. */
|
||||
if (params->xdp_prog)
|
||||
return PAGE_SIZE;
|
||||
sz = roundup_pow_of_two(mlx5e_rx_get_linear_sz_skb(params, false));
|
||||
|
||||
return roundup_pow_of_two(mlx5e_rx_get_linear_sz_skb(params, false));
|
||||
/* XDP in mlx5e doesn't support multiple packets per page.
|
||||
* Do not assume sz <= PAGE_SIZE if params->xdp_prog is set.
|
||||
*/
|
||||
return params->xdp_prog && sz < PAGE_SIZE ? PAGE_SIZE : sz;
|
||||
}
|
||||
|
||||
static u8 mlx5e_mpwqe_log_pkts_per_wqe(struct mlx5_core_dev *mdev,
|
||||
|
Loading…
x
Reference in New Issue
Block a user