Module Name: src Committed By: msaitoh Date: Thu May 10 03:15:28 UTC 2018
Modified Files: src/sys/dev/pci/ixgbe: ixgbe.c Log Message: Count some register correctly: - QPRDC register is only for 82599 and newer. - Count IXGBE_QPRDC, PX{ON,OFF}{T,R}XC[NT]. To generate a diff of this commit: cvs rdiff -u -r1.150 -r1.151 src/sys/dev/pci/ixgbe/ixgbe.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/ixgbe/ixgbe.c diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.150 src/sys/dev/pci/ixgbe/ixgbe.c:1.151 --- src/sys/dev/pci/ixgbe/ixgbe.c:1.150 Tue May 8 09:45:54 2018 +++ src/sys/dev/pci/ixgbe/ixgbe.c Thu May 10 03:15:28 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ixgbe.c,v 1.150 2018/05/08 09:45:54 msaitoh Exp $ */ +/* $NetBSD: ixgbe.c,v 1.151 2018/05/10 03:15:28 msaitoh Exp $ */ /****************************************************************************** @@ -1558,16 +1558,24 @@ ixgbe_update_stats_counters(struct adapt if (hw->mac.type == ixgbe_mac_X550) stats->mbsdc.ev_count += IXGBE_READ_REG(hw, IXGBE_MBSDC); + /* 16 registers */ for (int i = 0; i < __arraycount(stats->qprc); i++) { int j = i % adapter->num_queues; + stats->qprc[j].ev_count += IXGBE_READ_REG(hw, IXGBE_QPRC(i)); stats->qptc[j].ev_count += IXGBE_READ_REG(hw, IXGBE_QPTC(i)); - stats->qprdc[j].ev_count += IXGBE_READ_REG(hw, IXGBE_QPRDC(i)); + if (hw->mac.type >= ixgbe_mac_82599EB) { + stats->qprdc[j].ev_count + += IXGBE_READ_REG(hw, IXGBE_QPRDC(i)); + } } + + /* 8 registers */ for (int i = 0; i < __arraycount(stats->mpc); i++) { uint32_t mp; int j = i % adapter->num_queues; + /* MPC */ mp = IXGBE_READ_REG(hw, IXGBE_MPC(i)); /* global total per queue */ stats->mpc[j].ev_count += mp; @@ -1577,7 +1585,24 @@ ixgbe_update_stats_counters(struct adapt if (hw->mac.type == ixgbe_mac_82598EB) stats->rnbc[j].ev_count += IXGBE_READ_REG(hw, IXGBE_RNBC(i)); - + + stats->pxontxc[j].ev_count + += IXGBE_READ_REG(hw, IXGBE_PXONTXC(i)); + stats->pxofftxc[j].ev_count + += IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i)); + if (hw->mac.type >= ixgbe_mac_82599EB) { + stats->pxonrxc[j].ev_count + += IXGBE_READ_REG(hw, IXGBE_PXONRXCNT(i)); + stats->pxoffrxc[j].ev_count + += IXGBE_READ_REG(hw, IXGBE_PXOFFRXCNT(i)); + stats->pxon2offc[j].ev_count + += IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i)); + } else { + stats->pxonrxc[j].ev_count + += IXGBE_READ_REG(hw, IXGBE_PXONRXC(i)); + stats->pxoffrxc[j].ev_count + += IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i)); + } } stats->mpctotal.ev_count += total_missed_rx; @@ -1828,8 +1853,10 @@ ixgbe_add_hw_stats(struct adapter *adapt evcnt_attach_dynamic(&stats->pxoffrxc[i], EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf, "pxoffrxc"); - evcnt_attach_dynamic(&stats->pxon2offc[i], - EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf, + if (hw->mac.type >= ixgbe_mac_82599EB) + evcnt_attach_dynamic(&stats->pxon2offc[i], + EVCNT_TYPE_MISC, NULL, + adapter->queues[i].evnamebuf, "pxon2offc"); } if (i < __arraycount(stats->qprc)) { @@ -1845,9 +1872,10 @@ ixgbe_add_hw_stats(struct adapter *adapt evcnt_attach_dynamic(&stats->qbtc[i], EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf, "qbtc"); - evcnt_attach_dynamic(&stats->qprdc[i], - EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf, - "qprdc"); + if (hw->mac.type >= ixgbe_mac_82599EB) + evcnt_attach_dynamic(&stats->qprdc[i], + EVCNT_TYPE_MISC, NULL, + adapter->queues[i].evnamebuf, "qprdc"); } evcnt_attach_dynamic(&rxr->rx_packets, EVCNT_TYPE_MISC, @@ -2036,14 +2064,16 @@ ixgbe_clear_evcnt(struct adapter *adapte stats->pxonrxc[i].ev_count = 0; stats->pxofftxc[i].ev_count = 0; stats->pxoffrxc[i].ev_count = 0; - stats->pxon2offc[i].ev_count = 0; + if (hw->mac.type >= ixgbe_mac_82599EB) + stats->pxon2offc[i].ev_count = 0; } if (i < __arraycount(stats->qprc)) { stats->qprc[i].ev_count = 0; stats->qptc[i].ev_count = 0; stats->qbrc[i].ev_count = 0; stats->qbtc[i].ev_count = 0; - stats->qprdc[i].ev_count = 0; + if (hw->mac.type >= ixgbe_mac_82599EB) + stats->qprdc[i].ev_count = 0; } rxr->rx_packets.ev_count = 0; @@ -3474,14 +3504,16 @@ ixgbe_detach(device_t dev, int flags) evcnt_detach(&stats->pxonrxc[i]); evcnt_detach(&stats->pxofftxc[i]); evcnt_detach(&stats->pxoffrxc[i]); - evcnt_detach(&stats->pxon2offc[i]); + if (hw->mac.type >= ixgbe_mac_82599EB) + evcnt_detach(&stats->pxon2offc[i]); } if (i < __arraycount(stats->qprc)) { evcnt_detach(&stats->qprc[i]); evcnt_detach(&stats->qptc[i]); evcnt_detach(&stats->qbrc[i]); evcnt_detach(&stats->qbtc[i]); - evcnt_detach(&stats->qprdc[i]); + if (hw->mac.type >= ixgbe_mac_82599EB) + evcnt_detach(&stats->qprdc[i]); } evcnt_detach(&rxr->rx_packets);