Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci Adopt <net/if_stats.h>.
details: https://anonhg.NetBSD.org/src/rev/822b3b87b5b3
branches: trunk
changeset: 744405:822b3b87b5b3
user: thorpej <thorpej%NetBSD.org@localhost>
date: Fri Jan 31 22:41:07 2020 +0000
description:
Adopt <net/if_stats.h>.
diffstat:
sys/dev/pci/if_aq.c | 91 +++++++++++-----------------------------------------
1 files changed, 19 insertions(+), 72 deletions(-)
diffs (195 lines):
diff -r 9b74ff979303 -r 822b3b87b5b3 sys/dev/pci/if_aq.c
--- a/sys/dev/pci/if_aq.c Fri Jan 31 21:13:40 2020 +0000
+++ b/sys/dev/pci/if_aq.c Fri Jan 31 22:41:07 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_aq.c,v 1.5 2020/01/25 07:57:48 msaitoh Exp $ */
+/* $NetBSD: if_aq.c,v 1.6 2020/01/31 22:41:07 thorpej Exp $ */
/**
* aQuantia Corporation Network Driver
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_aq.c,v 1.5 2020/01/25 07:57:48 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_aq.c,v 1.6 2020/01/31 22:41:07 thorpej Exp $");
#ifdef _KERNEL_OPT
#include "opt_if_aq.h"
@@ -867,12 +867,6 @@
unsigned int txr_prodidx;
unsigned int txr_considx;
int txr_nfree;
-
- /* counters */
- uint64_t txr_opackets;
- uint64_t txr_obytes;
- uint64_t txr_omcasts;
- uint64_t txr_oerrors;
};
struct aq_rxring {
@@ -890,12 +884,6 @@
bus_dmamap_t dmamap;
} rxr_mbufs[AQ_RXD_NUM];
unsigned int rxr_readidx;
-
- /* counters */
- uint64_t rxr_ipackets;
- uint64_t rxr_ibytes;
- uint64_t rxr_ierrors;
- uint64_t rxr_iqdrops;
};
struct aq_queue {
@@ -4173,6 +4161,8 @@
goto tx_intr_done;
}
+ net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
+
for (idx = txring->txr_considx; idx != hw_head;
idx = TXRING_NEXTIDX(idx), n++) {
@@ -4180,10 +4170,10 @@
bus_dmamap_unload(sc->sc_dmat,
txring->txr_mbufs[idx].dmamap);
- txring->txr_opackets++;
- txring->txr_obytes += m->m_pkthdr.len;
+ if_statinc_ref(nsr, if_opackets);
+ if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
if (m->m_flags & M_MCAST)
- txring->txr_omcasts++;
+ if_statinc_ref(nsr, if_omcasts);
m_freem(m);
txring->txr_mbufs[idx].m = NULL;
@@ -4193,6 +4183,8 @@
}
txring->txr_considx = idx;
+ IF_STAT_PUTREF(ifp);
+
if (ringidx == 0 && txring->txr_nfree >= AQ_TXD_MIN)
ifp->if_flags &= ~IFF_OACTIVE;
@@ -4231,6 +4223,8 @@
goto rx_intr_done;
}
+ net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
+
m0 = mprev = NULL;
for (idx = rxring->rxr_readidx;
idx != AQ_READ_REG_BIT(sc, RX_DMA_DESC_HEAD_PTR_REG(ringidx),
@@ -4254,7 +4248,7 @@
if ((rxd_status & RXDESC_STATUS_MACERR) ||
(rxd_type & RXDESC_TYPE_MAC_DMA_ERR)) {
- rxring->rxr_ierrors++;
+ if_statinc_ref(nsr, if_ierrors);
goto rx_next;
}
@@ -4269,7 +4263,7 @@
* cannot allocate new mbuf.
* discard this packet, and reuse mbuf for next.
*/
- rxring->rxr_iqdrops++;
+ if_statinc_ref(nsr, if_iqdrops);
goto rx_next;
}
rxring->rxr_mbufs[idx].m = NULL;
@@ -4371,8 +4365,8 @@
}
#endif
m_set_rcvif(m0, ifp);
- rxring->rxr_ipackets++;
- rxring->rxr_ibytes += m0->m_pkthdr.len;
+ if_statinc_ref(nsr, if_ipackets);
+ if_statadd_ref(nsr, if_ibytes, m0->m_pkthdr.len);
if_percpuq_enqueue(ifp->if_percpuq, m0);
m0 = mprev = NULL;
}
@@ -4383,6 +4377,8 @@
}
rxring->rxr_readidx = idx;
+ IF_STAT_PUTREF(ifp);
+
rx_intr_done:
mutex_exit(&rxring->rxr_mutex);
@@ -4511,7 +4507,7 @@
if (error != 0) {
/* too many mbuf chains? or not enough descriptors? */
m_freem(m);
- txring->txr_oerrors++;
+ if_statinc(ifp, if_oerrors);
if (txring->txr_index == 0 && error == ENOBUFS)
ifp->if_flags |= IFF_OACTIVE;
break;
@@ -4668,61 +4664,12 @@
{
struct aq_softc *sc __unused;
struct ifreq *ifr __unused;
- uint64_t opackets, oerrors, obytes, omcasts;
- uint64_t ipackets, ierrors, ibytes, iqdrops;
- int error, i, s;
+ int error, s;
sc = (struct aq_softc *)ifp->if_softc;
ifr = (struct ifreq *)data;
error = 0;
- switch (cmd) {
- case SIOCGIFDATA:
- case SIOCZIFDATA:
- opackets = oerrors = obytes = omcasts = 0;
- ipackets = ierrors = ibytes = iqdrops = 0;
- for (i = 0; i < sc->sc_nqueues; i++) {
- struct aq_txring *txring = &sc->sc_queue[i].txring;
- mutex_enter(&txring->txr_mutex);
- if (cmd == SIOCZIFDATA) {
- txring->txr_opackets = 0;
- txring->txr_obytes = 0;
- txring->txr_omcasts = 0;
- txring->txr_oerrors = 0;
- } else {
- opackets += txring->txr_opackets;
- oerrors += txring->txr_oerrors;
- obytes += txring->txr_obytes;
- omcasts += txring->txr_omcasts;
- }
- mutex_exit(&txring->txr_mutex);
-
- struct aq_rxring *rxring = &sc->sc_queue[i].rxring;
- mutex_enter(&rxring->rxr_mutex);
- if (cmd == SIOCZIFDATA) {
- rxring->rxr_ipackets = 0;
- rxring->rxr_ibytes = 0;
- rxring->rxr_ierrors = 0;
- rxring->rxr_iqdrops = 0;
- } else {
- ipackets += rxring->rxr_ipackets;
- ierrors += rxring->rxr_ierrors;
- ibytes += rxring->rxr_ibytes;
- iqdrops += rxring->rxr_iqdrops;
- }
- mutex_exit(&rxring->rxr_mutex);
- }
- ifp->if_opackets = opackets;
- ifp->if_oerrors = oerrors;
- ifp->if_obytes = obytes;
- ifp->if_omcasts = omcasts;
- ifp->if_ipackets = ipackets;
- ifp->if_ierrors = ierrors;
- ifp->if_ibytes = ibytes;
- ifp->if_iqdrops = iqdrops;
- break;
- }
-
s = splnet();
error = ether_ioctl(ifp, cmd, data);
splx(s);
Home |
Main Index |
Thread Index |
Old Index