Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp976689imm; Fri, 13 Jul 2018 09:21:47 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfSPQp3qgXvQBxv5yuq3cpYhL5P84Ak9TbaUeFfNOXBdl6VPnIk81bLoZpfc4gGseOch2FG X-Received: by 2002:a62:d34a:: with SMTP id q71-v6mr7761042pfg.17.1531498906898; Fri, 13 Jul 2018 09:21:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531498906; cv=none; d=google.com; s=arc-20160816; b=XLDMrucbAyNUQ9HPHP1lPX4S88d362v0EOx8GeozuKxr585qWuUtvXRqJPwartxr6g 67xD5BdAxmGUkMtLNtfc17vzmuygUrvefAzAHhGwX/XhMk7STpgwMIbZnlBaXvav0+BZ kcmFdxcD+DrBs0FY9MBZlhYgmmEA1IWxlrK3+kdWGxjLKfQE4jCIYi1T5JowRshebgnF vkyRK+SVQ1yyqVp2CeY7RTFlNIYpW28iR8MxvJI+uc9lqGQ84fwHFu/GfqAlpgy8IUEt lTffzXTsrcL+9qKNBiqyWESusGD5k/Yqt2dT7IhiK5LU/oEki/7J/XHnZBI9rxY85Uk6 Zzlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=gt93hbGrDt6rQisNv92+wZjIZeJT8DmsKwqmny3yRR8=; b=QegitP5oKkY1rgz2aqIfsy2iMeUkrDDvbcfRKZl0CyHK+DnKXYygLbMn3+hEWFdwXn S1owQ4P2lNBQE2eRVW7pp2AeeBKnRW1wC45DmsMwB9cwjrI69Ho6YsZ5mHAC9ghtQZKO uWWLB85wN2izm4Ab98de5BANtnwWBEFufegUzfirCal75cYPZ+qa2CMyW8760mrkrTO7 rh6vAGpovjH8031xMZ8vkye56rOg5GG+uhblwB6wPsANubJTJyIkRBHK4yCTPjtDza2s g1AZeWOa8ljQsfQWkxNo7IwzZlJ/k818mIRvAGf4A1w0hJWkbXUnVBraQviPgOh0uJ1x /apw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u8-v6si23775593plh.492.2018.07.13.09.21.32; Fri, 13 Jul 2018 09:21:46 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387842AbeGMQft (ORCPT + 99 others); Fri, 13 Jul 2018 12:35:49 -0400 Received: from mail.bootlin.com ([62.4.15.54]:38952 "EHLO mail.bootlin.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731992AbeGMQfs (ORCPT ); Fri, 13 Jul 2018 12:35:48 -0400 Received: by mail.bootlin.com (Postfix, from userid 110) id EB2C42093C; Fri, 13 Jul 2018 18:20:27 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail.bootlin.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT, URIBL_BLOCKED shortcircuit=ham autolearn=disabled version=3.4.0 Received: from localhost (242.171.71.37.rev.sfr.net [37.71.171.242]) by mail.bootlin.com (Postfix) with ESMTPSA id B775D20884; Fri, 13 Jul 2018 18:20:08 +0200 (CEST) From: Gregory CLEMENT To: "David S. Miller" , linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Thomas Petazzoni , linux-arm-kernel@lists.infradead.org, Jason Cooper , Andrew Lunn , Sebastian Hesselbarth , Gregory CLEMENT , Yelena Krivosheev , Nadav Haklai , Marcin Wojtas , Dmitri Epshtein , Antoine Tenart , =?UTF-8?q?Miqu=C3=A8l=20Raynal?= , Maxime Chevallier Subject: [PATCH net-next v2 4/7] net: mvneta: discriminate error cause for missed packet Date: Fri, 13 Jul 2018 18:18:38 +0200 Message-Id: <20180713161841.11202-5-gregory.clement@bootlin.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180713161841.11202-1-gregory.clement@bootlin.com> References: <20180713161841.11202-1-gregory.clement@bootlin.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to improve the diagnostic in case of error, make the distinction between refill error and skb allocation error. Also make the information available through the ethtool state. Based on the work of Yelena Krivosheev Signed-off-by: Gregory CLEMENT --- drivers/net/ethernet/marvell/mvneta.c | 28 +++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index c22df28b07c8..196205c79995 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c @@ -328,6 +328,8 @@ enum { ETHTOOL_STAT_EEE_WAKEUP, + ETHTOOL_STAT_SKB_ALLOC_ERR, + ETHTOOL_STAT_REFILL_ERR, ETHTOOL_MAX_STATS, }; @@ -375,6 +377,8 @@ static const struct mvneta_statistic mvneta_statistics[] = { { 0x3054, T_REG_32, "fc_sent", }, { 0x300c, T_REG_32, "internal_mac_transmit_err", }, { ETHTOOL_STAT_EEE_WAKEUP, T_SW, "eee_wakeup_errors", }, + { ETHTOOL_STAT_SKB_ALLOC_ERR, T_SW, "skb_alloc_errors", }, + { ETHTOOL_STAT_REFILL_ERR, T_SW, "refill_errors", }, }; struct mvneta_pcpu_stats { @@ -589,9 +593,6 @@ struct mvneta_rx_queue { /* num of rx descriptors in the rx descriptor ring */ int size; - /* counter of times when mvneta_refill() failed */ - int missed; - u32 pkts_coal; u32 time_coal; @@ -609,6 +610,10 @@ struct mvneta_rx_queue { /* Index of the next RX DMA descriptor to process */ int next_desc_to_proc; + + /* error counters */ + u32 skb_alloc_err; + u32 refill_err; }; static enum cpuhp_state online_hpstate; @@ -1946,8 +1951,13 @@ static int mvneta_rx_swbm(struct napi_struct *napi, if (rx_bytes <= rx_copybreak) { /* better copy a small frame and not unmap the DMA region */ skb = netdev_alloc_skb_ip_align(dev, rx_bytes); - if (unlikely(!skb)) + if (unlikely(!skb)) { + netdev_err(dev, + "Can't allocate skb on queue %d\n", + rxq->id); + rxq->skb_alloc_err++; goto err_drop_frame; + } dma_sync_single_range_for_cpu(dev->dev.parent, phys_addr, @@ -1972,7 +1982,7 @@ static int mvneta_rx_swbm(struct napi_struct *napi, err = mvneta_rx_refill(pp, rx_desc, rxq); if (err) { netdev_err(dev, "Linux processing - Can't refill\n"); - rxq->missed++; + rxq->refill_err++; goto err_drop_frame; } @@ -2102,7 +2112,7 @@ static int mvneta_rx_hwbm(struct napi_struct *napi, err = hwbm_pool_refill(&bm_pool->hwbm_pool, GFP_ATOMIC); if (err) { netdev_err(dev, "Linux processing - Can't refill\n"); - rxq->missed++; + rxq->refill_err++; goto err_drop_frame_ret_pool; } @@ -3964,6 +3974,12 @@ static void mvneta_ethtool_update_stats(struct mvneta_port *pp) case ETHTOOL_STAT_EEE_WAKEUP: val = phylink_get_eee_err(pp->phylink); break; + case ETHTOOL_STAT_SKB_ALLOC_ERR: + val = pp->rxqs[0].skb_alloc_err; + break; + case ETHTOOL_STAT_REFILL_ERR: + val = pp->rxqs[0].refill_err; + break; } break; } -- 2.18.0