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: sta...@vger.kernel.org
> Fixes: ca9c54d2d6a5 ("net: mana: Add a driver for Microsoft Azure Network 
> Adapter (MANA)")
> Signed-off-by: Haiyang Zhang <haiya...@microsoft.com>
> Reviewed-by: Simon Horman <ho...@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 <shradhagu...@linux.microsoft.com>

Reply via email to