[dpdk-dev] e1000: fix rx/tx total byte statistics

Message ID 1445527084-29535-1-git-send-email-harry.van.haaren@intel.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

Van Haaren, Harry Oct. 22, 2015, 3:18 p.m. UTC
  This patch fixes a bug in reading the 64 bit register reading
which was causing the total octets counters to show zero.
Now the code reads both the lower and higher 32 bits.
Tested in testpmd, byte values are correct.

Fixes: 805803445a02 ("e1000: support EM devices (also known as e1000/e1000e)")

Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
---
 drivers/net/e1000/igb_ethdev.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
  

Comments

Wenzhuo Lu Oct. 23, 2015, 2:31 a.m. UTC | #1
Hi,

> -----Original Message-----
> From: Van Haaren, Harry
> Sent: Thursday, October 22, 2015 11:18 PM
> To: dev@dpdk.org
> Cc: Lu, Wenzhuo; Van Haaren, Harry
> Subject: [PATCH] e1000: fix rx/tx total byte statistics
> 
> This patch fixes a bug in reading the 64 bit register reading which was
> causing the total octets counters to show zero.
> Now the code reads both the lower and higher 32 bits.
> Tested in testpmd, byte values are correct.
> 
> Fixes: 805803445a02 ("e1000: support EM devices (also known as
> e1000/e1000e)")
> 
> Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
  
Thomas Monjalon Oct. 27, 2015, 5:41 p.m. UTC | #2
> > This patch fixes a bug in reading the 64 bit register reading which was
> > causing the total octets counters to show zero.
> > Now the code reads both the lower and higher 32 bits.
> > Tested in testpmd, byte values are correct.
> > 
> > Fixes: 805803445a02 ("e1000: support EM devices (also known as
> > e1000/e1000e)")
> > 
> > Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
> Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>

It was an old bug :)

Applied, thanks
  

Patch

diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
index 848ef6e..2b081b1 100644
--- a/drivers/net/e1000/igb_ethdev.c
+++ b/drivers/net/e1000/igb_ethdev.c
@@ -1316,8 +1316,10 @@  eth_igb_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
 	stats->roc += E1000_READ_REG(hw, E1000_ROC);
 	stats->rjc += E1000_READ_REG(hw, E1000_RJC);
 
-	stats->tor += E1000_READ_REG(hw, E1000_TORH);
-	stats->tot += E1000_READ_REG(hw, E1000_TOTH);
+	stats->tor += E1000_READ_REG(hw, E1000_TORL);
+	stats->tor += ((uint64_t)E1000_READ_REG(hw, E1000_TORH) << 32);
+	stats->tot += E1000_READ_REG(hw, E1000_TOTL);
+	stats->tot += ((uint64_t)E1000_READ_REG(hw, E1000_TOTH) << 32);
 
 	stats->tpr += E1000_READ_REG(hw, E1000_TPR);
 	stats->tpt += E1000_READ_REG(hw, E1000_TPT);