Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci/ixgbe Clear all event counters when SIOCZIFDATA(...
details: https://anonhg.NetBSD.org/src/rev/8673ed90d694
branches: trunk
changeset: 824163:8673ed90d694
user: msaitoh <msaitoh%NetBSD.org@localhost>
date: Fri May 26 07:42:15 2017 +0000
description:
Clear all event counters when SIOCZIFDATA(ifconfig -z) is called.
diffstat:
sys/dev/pci/ixgbe/ixgbe.c | 122 +++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 120 insertions(+), 2 deletions(-)
diffs (167 lines):
diff -r 29e84ac52b63 -r 8673ed90d694 sys/dev/pci/ixgbe/ixgbe.c
--- a/sys/dev/pci/ixgbe/ixgbe.c Fri May 26 06:41:42 2017 +0000
+++ b/sys/dev/pci/ixgbe/ixgbe.c Fri May 26 07:42:15 2017 +0000
@@ -59,7 +59,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
/*$FreeBSD: head/sys/dev/ixgbe/if_ix.c 302384 2016-07-07 03:39:18Z sbruno $*/
-/*$NetBSD: ixgbe.c,v 1.84 2017/05/22 07:35:14 msaitoh Exp $*/
+/*$NetBSD: ixgbe.c,v 1.85 2017/05/26 07:42:15 msaitoh Exp $*/
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -198,6 +198,7 @@
static void ixgbe_add_device_sysctls(struct adapter *);
static void ixgbe_add_hw_stats(struct adapter *);
+static void ixgbe_clear_evcnt(struct adapter *);
static int ixgbe_set_flowcntl(struct adapter *, int);
static int ixgbe_set_advertise(struct adapter *, int);
@@ -1063,6 +1064,7 @@
ixgbe_ioctl(struct ifnet * ifp, u_long command, void *data)
{
struct adapter *adapter = ifp->if_softc;
+ struct ixgbe_hw *hw = &adapter->hw;
struct ifcapreq *ifcr = data;
struct ifreq *ifr = data;
int error = 0;
@@ -1113,6 +1115,11 @@
case SIOCGLIFADDR:
IOCTL_DEBUGOUT("ioctl: SIOCGLIFADDR (Get Interface addr)");
break;
+ case SIOCZIFDATA:
+ IOCTL_DEBUGOUT("ioctl: SIOCZIFDATA (Zero counter)");
+ hw->mac.ops.clear_hw_cntrs(hw);
+ ixgbe_clear_evcnt(adapter);
+ break;
case SIOCAIFADDR:
IOCTL_DEBUGOUT("ioctl: SIOCAIFADDR (add/chg IF alias)");
break;
@@ -1128,7 +1135,6 @@
return ifmedia_ioctl(ifp, ifr, &adapter->media, command);
case SIOCGI2C:
{
- struct ixgbe_hw *hw = &adapter->hw;
struct ixgbe_i2c_req i2c;
IOCTL_DEBUGOUT("ioctl: SIOCGI2C (Get I2C Data)");
error = copyin(ifr->ifr_data, &i2c, sizeof(i2c));
@@ -5077,6 +5083,118 @@
}
static void
+ixgbe_clear_evcnt(struct adapter *adapter)
+{
+ struct tx_ring *txr = adapter->tx_rings;
+ struct rx_ring *rxr = adapter->rx_rings;
+ struct ixgbe_hw *hw = &adapter->hw;
+ struct ixgbe_hw_stats *stats = &adapter->stats.pf;
+
+ adapter->handleq.ev_count = 0;
+ adapter->req.ev_count = 0;
+ adapter->efbig_tx_dma_setup.ev_count = 0;
+ adapter->mbuf_defrag_failed.ev_count = 0;
+ adapter->efbig2_tx_dma_setup.ev_count = 0;
+ adapter->einval_tx_dma_setup.ev_count = 0;
+ adapter->other_tx_dma_setup.ev_count = 0;
+ adapter->eagain_tx_dma_setup.ev_count = 0;
+ adapter->enomem_tx_dma_setup.ev_count = 0;
+ adapter->watchdog_events.ev_count = 0;
+ adapter->tso_err.ev_count = 0;
+ adapter->link_irq.ev_count = 0;
+
+ txr = adapter->tx_rings;
+ for (int i = 0; i < adapter->num_queues; i++, rxr++, txr++) {
+ adapter->queues[i].irqs.ev_count = 0;
+ txr->no_desc_avail.ev_count = 0;
+ txr->total_packets.ev_count = 0;
+ txr->tso_tx.ev_count = 0;
+#ifndef IXGBE_LEGACY_TX
+ txr->pcq_drops.ev_count = 0;
+#endif
+
+ if (i < __arraycount(stats->mpc)) {
+ stats->mpc[i].ev_count = 0;
+ if (hw->mac.type == ixgbe_mac_82598EB)
+ stats->rnbc[i].ev_count = 0;
+ }
+ if (i < __arraycount(stats->pxontxc)) {
+ stats->pxontxc[i].ev_count = 0;
+ 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 (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;
+ }
+
+ rxr->rx_packets.ev_count = 0;
+ rxr->rx_bytes.ev_count = 0;
+ rxr->rx_copies.ev_count = 0;
+ rxr->no_jmbuf.ev_count = 0;
+ rxr->rx_discarded.ev_count = 0;
+ }
+ stats->ipcs.ev_count = 0;
+ stats->l4cs.ev_count = 0;
+ stats->ipcs_bad.ev_count = 0;
+ stats->l4cs_bad.ev_count = 0;
+ stats->intzero.ev_count = 0;
+ stats->legint.ev_count = 0;
+ stats->crcerrs.ev_count = 0;
+ stats->illerrc.ev_count = 0;
+ stats->errbc.ev_count = 0;
+ stats->mspdc.ev_count = 0;
+ stats->mpctotal.ev_count = 0;
+ stats->mlfc.ev_count = 0;
+ stats->mrfc.ev_count = 0;
+ stats->rlec.ev_count = 0;
+ stats->lxontxc.ev_count = 0;
+ stats->lxonrxc.ev_count = 0;
+ stats->lxofftxc.ev_count = 0;
+ stats->lxoffrxc.ev_count = 0;
+
+ /* Packet Reception Stats */
+ stats->tor.ev_count = 0;
+ stats->gorc.ev_count = 0;
+ stats->tpr.ev_count = 0;
+ stats->gprc.ev_count = 0;
+ stats->mprc.ev_count = 0;
+ stats->bprc.ev_count = 0;
+ stats->prc64.ev_count = 0;
+ stats->prc127.ev_count = 0;
+ stats->prc255.ev_count = 0;
+ stats->prc511.ev_count = 0;
+ stats->prc1023.ev_count = 0;
+ stats->prc1522.ev_count = 0;
+ stats->ruc.ev_count = 0;
+ stats->rfc.ev_count = 0;
+ stats->roc.ev_count = 0;
+ stats->rjc.ev_count = 0;
+ stats->mngprc.ev_count = 0;
+ stats->mngpdc.ev_count = 0;
+ stats->xec.ev_count = 0;
+
+ /* Packet Transmission Stats */
+ stats->gotc.ev_count = 0;
+ stats->tpt.ev_count = 0;
+ stats->gptc.ev_count = 0;
+ stats->bptc.ev_count = 0;
+ stats->mptc.ev_count = 0;
+ stats->mngptc.ev_count = 0;
+ stats->ptc64.ev_count = 0;
+ stats->ptc127.ev_count = 0;
+ stats->ptc255.ev_count = 0;
+ stats->ptc511.ev_count = 0;
+ stats->ptc1023.ev_count = 0;
+ stats->ptc1522.ev_count = 0;
+}
+
+static void
ixgbe_set_sysctl_value(struct adapter *adapter, const char *name,
const char *description, int *limit, int value)
{
Home |
Main Index |
Thread Index |
Old Index