aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
diff options
context:
space:
mode:
authorEmil Tantilov <emil.s.tantilov@intel.com>2011-07-26 03:51:41 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2011-09-16 22:02:37 -0400
commit1a70db4b05fcaa976b625d47fba5e6cc2d89b0ae (patch)
treecf8c247c8820bc1b6ece7412eb68d12629215ed0 /drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
parent919e78a6b890bdcce8ca0fa699bd361c6f24dc94 (diff)
ixgbe: cleanup some register reads
Remove duplicate inc of hwstats->ruc Introduce separate loops for 8 and 16 register reads. Consolidate mac checks under one case. Make sure registers are cleared on read. Reported-by: Jonathan Lynch <jonathan.lynch@thenowfactory.com> Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com> CC: Jonathan Lynch <jonathan.lynch@thenowfactory.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbe/ixgbe_main.c')
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index a4103efde363..1e72c00dd7c0 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -5463,20 +5463,21 @@ void ixgbe_update_stats(struct ixgbe_adapter *adapter)
5463 netdev->stats.tx_packets = packets; 5463 netdev->stats.tx_packets = packets;
5464 5464
5465 hwstats->crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS); 5465 hwstats->crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS);
5466
5467 /* 8 register reads */
5466 for (i = 0; i < 8; i++) { 5468 for (i = 0; i < 8; i++) {
5467 /* for packet buffers not used, the register should read 0 */ 5469 /* for packet buffers not used, the register should read 0 */
5468 mpc = IXGBE_READ_REG(hw, IXGBE_MPC(i)); 5470 mpc = IXGBE_READ_REG(hw, IXGBE_MPC(i));
5469 missed_rx += mpc; 5471 missed_rx += mpc;
5470 hwstats->mpc[i] += mpc; 5472 hwstats->mpc[i] += mpc;
5471 total_mpc += hwstats->mpc[i]; 5473 total_mpc += hwstats->mpc[i];
5472 if (hw->mac.type == ixgbe_mac_82598EB) 5474 hwstats->pxontxc[i] += IXGBE_READ_REG(hw, IXGBE_PXONTXC(i));
5473 hwstats->rnbc[i] += IXGBE_READ_REG(hw, IXGBE_RNBC(i)); 5475 hwstats->pxofftxc[i] += IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i));
5474 hwstats->qptc[i] += IXGBE_READ_REG(hw, IXGBE_QPTC(i));
5475 hwstats->qbtc[i] += IXGBE_READ_REG(hw, IXGBE_QBTC(i));
5476 hwstats->qprc[i] += IXGBE_READ_REG(hw, IXGBE_QPRC(i));
5477 hwstats->qbrc[i] += IXGBE_READ_REG(hw, IXGBE_QBRC(i));
5478 switch (hw->mac.type) { 5476 switch (hw->mac.type) {
5479 case ixgbe_mac_82598EB: 5477 case ixgbe_mac_82598EB:
5478 hwstats->rnbc[i] += IXGBE_READ_REG(hw, IXGBE_RNBC(i));
5479 hwstats->qbtc[i] += IXGBE_READ_REG(hw, IXGBE_QBTC(i));
5480 hwstats->qbrc[i] += IXGBE_READ_REG(hw, IXGBE_QBRC(i));
5480 hwstats->pxonrxc[i] += 5481 hwstats->pxonrxc[i] +=
5481 IXGBE_READ_REG(hw, IXGBE_PXONRXC(i)); 5482 IXGBE_READ_REG(hw, IXGBE_PXONRXC(i));
5482 break; 5483 break;
@@ -5488,9 +5489,21 @@ void ixgbe_update_stats(struct ixgbe_adapter *adapter)
5488 default: 5489 default:
5489 break; 5490 break;
5490 } 5491 }
5491 hwstats->pxontxc[i] += IXGBE_READ_REG(hw, IXGBE_PXONTXC(i));
5492 hwstats->pxofftxc[i] += IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i));
5493 } 5492 }
5493
5494 /*16 register reads */
5495 for (i = 0; i < 16; i++) {
5496 hwstats->qptc[i] += IXGBE_READ_REG(hw, IXGBE_QPTC(i));
5497 hwstats->qprc[i] += IXGBE_READ_REG(hw, IXGBE_QPRC(i));
5498 if ((hw->mac.type == ixgbe_mac_82599EB) ||
5499 (hw->mac.type == ixgbe_mac_X540)) {
5500 hwstats->qbtc[i] += IXGBE_READ_REG(hw, IXGBE_QBTC_L(i));
5501 IXGBE_READ_REG(hw, IXGBE_QBTC_H(i)); /* to clear */
5502 hwstats->qbrc[i] += IXGBE_READ_REG(hw, IXGBE_QBRC_L(i));
5503 IXGBE_READ_REG(hw, IXGBE_QBRC_H(i)); /* to clear */
5504 }
5505 }
5506
5494 hwstats->gprc += IXGBE_READ_REG(hw, IXGBE_GPRC); 5507 hwstats->gprc += IXGBE_READ_REG(hw, IXGBE_GPRC);
5495 /* work around hardware counting issue */ 5508 /* work around hardware counting issue */
5496 hwstats->gprc -= missed_rx; 5509 hwstats->gprc -= missed_rx;
@@ -5550,7 +5563,6 @@ void ixgbe_update_stats(struct ixgbe_adapter *adapter)
5550 hwstats->lxontxc += lxon; 5563 hwstats->lxontxc += lxon;
5551 lxoff = IXGBE_READ_REG(hw, IXGBE_LXOFFTXC); 5564 lxoff = IXGBE_READ_REG(hw, IXGBE_LXOFFTXC);
5552 hwstats->lxofftxc += lxoff; 5565 hwstats->lxofftxc += lxoff;
5553 hwstats->ruc += IXGBE_READ_REG(hw, IXGBE_RUC);
5554 hwstats->gptc += IXGBE_READ_REG(hw, IXGBE_GPTC); 5566 hwstats->gptc += IXGBE_READ_REG(hw, IXGBE_GPTC);
5555 hwstats->mptc += IXGBE_READ_REG(hw, IXGBE_MPTC); 5567 hwstats->mptc += IXGBE_READ_REG(hw, IXGBE_MPTC);
5556 /* 5568 /*