Message ID | 1696020147-14989-2-git-send-email-haiyangz@microsoft.com (mailing list archive) |
---|---|
State | Accepted |
Commit | b2b000069a4c307b09548dc2243f31f3ca0eac9c |
Headers | show |
Series | net: mana: Fix some TX processing bugs | expand |
On Fri, Sep 29, 2023 at 01:42:25PM -0700, Haiyang Zhang wrote: > For an unknown TX CQE error type (probably from a newer hardware), > still free the SKB, update the queue tail, etc., otherwise the > accounting will be wrong. > > Also, TX errors can be triggered by injecting corrupted packets, so > replace the WARN_ONCE to ratelimited error logging. > > Cc: stable@vger.kernel.org > Fixes: ca9c54d2d6a5 ("net: mana: Add a driver for Microsoft Azure Network Adapter (MANA)") > Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com> > Reviewed-by: Simon Horman <horms@kernel.org> > --- > drivers/net/ethernet/microsoft/mana/mana_en.c | 18 +++++++++++------- > 1 file changed, 11 insertions(+), 7 deletions(-) > > diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c > index 4a16ebff3d1d..5cdcf7561b38 100644 > --- a/drivers/net/ethernet/microsoft/mana/mana_en.c > +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c > @@ -1317,19 +1317,23 @@ static void mana_poll_tx_cq(struct mana_cq *cq) > case CQE_TX_VPORT_IDX_OUT_OF_RANGE: > case CQE_TX_VPORT_DISABLED: > case CQE_TX_VLAN_TAGGING_VIOLATION: > - WARN_ONCE(1, "TX: CQE error %d: ignored.\n", > - cqe_oob->cqe_hdr.cqe_type); > + if (net_ratelimit()) > + netdev_err(ndev, "TX: CQE error %d\n", > + cqe_oob->cqe_hdr.cqe_type); > + > apc->eth_stats.tx_cqe_err++; > break; > > default: > - /* If the CQE type is unexpected, log an error, assert, > - * and go through the error path. > + /* If the CQE type is unknown, log an error, > + * and still free the SKB, update tail, etc. > */ > - WARN_ONCE(1, "TX: Unexpected CQE type %d: HW BUG?\n", > - cqe_oob->cqe_hdr.cqe_type); > + if (net_ratelimit()) > + netdev_err(ndev, "TX: unknown CQE type %d\n", > + cqe_oob->cqe_hdr.cqe_type); > + > apc->eth_stats.tx_cqe_unknown_type++; > - return; > + break; > } > > if (WARN_ON_ONCE(txq->gdma_txq_id != completions[i].wq_num)) > -- > 2.25.1 Reviewed-by: Shradha Gupta <shradhagupta@linux.microsoft.com>
diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c index 4a16ebff3d1d..5cdcf7561b38 100644 --- a/drivers/net/ethernet/microsoft/mana/mana_en.c +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c @@ -1317,19 +1317,23 @@ static void mana_poll_tx_cq(struct mana_cq *cq) case CQE_TX_VPORT_IDX_OUT_OF_RANGE: case CQE_TX_VPORT_DISABLED: case CQE_TX_VLAN_TAGGING_VIOLATION: - WARN_ONCE(1, "TX: CQE error %d: ignored.\n", - cqe_oob->cqe_hdr.cqe_type); + if (net_ratelimit()) + netdev_err(ndev, "TX: CQE error %d\n", + cqe_oob->cqe_hdr.cqe_type); + apc->eth_stats.tx_cqe_err++; break; default: - /* If the CQE type is unexpected, log an error, assert, - * and go through the error path. + /* If the CQE type is unknown, log an error, + * and still free the SKB, update tail, etc. */ - WARN_ONCE(1, "TX: Unexpected CQE type %d: HW BUG?\n", - cqe_oob->cqe_hdr.cqe_type); + if (net_ratelimit()) + netdev_err(ndev, "TX: unknown CQE type %d\n", + cqe_oob->cqe_hdr.cqe_type); + apc->eth_stats.tx_cqe_unknown_type++; - return; + break; } if (WARN_ON_ONCE(txq->gdma_txq_id != completions[i].wq_num))