Skip to content

Commit 36d45fb

Browse files
Maxim MikityanskiySaeed Mahameed
authored andcommitted
net/mlx5e: Fix repeated XSK usage on one channel
After an XSK is closed, the relevant structures in the channel are not zeroed. If an XSK is opened the second time on the same channel without recreating channels, the stray values in the structures will lead to incorrect operation of queues, which causes CQE errors, and the new socket doesn't work at all. This patch fixes the issue by explicitly zeroing XSK-related structs in the channel on XSK close. Note that those structs are zeroed on channel creation, and usually a configuration change (XDP program is set) happens on XSK open, which leads to recreating channels, so typical XSK usecases don't suffer from this issue. However, if XSKs are opened and closed on the same channel without removing the XDP program, this bug reproduces. Fixes: db05815 ("net/mlx5e: Add XSK zero-copy support") Signed-off-by: Maxim Mikityanskiy <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent 47a357d commit 36d45fb

File tree

1 file changed

+4
-0
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core/en/xsk

1 file changed

+4
-0
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ void mlx5e_close_xsk(struct mlx5e_channel *c)
152152
mlx5e_close_cq(&c->xskicosq.cq);
153153
mlx5e_close_xdpsq(&c->xsksq);
154154
mlx5e_close_cq(&c->xsksq.cq);
155+
156+
memset(&c->xskrq, 0, sizeof(c->xskrq));
157+
memset(&c->xsksq, 0, sizeof(c->xsksq));
158+
memset(&c->xskicosq, 0, sizeof(c->xskicosq));
155159
}
156160

157161
void mlx5e_activate_xsk(struct mlx5e_channel *c)

0 commit comments

Comments
 (0)