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