igb: Remove artificial restriction on RQDPC stat reading
authorAlexander Duyck <[email protected]>
Wed, 8 Aug 2012 05:23:22 +0000 (05:23 +0000)
committerJeff Kirsher <[email protected]>
Thu, 20 Sep 2012 09:30:32 +0000 (02:30 -0700)
For some reason the reading of the RQDPC register was being artificially
limited to 4K.  Instead of limiting the value we should read the value and
add the full amount.  Otherwise this can lead to a misleading number of
dropped packets when the actual value is in fact much higher.

Signed-off-by: Alexander Duyck <[email protected]>
Tested-by: Jeff Pieper <[email protected]>
Signed-off-by: Jeff Kirsher <[email protected]>
drivers/net/ethernet/intel/igb/igb_main.c

index 19d7666dfccb1c82f8beffcbb71799cedd9027e0..246646b61a1a2467886350f24bee23802a5f81ca 100644 (file)
@@ -4681,11 +4681,13 @@ void igb_update_stats(struct igb_adapter *adapter,
        bytes = 0;
        packets = 0;
        for (i = 0; i < adapter->num_rx_queues; i++) {
-               u32 rqdpc_tmp = rd32(E1000_RQDPC(i)) & 0x0FFF;
+               u32 rqdpc = rd32(E1000_RQDPC(i));
                struct igb_ring *ring = adapter->rx_ring[i];
 
-               ring->rx_stats.drops += rqdpc_tmp;
-               net_stats->rx_fifo_errors += rqdpc_tmp;
+               if (rqdpc) {
+                       ring->rx_stats.drops += rqdpc;
+                       net_stats->rx_fifo_errors += rqdpc;
+               }
 
                do {
                        start = u64_stats_fetch_begin_bh(&ring->rx_syncp);