On 13/01/2023 23:07, Tariq Toukan wrote:
On 10/01/2023 22:59, Maxim Mikityanskiy wrote:
On Tue, Jan 03, 2023 at 05:21:53PM -0800, Jakub Kicinski wrote:
On Tue, 03 Jan 2023 16:19:49 +0100 Toke Høiland-Jørgensen wrote:
Hmm, good question! I don't think we've ever explicitly documented any
assumptions one way or the other. My own mental model has certainly
always assumed the first frag would continue to be the same size as in
non-multi-buf packets.
Interesting! :) My mental model was closer to GRO by frags
so the linear part would have no data, just headers.
A random datapoint is that bpf_xdp_adjust_head() seems
to enforce that there is at least ETH_HLEN.
Also bpf_xdp_frags_increase_tail has the following check:
if (!rxq->frag_size || rxq->frag_size > xdp->frame_sz)
return -EOPNOTSUPP;
However, I can't seem to find where the `frag_size > frame_sz` part is
actually used. Maybe this condition can be dropped? Can someone shed
some light?
BTW, Tariq, we seem to have missed setting frag_size to a non-zero
value.
Hey Maxim,
Indeed. We use xdp_rxq_info_reg, it passes 0 as frag_size.
Could you check that increasing the tail indeed doesn't work on
fragmented packets on mlx5e? I can send a oneliner to fix that.
I can test early next week, and update.
Hi Maxim,
Hacking the existing adjust_tail sample program, in between other high
prio tasks, to make it work with frags took me some time.
But I can approve the fix below (or equivalent) is needed. Please go on
and submit it.
Regards,
Tariq
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -600,7 +600,7 @@ static int mlx5e_init_rxq_rq(struct mlx5e_channel
*c, struct mlx5e_params *param
if (err)
return err;
- return xdp_rxq_info_reg(&rq->xdp_rxq, rq->netdev, rq->ix,
c->napi.napi_id);
+ return __xdp_rxq_info_reg(&rq->xdp_rxq, rq->netdev, rq->ix,
c->napi.napi_id, PAGE_SIZE);
}
static int mlx5_rq_shampo_alloc(struct mlx5_core_dev *mdev,