Add per queue drop count to rx_over_errors.
rx_over_errors is not supposed to be zero while
eth0/bcmgenet_discard_cnt_q0 increments.
This partially fixes b/8394453.
Additionally, rx_fifo_errors counter is used when the dmaFlag has DMA_RX_OV
in it instead of rx_over_errors so we can differentiate betweeen fifo
errors and insufficient descriptors errors.
Note: I was't able to test the situation where DMA_RX_OV flag is present
but the risk is minimal in this case.
Change-Id: I5b673f0c95289b624ee0214fcb5411cd6b4fca03
diff --git a/drivers/net/bcmgenet/bcmgenet.c b/drivers/net/bcmgenet/bcmgenet.c
index 3a18e43..92f9855 100755
--- a/drivers/net/bcmgenet/bcmgenet.c
+++ b/drivers/net/bcmgenet/bcmgenet.c
@@ -1915,8 +1915,7 @@
if (rx_discard_flag) {
int discard_cnt = rDma_ring->rdma_producer_index >> 16;
/* Report rx overrun errors */
- pDevCtrl->dev->stats.rx_over_errors += discard_cnt -
- pDevCtrl->rxRingDiscCnt[i];
+ pDevCtrl->dev->stats.rx_over_errors += discard_cnt;
pDevCtrl->rxRingDiscCnt[i] += discard_cnt;
rDma_ring->rdma_producer_index = 0;
}
@@ -2012,7 +2011,7 @@
if (dmaFlag & DMA_RX_CRC_ERROR)
pDevCtrl->dev->stats.rx_crc_errors++;
if (dmaFlag & DMA_RX_OV)
- pDevCtrl->dev->stats.rx_over_errors++;
+ pDevCtrl->dev->stats.rx_fifo_errors++;
if (dmaFlag & DMA_RX_NO)
pDevCtrl->dev->stats.rx_frame_errors++;
if (dmaFlag & DMA_RX_LG)
@@ -2234,6 +2233,8 @@
discard_cnt = (rDma_desc->rdma_producer_index >> 16);
if (discard_cnt) {
+ /* Report rx overrun errors */
+ pDevCtrl->dev->stats.rx_over_errors += discard_cnt;
pDevCtrl->rxRingDiscCnt[index] += discard_cnt;
rDma_desc->rdma_producer_index = 0;
}
@@ -2287,7 +2288,7 @@
if (dmaFlag & DMA_RX_CRC_ERROR)
dev->stats.rx_crc_errors++;
if (dmaFlag & DMA_RX_OV)
- dev->stats.rx_over_errors++;
+ dev->stats.rx_fifo_errors++;
if (dmaFlag & DMA_RX_NO)
dev->stats.rx_frame_errors++;
if (dmaFlag & DMA_RX_LG)