Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net/mlx5e: Add XSK RQ state flag for RQ devlink health diagnostics

Currently RQ health diagnostics doesn't inform the user whether an RQ
is an XSK RQ or not.

Address this, by adding XSK state flag to RQ SW state enum in core/en.h.
XSK will be '1' if current RQ is an XSK RQ, and it will be '0' if it's
not.

In this example below, it can be seen that XSK field value is '1' since
xdpsock program have been attached to channel 0 before issuing the
devlink query command:

$ devlink health diagnose auxiliary/mlx5_core.eth.0/65535 reporter rx

Output:
=======================================================================
Common config:
RQ:
type: 2 stride size: 4096 size: 16 ts_format: FRC
CQ:
stride size: 64 size: 1024
RQs:
channel ix: 0 rqn: 4236 HW state: 1 WQE counter: 15 posted WQEs: 15 cc: 15
SW State:
enabled: 1 recovering: 0 am: 1 no_csum_complete: 1 csum_full: 0 mini_cqe_hw_stridx: 1 shampo: 0 mini_cqe_enhanced: 0 xsk: 1
CQ:
cqn: 1085 HW status: 0 ci: 0 size: 1024
EQ:
eqn: 7 irqn: 32 vecidx: 0 ci: 5 size: 2048
ICOSQ:
sqn: 4229 HW state: 1 cc: 158 pc: 158 WQE size: 2048
CQ:
cqn: 1080 cc: 1 size: 2048

Signed-off-by: Adham Faris <afaris@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Link: https://lore.kernel.org/r/20230314054234.267365-10-saeed@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Adham Faris and committed by
Jakub Kicinski
bb76d250 fc9d982a

+10 -2
+1
drivers/net/ethernet/mellanox/mlx5/core/en.h
··· 348 348 MLX5E_RQ_STATE_MINI_CQE_HW_STRIDX, /* set when mini_cqe_resp_stride_index cap is used */ 349 349 MLX5E_RQ_STATE_SHAMPO, /* set when SHAMPO cap is used */ 350 350 MLX5E_RQ_STATE_MINI_CQE_ENHANCED, /* set when enhanced mini_cqe_cap is used */ 351 + MLX5E_RQ_STATE_XSK, /* set to indicate an xsk rq */ 351 352 MLX5E_NUM_RQ_STATES, /* Must be kept last */ 352 353 }; 353 354
+1
drivers/net/ethernet/mellanox/mlx5/core/en/reporter_rx.c
··· 18 18 [MLX5E_RQ_STATE_MINI_CQE_HW_STRIDX] = "mini_cqe_hw_stridx", 19 19 [MLX5E_RQ_STATE_SHAMPO] = "shampo", 20 20 [MLX5E_RQ_STATE_MINI_CQE_ENHANCED] = "mini_cqe_enhanced", 21 + [MLX5E_RQ_STATE_XSK] = "xsk", 21 22 }; 22 23 23 24 static int mlx5e_query_rq_state(struct mlx5_core_dev *dev, u32 rqn, u8 *state)
+8 -2
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
··· 93 93 struct mlx5e_rq_param *rq_params, struct xsk_buff_pool *pool, 94 94 struct mlx5e_xsk_param *xsk) 95 95 { 96 + struct mlx5e_rq *xskrq = &c->xskrq; 96 97 int err; 97 98 98 - err = mlx5e_init_xsk_rq(c, params, pool, xsk, &c->xskrq); 99 + err = mlx5e_init_xsk_rq(c, params, pool, xsk, xskrq); 99 100 if (err) 100 101 return err; 101 102 102 - return mlx5e_open_rq(params, rq_params, xsk, cpu_to_node(c->cpu), &c->xskrq); 103 + err = mlx5e_open_rq(params, rq_params, xsk, cpu_to_node(c->cpu), xskrq); 104 + if (err) 105 + return err; 106 + 107 + __set_bit(MLX5E_RQ_STATE_XSK, &xskrq->state); 108 + return 0; 103 109 } 104 110 105 111 int mlx5e_open_xsk(struct mlx5e_priv *priv, struct mlx5e_params *params,