Skip to contentSkip to conversation

staging: et131x: Fix stats->rx_packets accounting

PATCH New Mark Einon 1 participant 2 messages Jul 3, 2011 Staging

lore
Share & tools
lore

Mark Einon

author
#0 lore raw

PATCH 1/2 staging: et131x: Fix stats->rx_packets accounting

The net_device_stats->rx_packets counter is not getting updated. This is due to checking a fMP_ADAPTER_LINK_DETECTION flag prior to updating which is never set.

Solved by using netif_carrier_ok() to test for a link, and removing the fMP_ADAPTER_LINK_DETECTION flag, which looks to be a broken mechanism.

---
 drivers/staging/et131x/et1310_phy.c     |    4 +---
 drivers/staging/et131x/et1310_rx.c      |    5 ++---
 drivers/staging/et131x/et131x_defs.h    |    1 -
 drivers/staging/et131x/et131x_initpci.c |    1 -
 drivers/staging/et131x/et131x_netdev.c  |    4 ----
 5 files changed, 3 insertions(+), 12 deletions(-)
drivers/staging/et131x/et1310_phy.c +1 -3
index 1df0d05..f88b204 100644
@@ -750,7 +750,6 @@ void et131x_Mii_check(struct et131x_adapter *etdev,
 			spin_lock_irqsave(&etdev->Lock, flags);
 
 			etdev->MediaState = NETIF_STATUS_MEDIA_CONNECT;
-			etdev->Flags &= ~fMP_ADAPTER_LINK_DETECTION;
 
 			spin_unlock_irqrestore(&etdev->Lock, flags);
 
@@ -780,8 +779,7 @@ void et131x_Mii_check(struct et131x_adapter *etdev,
 			 * Timer expires, we can report disconnected (handled
 			 * in the LinkDetectionDPC).
 			 */
-			if (!(etdev->Flags & fMP_ADAPTER_LINK_DETECTION) ||
-			 (etdev->MediaState == NETIF_STATUS_MEDIA_DISCONNECT)) {
+			if ((etdev->MediaState == NETIF_STATUS_MEDIA_DISCONNECT)) {
 				spin_lock_irqsave(&etdev->Lock, flags);
 				etdev->MediaState =
 				    NETIF_STATUS_MEDIA_DISCONNECT;
drivers/staging/et131x/et1310_rx.c +2 -3
index 100ee9b4..6c0a64b 100644
@@ -1126,10 +1126,9 @@ void et131x_handle_recv_interrupt(struct et131x_adapter *etdev)
 		 * Free buffer ring.
 		 */
 		if (!etdev->PacketFilter ||
-		    !(etdev->Flags & fMP_ADAPTER_LINK_DETECTION) ||
-		    rfd->len == 0) {
+		    !netif_carrier_ok(etdev->netdev) ||
+		    rfd->len == 0)
 			continue;
-		}
 
 		/* Increment the number of packets we received */
 		etdev->stats.ipackets++;
drivers/staging/et131x/et131x_defs.h +0 -1
index d81fc77..3d5193f 100644
@@ -95,7 +95,6 @@
 #define fMP_ADAPTER_HARDWARE_ERROR	0x04000000
 #define fMP_ADAPTER_REMOVE_IN_PROGRESS	0x08000000
 #define fMP_ADAPTER_HALT_IN_PROGRESS	0x10000000
-#define fMP_ADAPTER_LINK_DETECTION	0x20000000
 
 #define fMP_ADAPTER_FAIL_SEND_MASK	0x3ff00000
 #define fMP_ADAPTER_NOT_READY_MASK	0x3ff00000
drivers/staging/et131x/et131x_initpci.c +0 -1
index 1dd2e5e..a9d2521 100644
@@ -312,7 +312,6 @@ void et131x_link_detection_handler(unsigned long data)
 		spin_lock_irqsave(&etdev->Lock, flags);
 
 		etdev->MediaState = NETIF_STATUS_MEDIA_DISCONNECT;
-		etdev->Flags &= ~fMP_ADAPTER_LINK_DETECTION;
 
 		spin_unlock_irqrestore(&etdev->Lock, flags);
 
drivers/staging/et131x/et131x_netdev.c +0 -4
index 2da5828..c890d09 100644
@@ -450,10 +450,6 @@ void et131x_tx_timeout(struct net_device *netdev)
 	struct tcb *tcb;
 	unsigned long flags;
 
-	/* Just skip this part if the adapter is doing link detection */
-	if (etdev->Flags & fMP_ADAPTER_LINK_DETECTION)
-		return;
-
 	/* Any nonrecoverable hardware error?
 	 * Checks adapter->flags for any failure in phy reading
 	 */
Signature · 1 line
1.7.4.4
author
#1 lore raw

PATCH 2/2 staging: et131x: Remove some unecessary packet accounting code

The ce_stats ipackets and opackets members are only used to update the net_device_stats->[r,t]x_packets counters, so get rid of them.

---
 drivers/staging/et131x/et1310_rx.c      |    2 +-
 drivers/staging/et131x/et1310_tx.c      |    2 +-
 drivers/staging/et131x/et131x_adapter.h |    5 -----
 drivers/staging/et131x/et131x_netdev.c  |    6 +-----
 4 files changed, 3 insertions(+), 12 deletions(-)
drivers/staging/et131x/et1310_rx.c +1 -1
index 6c0a64b..fc90096 100644
@@ -1131,7 +1131,7 @@ void et131x_handle_recv_interrupt(struct et131x_adapter *etdev)
 			continue;
 
 		/* Increment the number of packets we received */
-		etdev->stats.ipackets++;
+		etdev->net_stats.rx_packets++;
 
 		/* Set the status on the packet, either resources or success */
 		if (etdev->rx_ring.nReadyRecv < RFD_LOW_WATER_MARK) {
drivers/staging/et131x/et1310_tx.c +1 -1
index b8f8dae..bb67192 100644
@@ -673,7 +673,7 @@ inline void et131x_free_send_packet(struct et131x_adapter *etdev,
 	/* Add the TCB to the Ready Q */
 	spin_lock_irqsave(&etdev->TCBReadyQLock, flags);
 
-	etdev->stats.opackets++;
+	etdev->net_stats.tx_packets++;
 
 	if (etdev->tx_ring.tcb_qtail)
 		etdev->tx_ring.tcb_qtail->next = tcb;
drivers/staging/et131x/et131x_adapter.h +0 -5
index c6657f4..99c2ef6 100644
@@ -99,10 +99,6 @@ struct rfd {
 
 /* Struct to define some device statistics */
 struct ce_stats {
-	/* Link Input/Output stats */
-	uint64_t ipackets;	/* # of in packets */
-	uint64_t opackets;	/* # of out packets */
-
 	/* MIB II variables
 	 *
 	 * NOTE: atomic_t types are only guaranteed to store 24-bits; if we
@@ -242,7 +238,6 @@ struct et131x_adapter {
 	struct ce_stats stats;
 
 	struct net_device_stats net_stats;
-	struct net_device_stats net_stats_prev;
 };
 
 #endif /* __ET131X_ADAPTER_H__ */
drivers/staging/et131x/et131x_netdev.c +1 -5
index c890d09..6bcddf1 100644
@@ -88,22 +88,18 @@
 #include "et131x_adapter.h"
 #include "et131x.h"
 
-struct net_device_stats *et131x_stats(struct net_device *netdev);
-
 /**
  * et131x_stats - Return the current device statistics.
  * @netdev: device whose stats are being queried
  *
  * Returns 0 on success, errno on failure (as defined in errno.h)
  */
-struct net_device_stats *et131x_stats(struct net_device *netdev)
+static struct net_device_stats *et131x_stats(struct net_device *netdev)
 {
 	struct et131x_adapter *adapter = netdev_priv(netdev);
 	struct net_device_stats *stats = &adapter->net_stats;
 	struct ce_stats *devstat = &adapter->stats;
 
-	stats->rx_packets = devstat->ipackets;
-	stats->tx_packets = devstat->opackets;
 	stats->rx_errors = devstat->length_err + devstat->alignment_err +
 	    devstat->crc_err + devstat->code_violations + devstat->other_errors;
 	stats->tx_errors = devstat->max_pkt_error;
Signature · 1 line
1.7.4.4