Module Name:    src
Committed By:   thorpej
Date:           Sun Feb  2 05:27:21 UTC 2020

Modified Files:
        src/sys/arch/x86/pci: if_vmx.c

Log Message:
- Adopt <net/if_stats.h>.
- Use ifmedia_fini().


To generate a diff of this commit:
cvs rdiff -u -r1.56 -r1.57 src/sys/arch/x86/pci/if_vmx.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/arch/x86/pci/if_vmx.c
diff -u src/sys/arch/x86/pci/if_vmx.c:1.56 src/sys/arch/x86/pci/if_vmx.c:1.57
--- src/sys/arch/x86/pci/if_vmx.c:1.56	Wed Jan 29 08:43:30 2020
+++ src/sys/arch/x86/pci/if_vmx.c	Sun Feb  2 05:27:21 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vmx.c,v 1.56 2020/01/29 08:43:30 knakahara Exp $	*/
+/*	$NetBSD: if_vmx.c,v 1.57 2020/02/02 05:27:21 thorpej Exp $	*/
 /*	$OpenBSD: if_vmx.c,v 1.16 2014/01/22 06:04:17 brad Exp $	*/
 
 /*
@@ -19,7 +19,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.56 2020/01/29 08:43:30 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.57 2020/02/02 05:27:21 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/cpu.h>
@@ -179,9 +179,11 @@ struct vmxnet3_comp_ring {
 };
 
 struct vmxnet3_txq_stats {
+#if 0
 	uint64_t vmtxs_opackets;	/* if_opackets */
 	uint64_t vmtxs_obytes;		/* if_obytes */
 	uint64_t vmtxs_omcasts;		/* if_omcasts */
+#endif
 	uint64_t vmtxs_csum;
 	uint64_t vmtxs_tso;
 	uint64_t vmtxs_full;
@@ -211,12 +213,14 @@ struct vmxnet3_txqueue {
 	struct evcnt vxtxq_defrag_failed;
 };
 
+#if 0
 struct vmxnet3_rxq_stats {
 	uint64_t vmrxs_ipackets;	/* if_ipackets */
 	uint64_t vmrxs_ibytes;		/* if_ibytes */
 	uint64_t vmrxs_iqdrops;		/* if_iqdrops */
 	uint64_t vmrxs_ierrors;		/* if_ierrors */
 };
+#endif
 
 struct vmxnet3_rxqueue {
 	kmutex_t *vxrxq_mtx;
@@ -225,7 +229,9 @@ struct vmxnet3_rxqueue {
 	struct mbuf *vxrxq_mtail;
 	struct vmxnet3_rxring vxrxq_cmd_ring[VMXNET3_RXRINGS_PERQ];
 	struct vmxnet3_comp_ring vxrxq_comp_ring;
+#if 0
 	struct vmxnet3_rxq_stats vxrxq_stats;
+#endif
 	struct vmxnet3_rxq_shared *vxrxq_rs;
 	char vxrxq_name[16];
 
@@ -670,10 +676,9 @@ vmxnet3_detach(device_t self, int flags)
 		callout_destroy(&sc->vmx_tick);
 		VMXNET3_CORE_UNLOCK(sc);
 
-		ifmedia_delete_instance(&sc->vmx_media, IFM_INST_ANY);
-
 		ether_ifdetach(ifp);
 		if_detach(ifp);
+		ifmedia_fini(&sc->vmx_media);
 	}
 
 	vmxnet3_teardown_stats(sc);
@@ -2109,6 +2114,7 @@ vmxnet3_txq_eof(struct vmxnet3_txqueue *
 	struct vmxnet3_comp_ring *txc;
 	struct vmxnet3_txcompdesc *txcd;
 	struct vmxnet3_txbuf *txb;
+	struct ifnet *ifp;
 	struct mbuf *m;
 	u_int sop;
 	bool more = false;
@@ -2116,9 +2122,11 @@ vmxnet3_txq_eof(struct vmxnet3_txqueue *
 	sc = txq->vxtxq_sc;
 	txr = &txq->vxtxq_cmd_ring;
 	txc = &txq->vxtxq_comp_ring;
+	ifp = &sc->vmx_ethercom.ec_if;
 
 	VMXNET3_TXQ_LOCK_ASSERT(txq);
 
+	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 	for (;;) {
 		if (limit-- == 0) {
 			more = true;
@@ -2144,10 +2152,10 @@ vmxnet3_txq_eof(struct vmxnet3_txqueue *
 			    BUS_DMASYNC_POSTWRITE);
 			bus_dmamap_unload(sc->vmx_dmat, txb->vtxb_dmamap);
 
-			txq->vxtxq_stats.vmtxs_opackets++;
-			txq->vxtxq_stats.vmtxs_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)
-				txq->vxtxq_stats.vmtxs_omcasts++;
+				if_statinc_ref(nsr, if_omcasts);
 
 			m_freem(m);
 			txb->vtxb_m = NULL;
@@ -2155,6 +2163,7 @@ vmxnet3_txq_eof(struct vmxnet3_txqueue *
 
 		txr->vxtxr_next = (txcd->eop_idx + 1) % txr->vxtxr_ndesc;
 	}
+	IF_STAT_PUTREF(ifp);
 
 	if (txr->vxtxr_head == txr->vxtxr_next)
 		txq->vxtxq_watchdog = 0;
@@ -2310,7 +2319,7 @@ vmxnet3_rxq_input(struct vmxnet3_rxqueue
 	ifp = &sc->vmx_ethercom.ec_if;
 
 	if (rxcd->error) {
-		rxq->vxrxq_stats.vmrxs_ierrors++;
+		if_statinc(ifp, if_ierrors);
 		m_freem(m);
 		return;
 	}
@@ -2320,8 +2329,10 @@ vmxnet3_rxq_input(struct vmxnet3_rxqueue
 	if (rxcd->vlan)
 		vlan_set_tag(m, rxcd->vtag);
 
-	rxq->vxrxq_stats.vmrxs_ipackets++;
-	rxq->vxrxq_stats.vmrxs_ibytes += m->m_pkthdr.len;
+	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
+	if_statinc_ref(nsr, if_ipackets);
+	if_statadd_ref(nsr, if_ibytes, m->m_pkthdr.len);
+	IF_STAT_PUTREF(ifp);
 
 	if_percpuq_enqueue(ifp->if_percpuq, m);
 }
@@ -2412,7 +2423,7 @@ vmxnet3_rxq_eof(struct vmxnet3_rxqueue *
 			}
 
 			if (vmxnet3_newbuf(sc, rxq, rxr) != 0) {
-				rxq->vxrxq_stats.vmrxs_iqdrops++;
+				if_statinc(ifp, if_iqdrops);
 				vmxnet3_rxq_eof_discard(rxq, rxr, idx);
 				if (!rxcd->eop)
 					vmxnet3_rxq_discard_chain(rxq);
@@ -2431,7 +2442,7 @@ vmxnet3_rxq_eof(struct vmxnet3_rxqueue *
 			KASSERT(m_head != NULL);
 
 			if (vmxnet3_newbuf(sc, rxq, rxr) != 0) {
-				rxq->vxrxq_stats.vmrxs_iqdrops++;
+				if_statinc(ifp, if_iqdrops);
 				vmxnet3_rxq_eof_discard(rxq, rxr, idx);
 				if (!rxcd->eop)
 					vmxnet3_rxq_discard_chain(rxq);
@@ -3385,45 +3396,7 @@ vmxnet3_ioctl(struct ifnet *ifp, u_long 
 		}
 		break;
 	}
-	case SIOCGIFDATA:
-	case SIOCZIFDATA:
-		ifp->if_ipackets = 0;
-		ifp->if_ibytes = 0;
-		ifp->if_iqdrops = 0;
-		ifp->if_ierrors = 0;
-		for (int i = 0; i < sc->vmx_nrxqueues; i++) {
-			struct vmxnet3_rxqueue *rxq;
-			rxq = &sc->vmx_queue[i].vxq_rxqueue;
-
-			VMXNET3_RXQ_LOCK(rxq);
-			ifp->if_ipackets += rxq->vxrxq_stats.vmrxs_ipackets;
-			ifp->if_ibytes += rxq->vxrxq_stats.vmrxs_ibytes;
-			ifp->if_iqdrops += rxq->vxrxq_stats.vmrxs_iqdrops;
-			ifp->if_ierrors += rxq->vxrxq_stats.vmrxs_ierrors;
-			if (cmd == SIOCZIFDATA) {
-				memset(&rxq->vxrxq_stats, 0,
-				    sizeof(rxq->vxrxq_stats));
-			}
-			VMXNET3_RXQ_UNLOCK(rxq);
-		}
-		ifp->if_opackets = 0;
-		ifp->if_obytes = 0;
-		ifp->if_omcasts = 0;
-		for (int i = 0; i < sc->vmx_ntxqueues; i++) {
-			struct vmxnet3_txqueue *txq;
-			txq = &sc->vmx_queue[i].vxq_txqueue;
-
-			VMXNET3_TXQ_LOCK(txq);
-			ifp->if_opackets += txq->vxtxq_stats.vmtxs_opackets;
-			ifp->if_obytes += txq->vxtxq_stats.vmtxs_obytes;
-			ifp->if_omcasts += txq->vxtxq_stats.vmtxs_omcasts;
-			if (cmd == SIOCZIFDATA) {
-				memset(&txq->vxtxq_stats, 0,
-				    sizeof(txq->vxtxq_stats));
-			}
-			VMXNET3_TXQ_UNLOCK(txq);
-		}
-		/* FALLTHROUGH */
+
 	default:
 		s = splnet();
 		error = ether_ioctl(ifp, cmd, data);

Reply via email to