mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Finn Thain <fthain@telegraphics.com.au>
To: "David S. Miller" <davem@davemloft.net>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Chris Zankel <chris@zankel.net>,
	Laurent Vivier <laurent@vivier.eu>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH net 11/19] net/sonic: Fix interface error stats collection
Date: Mon, 20 Jan 2020 09:56:09 +1100	[thread overview]
Message-ID: <0e2a77f40f47ce7a5fcc66f86014b880968a88cd.1579474569.git.fthain@telegraphics.com.au> (raw)
In-Reply-To: <cover.1579474569.git.fthain@telegraphics.com.au>

The tx_aborted_errors statistic should count packets flagged with EXD,
EXC, FU, or BCM bits because those bits denote an aborted transmission.
That corresponds to the bitmask 0x0446, not 0x0642. Use macros for these
constants to avoid mistakes. Better to leave out FIFO Underruns (FU) as
there's a separate counter for that purpose.

Don't lump all these errors in with the general tx_errors counter as
that's used for tx timeout events.

On the rx side, don't count RDE and RBAE interrupts as dropped packets.
These interrupts don't indicate a lost packet, just a lack of resources.
When a lack of resources results in a lost packet, this gets reported
in the rx_missed_errors counter (along with RFO events).

Don't double-count rx_frame_errors and rx_crc_errors.

Don't use the general rx_errors counter for events that already have
special counters.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Tested-by: Stan Johnson <userm57@yahoo.com>
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
---
 drivers/net/ethernet/natsemi/sonic.c | 21 +++++++--------------
 drivers/net/ethernet/natsemi/sonic.h |  1 +
 2 files changed, 8 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/natsemi/sonic.c b/drivers/net/ethernet/natsemi/sonic.c
index 6660bd75b699..ea74c3c2c501 100644
--- a/drivers/net/ethernet/natsemi/sonic.c
+++ b/drivers/net/ethernet/natsemi/sonic.c
@@ -360,18 +360,19 @@ static irqreturn_t sonic_interrupt(int irq, void *dev_id)
 				if ((td_status = sonic_tda_get(dev, entry, SONIC_TD_STATUS)) == 0)
 					break;
 
-				if (td_status & 0x0001) {
+				if (td_status & SONIC_TCR_PTX) {
 					lp->stats.tx_packets++;
 					lp->stats.tx_bytes += sonic_tda_get(dev, entry, SONIC_TD_PKTSIZE);
 				} else {
-					lp->stats.tx_errors++;
-					if (td_status & 0x0642)
+					if (td_status & (SONIC_TCR_EXD |
+					    SONIC_TCR_EXC | SONIC_TCR_BCM))
 						lp->stats.tx_aborted_errors++;
-					if (td_status & 0x0180)
+					if (td_status &
+					    (SONIC_TCR_NCRS | SONIC_TCR_CRLS))
 						lp->stats.tx_carrier_errors++;
-					if (td_status & 0x0020)
+					if (td_status & SONIC_TCR_OWC)
 						lp->stats.tx_window_errors++;
-					if (td_status & 0x0004)
+					if (td_status & SONIC_TCR_FU)
 						lp->stats.tx_fifo_errors++;
 				}
 
@@ -401,17 +402,14 @@ static irqreturn_t sonic_interrupt(int irq, void *dev_id)
 		if (status & SONIC_INT_RFO) {
 			netif_dbg(lp, rx_err, dev, "%s: rx fifo overrun\n",
 				  __func__);
-			lp->stats.rx_fifo_errors++;
 		}
 		if (status & SONIC_INT_RDE) {
 			netif_dbg(lp, rx_err, dev, "%s: rx descriptors exhausted\n",
 				  __func__);
-			lp->stats.rx_dropped++;
 		}
 		if (status & SONIC_INT_RBAE) {
 			netif_dbg(lp, rx_err, dev, "%s: rx buffer area exceeded\n",
 				  __func__);
-			lp->stats.rx_dropped++;
 		}
 
 		/* counter overruns; all counters are 16bit wide */
@@ -503,11 +501,6 @@ static void sonic_rx(struct net_device *dev)
 			sonic_rra_put(dev, entry, SONIC_RR_BUFADR_H, bufadr_h);
 		} else {
 			/* This should only happen, if we enable accepting broken packets. */
-			lp->stats.rx_errors++;
-			if (status & SONIC_RCR_FAER)
-				lp->stats.rx_frame_errors++;
-			if (status & SONIC_RCR_CRCR)
-				lp->stats.rx_crc_errors++;
 		}
 		if (status & SONIC_RCR_LPKT) {
 			/*
diff --git a/drivers/net/ethernet/natsemi/sonic.h b/drivers/net/ethernet/natsemi/sonic.h
index f4aa1e4159da..227975eb4cb8 100644
--- a/drivers/net/ethernet/natsemi/sonic.h
+++ b/drivers/net/ethernet/natsemi/sonic.h
@@ -175,6 +175,7 @@
 #define SONIC_TCR_NCRS          0x0100
 #define SONIC_TCR_CRLS          0x0080
 #define SONIC_TCR_EXC           0x0040
+#define SONIC_TCR_OWC           0x0020
 #define SONIC_TCR_PMB           0x0008
 #define SONIC_TCR_FU            0x0004
 #define SONIC_TCR_BCM           0x0002
-- 
2.24.1


  parent reply	other threads:[~2020-01-19 23:18 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-19 22:56 [PATCH net 00/19] Fixes for SONIC ethernet driver Finn Thain
2020-01-19 22:56 ` [PATCH net 07/19] net/sonic: Clear interrupt flags immediately Finn Thain
2020-01-19 22:56 ` [PATCH net 14/19] net/sonic: Improve receive descriptor status flag check Finn Thain
2020-01-19 22:56 ` [PATCH net 18/19] net/sonic: Fix CAM initialization Finn Thain
2020-01-19 22:56 ` [PATCH net 19/19] net/sonic: Prevent tx watchdog timeout Finn Thain
2020-01-19 22:56 ` [PATCH net 09/19] net/sonic: Remove explicit memory barriers Finn Thain
2020-01-19 22:56 ` [PATCH net 17/19] net/sonic: Fix command register usage Finn Thain
2020-01-19 22:56 ` [PATCH net 16/19] net/sonic: Quiesce SONIC before re-initializing descriptor memory Finn Thain
2020-01-19 22:56 ` Finn Thain [this message]
2020-01-19 22:56 ` [PATCH net 01/19] net/sonic: Remove obsolete comment Finn Thain
2020-01-19 22:56 ` [PATCH net 13/19] net/sonic: Avoid needless receive descriptor EOL flag updates Finn Thain
2020-01-19 22:56 ` [PATCH net 06/19] net/macsonic: Remove interrupt handler wrapper Finn Thain
2020-01-19 22:56 ` [PATCH net 08/19] net/sonic: Use MMIO accessors Finn Thain
2020-01-19 22:56 ` [PATCH net 10/19] net/sonic: Start packet transmission immediately Finn Thain
2020-01-19 22:56 ` [PATCH net 03/19] net/sonic: Refactor duplicated code Finn Thain
2020-01-19 22:56 ` [PATCH net 02/19] net/sonic: Remove redundant next_tx variable Finn Thain
2020-01-19 22:56 ` [PATCH net 04/19] net/sonic: Add mutual exclusion for accessing shared state Finn Thain
2020-01-20  8:29   ` Geert Uytterhoeven
2020-01-20 22:23     ` Finn Thain
2020-01-19 22:56 ` [PATCH net 05/19] net/sonic: Remove redundant netif_start_queue() call Finn Thain
2020-01-19 22:56 ` [PATCH net 15/19] net/sonic: Fix receive buffer replenishment Finn Thain
2020-01-19 22:56 ` [PATCH net 12/19] net/sonic: Fix receive buffer handling Finn Thain
2020-01-20 10:06 ` [PATCH net 00/19] Fixes for SONIC ethernet driver David Miller
2020-01-20 23:28   ` Finn Thain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0e2a77f40f47ce7a5fcc66f86014b880968a88cd.1579474569.git.fthain@telegraphics.com.au \
    --to=fthain@telegraphics.com.au \
    --cc=chris@zankel.net \
    --cc=davem@davemloft.net \
    --cc=laurent@vivier.eu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=tsbogend@alpha.franken.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®