summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEran Ben Elisha <eranbe@mellanox.com>2018-01-09 09:21:16 -0500
committerSaeed Mahameed <saeedm@mellanox.com>2018-03-27 20:17:28 -0400
commit16cc14d817338fc297970d2d9d146c88ec87474d (patch)
tree32d601ec2252ca5cf250a85fb276d9d08b36fa1f
parent1acae6b030164217b9c6a52245eade730057152b (diff)
net/mlx5e: Dump xmit error completions
Monitor and dump xmit error completions. In addition, add err_cqe counter to track the number of error completion per send queue. Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_stats.c3
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_stats.h2
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_tx.c19
3 files changed, 24 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
index c0dab9a8969e..ad91d9de0240 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
@@ -60,6 +60,7 @@ static const struct counter_desc sw_stats_desc[] = {
60 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_queue_wake) }, 60 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_queue_wake) },
61 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_queue_dropped) }, 61 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_queue_dropped) },
62 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_xmit_more) }, 62 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_xmit_more) },
63 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_cqe_err) },
63 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_wqe_err) }, 64 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_wqe_err) },
64 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_mpwqe_filler) }, 65 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_mpwqe_filler) },
65 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_buff_alloc_err) }, 66 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_buff_alloc_err) },
@@ -153,6 +154,7 @@ static void mlx5e_grp_sw_update_stats(struct mlx5e_priv *priv)
153 s->tx_queue_stopped += sq_stats->stopped; 154 s->tx_queue_stopped += sq_stats->stopped;
154 s->tx_queue_wake += sq_stats->wake; 155 s->tx_queue_wake += sq_stats->wake;
155 s->tx_queue_dropped += sq_stats->dropped; 156 s->tx_queue_dropped += sq_stats->dropped;
157 s->tx_cqe_err += sq_stats->cqe_err;
156 s->tx_xmit_more += sq_stats->xmit_more; 158 s->tx_xmit_more += sq_stats->xmit_more;
157 s->tx_csum_partial_inner += sq_stats->csum_partial_inner; 159 s->tx_csum_partial_inner += sq_stats->csum_partial_inner;
158 s->tx_csum_none += sq_stats->csum_none; 160 s->tx_csum_none += sq_stats->csum_none;
@@ -1103,6 +1105,7 @@ static const struct counter_desc sq_stats_desc[] = {
1103 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, wake) }, 1105 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, wake) },
1104 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, dropped) }, 1106 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, dropped) },
1105 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, xmit_more) }, 1107 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, xmit_more) },
1108 { MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, cqe_err) },
1106}; 1109};
1107 1110
1108static const struct counter_desc ch_stats_desc[] = { 1111static const struct counter_desc ch_stats_desc[] = {
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
index 43a72efa28c0..43dc808684c9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
@@ -78,6 +78,7 @@ struct mlx5e_sw_stats {
78 u64 tx_queue_wake; 78 u64 tx_queue_wake;
79 u64 tx_queue_dropped; 79 u64 tx_queue_dropped;
80 u64 tx_xmit_more; 80 u64 tx_xmit_more;
81 u64 tx_cqe_err;
81 u64 rx_wqe_err; 82 u64 rx_wqe_err;
82 u64 rx_mpwqe_filler; 83 u64 rx_mpwqe_filler;
83 u64 rx_buff_alloc_err; 84 u64 rx_buff_alloc_err;
@@ -197,6 +198,7 @@ struct mlx5e_sq_stats {
197 u64 stopped; 198 u64 stopped;
198 u64 wake; 199 u64 wake;
199 u64 dropped; 200 u64 dropped;
201 u64 cqe_err;
200}; 202};
201 203
202struct mlx5e_ch_stats { 204struct mlx5e_ch_stats {
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
index 11b4f1089d1c..88b5b7bfc9a9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
@@ -417,6 +417,18 @@ netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev)
417 return mlx5e_sq_xmit(sq, skb, wqe, pi); 417 return mlx5e_sq_xmit(sq, skb, wqe, pi);
418} 418}
419 419
420static void mlx5e_dump_error_cqe(struct mlx5e_txqsq *sq,
421 struct mlx5_err_cqe *err_cqe)
422{
423 u32 ci = mlx5_cqwq_get_ci(&sq->cq.wq);
424
425 netdev_err(sq->channel->netdev,
426 "Error cqe on cqn 0x%x, ci 0x%x, sqn 0x%x, syndrome 0x%x, vendor syndrome 0x%x\n",
427 sq->cq.mcq.cqn, ci, sq->sqn, err_cqe->syndrome,
428 err_cqe->vendor_err_synd);
429 mlx5_dump_err_cqe(sq->cq.mdev, err_cqe);
430}
431
420bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget) 432bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget)
421{ 433{
422 struct mlx5e_txqsq *sq; 434 struct mlx5e_txqsq *sq;
@@ -456,6 +468,13 @@ bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget)
456 468
457 wqe_counter = be16_to_cpu(cqe->wqe_counter); 469 wqe_counter = be16_to_cpu(cqe->wqe_counter);
458 470
471 if (unlikely(cqe->op_own >> 4 == MLX5_CQE_REQ_ERR)) {
472 if (!sq->stats.cqe_err)
473 mlx5e_dump_error_cqe(sq,
474 (struct mlx5_err_cqe *)cqe);
475 sq->stats.cqe_err++;
476 }
477
459 do { 478 do {
460 struct mlx5e_tx_wqe_info *wi; 479 struct mlx5e_tx_wqe_info *wi;
461 struct sk_buff *skb; 480 struct sk_buff *skb;