Module Name:    src
Committed By:   riastradh
Date:           Sat Jun 29 12:11:13 UTC 2024

Modified Files:
        src/sys/arch/arm/gemini: if_gpn.c
        src/sys/arch/arm/xscale: ixp425_if_npe.c
        src/sys/arch/mac68k/dev: if_mc.c
        src/sys/arch/macppc/dev: am79c950.c
        src/sys/arch/mips/alchemy/dev: if_aumac.c
        src/sys/arch/mips/atheros/dev: if_ae.c
        src/sys/arch/mips/cavium/dev: octeon_gmx.c
        src/sys/arch/powerpc/booke/dev: pq3etsec.c
        src/sys/arch/sgimips/hpc: if_sq.c
        src/sys/dev/cadence: if_cemac.c
        src/sys/dev/ic: aic6915.c cs89x0.c dp8390.c dp83932.c elinkxl.c gem.c
            hd64570.c hme.c i82557.c mb86960.c rtl8169.c rtl81x9.c smc83c170.c
            tulip.c
        src/sys/dev/pci: if_age.c if_alc.c if_ale.c if_aq.c if_bge.c if_bnx.c
            if_cas.c if_ena.c if_iavf.c if_ixl.c if_rge.c if_sip.c if_ste.c
            if_stge.c if_tl.c if_txp.c if_vge.c if_vioif.c if_vmx.c if_vr.c
            if_vte.c if_wm.c
        src/sys/dev/pci/igc: if_igc.c
        src/sys/dev/pci/ixgbe: ix_txrx.c ixgbe.c
        src/sys/dev/sbus: qe.c
        src/sys/dev/usb: if_cue.c
        src/sys/net: if.c if_bridge.c if_stats.h if_vlan.c
        src/sys/net/agr: if_agr.c
        src/sys/net/lagg: if_lagg.c

Log Message:
if_stats(9): Add ifp argument to if_stat..._ref.

This will enable us to pass the ifp through to a dtrace probe inside.

No functional change intended in this change, but this is an API
change visible to modules so it shouldn't be pulled up.

PR kern/58377


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/arm/gemini/if_gpn.c
cvs rdiff -u -r1.53 -r1.54 src/sys/arch/arm/xscale/ixp425_if_npe.c
cvs rdiff -u -r1.58 -r1.59 src/sys/arch/mac68k/dev/if_mc.c
cvs rdiff -u -r1.51 -r1.52 src/sys/arch/macppc/dev/am79c950.c
cvs rdiff -u -r1.52 -r1.53 src/sys/arch/mips/alchemy/dev/if_aumac.c
cvs rdiff -u -r1.43 -r1.44 src/sys/arch/mips/atheros/dev/if_ae.c
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/mips/cavium/dev/octeon_gmx.c
cvs rdiff -u -r1.59 -r1.60 src/sys/arch/powerpc/booke/dev/pq3etsec.c
cvs rdiff -u -r1.58 -r1.59 src/sys/arch/sgimips/hpc/if_sq.c
cvs rdiff -u -r1.26 -r1.27 src/sys/dev/cadence/if_cemac.c
cvs rdiff -u -r1.46 -r1.47 src/sys/dev/ic/aic6915.c
cvs rdiff -u -r1.54 -r1.55 src/sys/dev/ic/cs89x0.c
cvs rdiff -u -r1.100 -r1.101 src/sys/dev/ic/dp8390.c
cvs rdiff -u -r1.49 -r1.50 src/sys/dev/ic/dp83932.c
cvs rdiff -u -r1.139 -r1.140 src/sys/dev/ic/elinkxl.c
cvs rdiff -u -r1.136 -r1.137 src/sys/dev/ic/gem.c
cvs rdiff -u -r1.58 -r1.59 src/sys/dev/ic/hd64570.c
cvs rdiff -u -r1.109 -r1.110 src/sys/dev/ic/hme.c
cvs rdiff -u -r1.161 -r1.162 src/sys/dev/ic/i82557.c
cvs rdiff -u -r1.97 -r1.98 src/sys/dev/ic/mb86960.c \
    src/sys/dev/ic/smc83c170.c
cvs rdiff -u -r1.175 -r1.176 src/sys/dev/ic/rtl8169.c
cvs rdiff -u -r1.114 -r1.115 src/sys/dev/ic/rtl81x9.c
cvs rdiff -u -r1.211 -r1.212 src/sys/dev/ic/tulip.c
cvs rdiff -u -r1.73 -r1.74 src/sys/dev/pci/if_age.c
cvs rdiff -u -r1.53 -r1.54 src/sys/dev/pci/if_alc.c
cvs rdiff -u -r1.43 -r1.44 src/sys/dev/pci/if_ale.c
cvs rdiff -u -r1.47 -r1.48 src/sys/dev/pci/if_aq.c src/sys/dev/pci/if_cas.c
cvs rdiff -u -r1.391 -r1.392 src/sys/dev/pci/if_bge.c
cvs rdiff -u -r1.114 -r1.115 src/sys/dev/pci/if_bnx.c
cvs rdiff -u -r1.41 -r1.42 src/sys/dev/pci/if_ena.c
cvs rdiff -u -r1.17 -r1.18 src/sys/dev/pci/if_iavf.c
cvs rdiff -u -r1.98 -r1.99 src/sys/dev/pci/if_ixl.c
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/pci/if_rge.c
cvs rdiff -u -r1.191 -r1.192 src/sys/dev/pci/if_sip.c
cvs rdiff -u -r1.65 -r1.66 src/sys/dev/pci/if_ste.c
cvs rdiff -u -r1.91 -r1.92 src/sys/dev/pci/if_stge.c
cvs rdiff -u -r1.125 -r1.126 src/sys/dev/pci/if_tl.c
cvs rdiff -u -r1.75 -r1.76 src/sys/dev/pci/if_txp.c
cvs rdiff -u -r1.87 -r1.88 src/sys/dev/pci/if_vge.c
cvs rdiff -u -r1.111 -r1.112 src/sys/dev/pci/if_vioif.c
cvs rdiff -u -r1.15 -r1.16 src/sys/dev/pci/if_vmx.c
cvs rdiff -u -r1.137 -r1.138 src/sys/dev/pci/if_vr.c
cvs rdiff -u -r1.35 -r1.36 src/sys/dev/pci/if_vte.c
cvs rdiff -u -r1.798 -r1.799 src/sys/dev/pci/if_wm.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/pci/igc/if_igc.c
cvs rdiff -u -r1.116 -r1.117 src/sys/dev/pci/ixgbe/ix_txrx.c
cvs rdiff -u -r1.351 -r1.352 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.79 -r1.80 src/sys/dev/sbus/qe.c
cvs rdiff -u -r1.108 -r1.109 src/sys/dev/usb/if_cue.c
cvs rdiff -u -r1.529 -r1.530 src/sys/net/if.c
cvs rdiff -u -r1.189 -r1.190 src/sys/net/if_bridge.c
cvs rdiff -u -r1.4 -r1.5 src/sys/net/if_stats.h
cvs rdiff -u -r1.171 -r1.172 src/sys/net/if_vlan.c
cvs rdiff -u -r1.56 -r1.57 src/sys/net/agr/if_agr.c
cvs rdiff -u -r1.70 -r1.71 src/sys/net/lagg/if_lagg.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/arm/gemini/if_gpn.c
diff -u src/sys/arch/arm/gemini/if_gpn.c:1.17 src/sys/arch/arm/gemini/if_gpn.c:1.18
--- src/sys/arch/arm/gemini/if_gpn.c:1.17	Fri May 26 21:40:46 2023
+++ src/sys/arch/arm/gemini/if_gpn.c	Sat Jun 29 12:11:10 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: if_gpn.c,v 1.17 2023/05/26 21:40:46 andvar Exp $ */
+/* $NetBSD: if_gpn.c,v 1.18 2024/06/29 12:11:10 riastradh Exp $ */
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -32,7 +32,7 @@
 
 #include "opt_gemini.h"
 
-__KERNEL_RCSID(0, "$NetBSD: if_gpn.c,v 1.17 2023/05/26 21:40:46 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_gpn.c,v 1.18 2024/06/29 12:11:10 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -444,7 +444,7 @@ gpn_ifstart(struct ifnet *ifp)
 			    mtod(m, void *), m->m_len, NULL,
 			    BUS_DMA_READ | BUS_DMA_NOWAIT);
 			if (error) {
-				if_statinc_ref(nsr, if_oerrors);
+				if_statinc_ref(ifp, nsr, if_oerrors);
 				m_freem(m);
 				break;
 			}
@@ -467,9 +467,9 @@ gpn_ifstart(struct ifnet *ifp)
 			gd.gd_txid = id;
 			ti->ti_mbuf = m;
 			last_gd = &gd;
-			if_statadd_ref(nsr, if_obytes, m->m_len);
+			if_statadd_ref(ifp, nsr, if_obytes, m->m_len);
 		}
-		if_statinc_ref(nsr, if_opackets);
+		if_statinc_ref(ifp, nsr, if_opackets);
 		IF_STAT_PUTREF(ifp);
 
 		if (last_gd != NULL) {

Index: src/sys/arch/arm/xscale/ixp425_if_npe.c
diff -u src/sys/arch/arm/xscale/ixp425_if_npe.c:1.53 src/sys/arch/arm/xscale/ixp425_if_npe.c:1.54
--- src/sys/arch/arm/xscale/ixp425_if_npe.c:1.53	Tue Sep 27 06:13:42 2022
+++ src/sys/arch/arm/xscale/ixp425_if_npe.c	Sat Jun 29 12:11:10 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ixp425_if_npe.c,v 1.53 2022/09/27 06:13:42 skrll Exp $ */
+/*	$NetBSD: ixp425_if_npe.c,v 1.54 2024/06/29 12:11:10 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2006 Sam Leffler.  All rights reserved.
@@ -28,7 +28,7 @@
 #if 0
 __FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/if_npe.c,v 1.1 2006/11/19 23:55:23 sam Exp $");
 #endif
-__KERNEL_RCSID(0, "$NetBSD: ixp425_if_npe.c,v 1.53 2022/09/27 06:13:42 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixp425_if_npe.c,v 1.54 2024/06/29 12:11:10 riastradh Exp $");
 
 /*
  * Intel XScale NPE Ethernet driver.
@@ -688,18 +688,18 @@ npe_addstats(struct npe_softc *sc)
 	struct npestats *ns = sc->sc_stats;
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 		  be32toh(ns->dot3StatsInternalMacTransmitErrors)
 		+ be32toh(ns->dot3StatsCarrierSenseErrors)
 		+ be32toh(ns->TxVLANIdFilterDiscards)
 		);
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 		  be32toh(ns->dot3StatsFCSErrors)
 		+ be32toh(ns->dot3StatsInternalMacReceiveErrors)
 		+ be32toh(ns->RxOverrunDiscards)
 		+ be32toh(ns->RxUnderflowEntryDiscards)
 		);
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 		  be32toh(ns->dot3StatsSingleCollisionFrames)
 		+ be32toh(ns->dot3StatsMultipleCollisionFrames)
 		);

Index: src/sys/arch/mac68k/dev/if_mc.c
diff -u src/sys/arch/mac68k/dev/if_mc.c:1.58 src/sys/arch/mac68k/dev/if_mc.c:1.59
--- src/sys/arch/mac68k/dev/if_mc.c:1.58	Sun Sep 18 02:41:24 2022
+++ src/sys/arch/mac68k/dev/if_mc.c	Sat Jun 29 12:11:10 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_mc.c,v 1.58 2022/09/18 02:41:24 thorpej Exp $	*/
+/*	$NetBSD: if_mc.c,v 1.59 2024/06/29 12:11:10 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1997 David Huang <k...@azeotrope.org>
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_mc.c,v 1.58 2022/09/18 02:41:24 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_mc.c,v 1.59 2024/06/29 12:11:10 riastradh Exp $");
 
 #include "opt_ddb.h"
 #include "opt_inet.h"
@@ -492,25 +492,25 @@ mc_tint(struct mc_softc *sc)
 
 	if (xmtfs & LCOL) {
 		printf("%s: late collision\n", device_xname(sc->sc_dev));
-		if_statinc_ref(nsr, if_oerrors);
-		if_statinc_ref(nsr, if_collisions);
+		if_statinc_ref(&sc->sc_if, nsr, if_oerrors);
+		if_statinc_ref(&sc->sc_if, nsr, if_collisions);
 	}
 
 	if (xmtfs & MORE)
 		/* Real number is unknown. */
-		if_statadd_ref(nsr, if_collisions, 2);
+		if_statadd_ref(&sc->sc_if, nsr, if_collisions, 2);
 	else if (xmtfs & ONE)
-		if_statinc_ref(nsr, if_collisions);
+		if_statinc_ref(&sc->sc_if, nsr, if_collisions);
 	else if (xmtfs & RTRY) {
 		printf("%s: excessive collisions\n", device_xname(sc->sc_dev));
-		if_statadd_ref(nsr, if_collisions, 16);
-		if_statinc_ref(nsr, if_oerrors);
+		if_statadd_ref(&sc->sc_if, nsr, if_collisions, 16);
+		if_statinc_ref(&sc->sc_if, nsr, if_oerrors);
 	}
 
 	if (xmtfs & LCAR) {
 		sc->sc_havecarrier = 0;
 		printf("%s: lost carrier\n", device_xname(sc->sc_dev));
-		if_statinc_ref(nsr, if_oerrors);
+		if_statinc_ref(&sc->sc_if, nsr, if_oerrors);
 	}
 
 	IF_STAT_PUTREF(&sc->sc_if);

Index: src/sys/arch/macppc/dev/am79c950.c
diff -u src/sys/arch/macppc/dev/am79c950.c:1.51 src/sys/arch/macppc/dev/am79c950.c:1.52
--- src/sys/arch/macppc/dev/am79c950.c:1.51	Sun Sep 18 10:54:52 2022
+++ src/sys/arch/macppc/dev/am79c950.c	Sat Jun 29 12:11:10 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: am79c950.c,v 1.51 2022/09/18 10:54:52 thorpej Exp $	*/
+/*	$NetBSD: am79c950.c,v 1.52 2024/06/29 12:11:10 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1997 David Huang <k...@bga.com>
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: am79c950.c,v 1.51 2022/09/18 10:54:52 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: am79c950.c,v 1.52 2024/06/29 12:11:10 riastradh Exp $");
 
 #include "opt_inet.h"
 
@@ -491,24 +491,24 @@ mc_tint(struct mc_softc *sc)
 	net_stat_ref_t nsr = IF_STAT_GETREF(&sc->sc_if);
 	if (xmtfs & LCOL) {
 		printf("%s: late collision\n", device_xname(sc->sc_dev));
-		if_statinc_ref(nsr, if_oerrors);
-		if_statinc_ref(nsr, if_collisions);
+		if_statinc_ref(&sc->sc_if, nsr, if_oerrors);
+		if_statinc_ref(&sc->sc_if, nsr, if_collisions);
 	}
 
 	if (xmtfs & MORE)
 		/* Real number is unknown. */
-		if_statadd_ref(nsr, if_collisions, 2);
+		if_statadd_ref(&sc->sc_if, nsr, if_collisions, 2);
 	else if (xmtfs & ONE)
-		if_statinc_ref(nsr, if_collisions);
+		if_statinc_ref(&sc->sc_if, nsr, if_collisions);
 	else if (xmtfs & RTRY) {
-		if_statadd_ref(nsr, if_collisions, 16);
-		if_statinc_ref(nsr, if_oerrors);
+		if_statadd_ref(&sc->sc_if, nsr, if_collisions, 16);
+		if_statinc_ref(&sc->sc_if, nsr, if_oerrors);
 	}
 
 	if (xmtfs & LCAR) {
 		sc->sc_havecarrier = 0;
 		printf("%s: lost carrier\n", device_xname(sc->sc_dev));
-		if_statinc_ref(nsr, if_oerrors);
+		if_statinc_ref(&sc->sc_if, nsr, if_oerrors);
 	}
 	IF_STAT_PUTREF(&sc->sc_if);
 

Index: src/sys/arch/mips/alchemy/dev/if_aumac.c
diff -u src/sys/arch/mips/alchemy/dev/if_aumac.c:1.52 src/sys/arch/mips/alchemy/dev/if_aumac.c:1.53
--- src/sys/arch/mips/alchemy/dev/if_aumac.c:1.52	Thu Sep 29 07:00:46 2022
+++ src/sys/arch/mips/alchemy/dev/if_aumac.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: if_aumac.c,v 1.52 2022/09/29 07:00:46 skrll Exp $ */
+/* $NetBSD: if_aumac.c,v 1.53 2024/06/29 12:11:11 riastradh Exp $ */
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -46,7 +46,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_aumac.c,v 1.52 2022/09/29 07:00:46 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_aumac.c,v 1.53 2024/06/29 12:11:11 riastradh Exp $");
 
 
 
@@ -566,14 +566,17 @@ aumac_txintr(struct aumac_softc *sc)
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 		if (stat & TX_STAT_FA) {
 			/* XXX STATS */
-			if_statinc_ref(nsr, if_oerrors);
-		} else
-			if_statinc_ref(nsr, if_opackets);
-
-		if (stat & TX_STAT_EC)
-			if_statadd_ref(nsr, if_collisions, 16);
-		else if (TX_STAT_CC(stat))
-			if_statadd_ref(nsr, if_collisions, TX_STAT_CC(stat));
+			if_statinc_ref(ifp, nsr, if_oerrors);
+		} else {
+			if_statinc_ref(ifp, nsr, if_opackets);
+		}
+
+		if (stat & TX_STAT_EC) {
+			if_statadd_ref(ifp, nsr, if_collisions, 16);
+		} else if (TX_STAT_CC(stat)) {
+			if_statadd_ref(ifp, nsr, if_collisions,
+			    TX_STAT_CC(stat));
+		}
 		IF_STAT_PUTREF(ifp);
 
 		sc->sc_txfree++;

Index: src/sys/arch/mips/atheros/dev/if_ae.c
diff -u src/sys/arch/mips/atheros/dev/if_ae.c:1.43 src/sys/arch/mips/atheros/dev/if_ae.c:1.44
--- src/sys/arch/mips/atheros/dev/if_ae.c:1.43	Sat Feb 10 09:30:05 2024
+++ src/sys/arch/mips/atheros/dev/if_ae.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ae.c,v 1.43 2024/02/10 09:30:05 andvar Exp $ */
+/* $NetBSD: if_ae.c,v 1.44 2024/06/29 12:11:11 riastradh Exp $ */
 /*-
  * Copyright (c) 2006 Urbana-Champaign Independent Media Center.
  * Copyright (c) 2006 Garrett D'Amore.
@@ -98,7 +98,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ae.c,v 1.43 2024/02/10 09:30:05 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ae.c,v 1.44 2024/06/29 12:11:11 riastradh Exp $");
 
 
 #include <sys/param.h>
@@ -1209,17 +1209,17 @@ ae_txintr(struct ae_softc *sc)
 
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 		if (txstat & (ADSTAT_Tx_UF | ADSTAT_Tx_TO))
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(ifp, nsr, if_oerrors);
 
 		if (txstat & ADSTAT_Tx_EC)
-			if_statadd_ref(nsr, if_collisions, 16);
+			if_statadd_ref(ifp, nsr, if_collisions, 16);
 		else if (ADSTAT_Tx_COLLISIONS(txstat))
-			if_statadd_ref(nsr, if_collisions,
+			if_statadd_ref(ifp, nsr, if_collisions,
 			    ADSTAT_Tx_COLLISIONS(txstat));
 		if (txstat & ADSTAT_Tx_LC)
-			if_statinc_ref(nsr, if_collisions);
+			if_statinc_ref(ifp, nsr, if_collisions);
 
-		if_statinc_ref(nsr, if_opackets);
+		if_statinc_ref(ifp, nsr, if_opackets);
 		IF_STAT_PUTREF(ifp);
 	}
 

Index: src/sys/arch/mips/cavium/dev/octeon_gmx.c
diff -u src/sys/arch/mips/cavium/dev/octeon_gmx.c:1.23 src/sys/arch/mips/cavium/dev/octeon_gmx.c:1.24
--- src/sys/arch/mips/cavium/dev/octeon_gmx.c:1.23	Thu Jul 20 23:31:27 2023
+++ src/sys/arch/mips/cavium/dev/octeon_gmx.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: octeon_gmx.c,v 1.23 2023/07/20 23:31:27 gutteridge Exp $	*/
+/*	$NetBSD: octeon_gmx.c,v 1.24 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2007 Internet Initiative Japan, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: octeon_gmx.c,v 1.23 2023/07/20 23:31:27 gutteridge Exp $");
+__KERNEL_RCSID(0, "$NetBSD: octeon_gmx.c,v 1.24 2024/06/29 12:11:11 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1168,21 +1168,21 @@ octgmx_stats(struct octgmx_port_softc *s
          *  this is not add to input packet errors of interface.
          */
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-	if_statadd_ref(nsr, if_iqdrops,
+	if_statadd_ref(ifp, nsr, if_iqdrops,
 	    (uint32_t)_GMX_PORT_RD8(sc, GMX0_RX0_STATS_PKTS_DRP));
-	if_statadd_ref(nsr, if_opackets,
+	if_statadd_ref(ifp, nsr, if_opackets,
 	    (uint32_t)_GMX_PORT_RD8(sc, GMX0_TX0_STAT3));
 
 	tmp = _GMX_PORT_RD8(sc, GMX0_TX0_STAT0);
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 	    (uint32_t)tmp + ((uint32_t)(tmp >> 32) * 16));
-	if_statadd_ref(nsr, if_collisions, (uint32_t)tmp);
+	if_statadd_ref(ifp, nsr, if_collisions, (uint32_t)tmp);
 
 	tmp = _GMX_PORT_RD8(sc, GMX0_TX0_STAT1);
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    (uint32_t)tmp + (uint32_t)(tmp >> 32));
 
 	tmp = _GMX_PORT_RD8(sc, GMX0_TX0_STAT9);
-	if_statadd_ref(nsr, if_oerrors, (uint32_t)(tmp >> 32));
+	if_statadd_ref(ifp, nsr, if_oerrors, (uint32_t)(tmp >> 32));
 	IF_STAT_PUTREF(ifp);
 }

Index: src/sys/arch/powerpc/booke/dev/pq3etsec.c
diff -u src/sys/arch/powerpc/booke/dev/pq3etsec.c:1.59 src/sys/arch/powerpc/booke/dev/pq3etsec.c:1.60
--- src/sys/arch/powerpc/booke/dev/pq3etsec.c:1.59	Fri Feb  9 22:08:33 2024
+++ src/sys/arch/powerpc/booke/dev/pq3etsec.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: pq3etsec.c,v 1.59 2024/02/09 22:08:33 andvar Exp $	*/
+/*	$NetBSD: pq3etsec.c,v 1.60 2024/06/29 12:11:11 riastradh Exp $	*/
 /*-
  * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pq3etsec.c,v 1.59 2024/02/09 22:08:33 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pq3etsec.c,v 1.60 2024/06/29 12:11:11 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -2217,12 +2217,12 @@ pq3etsec_txq_consume(
 				m_adj(m, sizeof(struct txfcb));
 			bpf_mtap(ifp, m, BPF_D_OUT);
 			net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-			if_statinc_ref(nsr, if_opackets);
-			if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
+			if_statinc_ref(ifp, nsr, if_opackets);
+			if_statadd_ref(ifp, nsr, if_obytes, m->m_pkthdr.len);
 			if (m->m_flags & M_MCAST)
-				if_statinc_ref(nsr, if_omcasts);
+				if_statinc_ref(ifp, nsr, if_omcasts);
 			if (txbd_flags & TXBD_ERRORS)
-				if_statinc_ref(nsr, if_oerrors);
+				if_statinc_ref(ifp, nsr, if_oerrors);
 			IF_STAT_PUTREF(ifp);
 			m_freem(m);
 #ifdef ETSEC_DEBUG

Index: src/sys/arch/sgimips/hpc/if_sq.c
diff -u src/sys/arch/sgimips/hpc/if_sq.c:1.58 src/sys/arch/sgimips/hpc/if_sq.c:1.59
--- src/sys/arch/sgimips/hpc/if_sq.c:1.58	Sat Feb 10 09:30:06 2024
+++ src/sys/arch/sgimips/hpc/if_sq.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_sq.c,v 1.58 2024/02/10 09:30:06 andvar Exp $	*/
+/*	$NetBSD: if_sq.c,v 1.59 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2001 Rafal K. Boni
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_sq.c,v 1.58 2024/02/10 09:30:06 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_sq.c,v 1.59 2024/06/29 12:11:11 riastradh Exp $");
 
 
 #include <sys/param.h>
@@ -1070,19 +1070,19 @@ sq_txintr(struct sq_softc *sc)
 	tmp = (sc->hpc_regs->enetx_ctl_active >> shift) | TXSTAT_GOOD;
 	if ((status & tmp) == 0) {
 		if (status & TXSTAT_COLL)
-			if_statinc_ref(nsr, if_collisions);
+			if_statinc_ref(ifp, nsr, if_collisions);
 
 		if (status & TXSTAT_UFLOW) {
 			printf("%s: transmit underflow\n",
 			    device_xname(sc->sc_dev));
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(ifp, nsr, if_oerrors);
 		}
 
 		if (status & TXSTAT_16COLL) {
 			printf("%s: max collisions reached\n",
 			    device_xname(sc->sc_dev));
-			if_statinc_ref(nsr, if_oerrors);
-			if_statadd_ref(nsr, if_collisions, 16);
+			if_statinc_ref(ifp, nsr, if_oerrors);
+			if_statadd_ref(ifp, nsr, if_collisions, 16);
 		}
 	}
 	IF_STAT_PUTREF(ifp);

Index: src/sys/dev/cadence/if_cemac.c
diff -u src/sys/dev/cadence/if_cemac.c:1.26 src/sys/dev/cadence/if_cemac.c:1.27
--- src/sys/dev/cadence/if_cemac.c:1.26	Sat Nov 12 16:54:36 2022
+++ src/sys/dev/cadence/if_cemac.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_cemac.c,v 1.26 2022/11/12 16:54:36 jmcneill Exp $	*/
+/*	$NetBSD: if_cemac.c,v 1.27 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2015  Genetec Corporation.  All rights reserved.
@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cemac.c,v 1.26 2022/11/12 16:54:36 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cemac.c,v 1.27 2024/06/29 12:11:11 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -303,14 +303,14 @@ cemac_intr(void *arg)
 		CEMAC_WRITE(ETH_CTL, ctl & ~ETH_CTL_RE);	// disable receiver
 		CEMAC_WRITE(ETH_RSR, ETH_RSR_BNA);	// clear BNA bit
 		CEMAC_WRITE(ETH_CTL, ctl |  ETH_CTL_RE);	// re-enable receiver
-		if_statinc_ref(nsr, if_ierrors);
-		if_statinc_ref(nsr, if_ipackets);
+		if_statinc_ref(ifp, nsr, if_ierrors);
+		if_statinc_ref(ifp, nsr, if_ipackets);
 		DPRINTFN(1,("%s: out of receive buffers\n", __FUNCTION__));
 	}
 	if (isr & ETH_ISR_ROVR) {
 		CEMAC_WRITE(ETH_RSR, ETH_RSR_OVR);	// clear interrupt
-		if_statinc_ref(nsr, if_ierrors);
-		if_statinc_ref(nsr, if_ipackets);
+		if_statinc_ref(ifp, nsr, if_ierrors);
+		if_statinc_ref(ifp, nsr, if_ipackets);
 		DPRINTFN(1,("%s: receive overrun\n", __FUNCTION__));
 	}
 
@@ -374,7 +374,7 @@ cemac_intr(void *arg)
 				 */
 				if (m != NULL)
 					m_freem(m);
-				if_statinc_ref(nsr, if_ierrors);
+				if_statinc_ref(ifp, nsr, if_ierrors);
 			}
 			sc->rxqi++;
 		}

Index: src/sys/dev/ic/aic6915.c
diff -u src/sys/dev/ic/aic6915.c:1.46 src/sys/dev/ic/aic6915.c:1.47
--- src/sys/dev/ic/aic6915.c:1.46	Fri Feb  2 22:39:10 2024
+++ src/sys/dev/ic/aic6915.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: aic6915.c,v 1.46 2024/02/02 22:39:10 andvar Exp $	*/
+/*	$NetBSD: aic6915.c,v 1.47 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: aic6915.c,v 1.46 2024/02/02 22:39:10 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: aic6915.c,v 1.47 2024/06/29 12:11:11 riastradh Exp $");
 
 
 #include <sys/param.h>
@@ -843,18 +843,18 @@ sf_stats_update(struct sf_softc *sc)
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 
-	if_statadd_ref(nsr, if_opackets, stats.TransmitOKFrames);
+	if_statadd_ref(ifp, nsr, if_opackets, stats.TransmitOKFrames);
 
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    stats.SingleCollisionFrames +
 	    stats.MultipleCollisionFrames);
 
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 	    stats.TransmitAbortDueToExcessiveCollisions +
 	    stats.TransmitAbortDueToExcessingDeferral +
 	    stats.FramesLostDueToInternalTransmitErrors);
 
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    stats.ReceiveCRCErrors + stats.AlignmentErrors +
 	    stats.ReceiveFramesTooLong + stats.ReceiveFramesTooShort +
 	    stats.ReceiveFramesJabbersError +

Index: src/sys/dev/ic/cs89x0.c
diff -u src/sys/dev/ic/cs89x0.c:1.54 src/sys/dev/ic/cs89x0.c:1.55
--- src/sys/dev/ic/cs89x0.c:1.54	Sat Feb 10 18:43:52 2024
+++ src/sys/dev/ic/cs89x0.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: cs89x0.c,v 1.54 2024/02/10 18:43:52 andvar Exp $	*/
+/*	$NetBSD: cs89x0.c,v 1.55 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2004 Christopher Gilbert
@@ -212,7 +212,7 @@
 */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cs89x0.c,v 1.54 2024/02/10 18:43:52 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cs89x0.c,v 1.55 2024/06/29 12:11:11 riastradh Exp $");
 
 #include "opt_inet.h"
 
@@ -1564,12 +1564,12 @@ cs_transmit_event(struct cs_softc *sc, u
 	/* Add the number of collisions for this frame */
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 	if (txEvent & TX_EVENT_16_COLL)
-		if_statadd_ref(nsr, if_collisions, 16);
+		if_statadd_ref(ifp, nsr, if_collisions, 16);
 	else
-		if_statadd_ref(nsr, if_collisions,
+		if_statadd_ref(ifp, nsr, if_collisions,
 		    ((txEvent & TX_EVENT_COLL_MASK) >> 11));
 
-	if_statinc_ref(nsr, if_opackets);
+	if_statinc_ref(ifp, nsr, if_opackets);
 	IF_STAT_PUTREF(ifp);
 
 	/* Transmission is no longer in progress */

Index: src/sys/dev/ic/dp8390.c
diff -u src/sys/dev/ic/dp8390.c:1.100 src/sys/dev/ic/dp8390.c:1.101
--- src/sys/dev/ic/dp8390.c:1.100	Sun Sep 18 18:03:51 2022
+++ src/sys/dev/ic/dp8390.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: dp8390.c,v 1.100 2022/09/18 18:03:51 thorpej Exp $	*/
+/*	$NetBSD: dp8390.c,v 1.101 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*
  * Device driver for National Semiconductor DS8390/WD83C690 based ethernet
@@ -14,7 +14,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dp8390.c,v 1.100 2022/09/18 18:03:51 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dp8390.c,v 1.101 2024/06/29 12:11:11 riastradh Exp $");
 
 #include "opt_inet.h"
 
@@ -688,7 +688,7 @@ dp8390_intr(void *arg)
 				}
 
 				/* Update output errors counter. */
-				if_statinc_ref(nsr, if_oerrors);
+				if_statinc_ref(ifp, nsr, if_oerrors);
 			} else {
 				/*
 				 * Throw away the non-error status bits.
@@ -703,7 +703,7 @@ dp8390_intr(void *arg)
 				 * Update total number of successfully
 				 * transmitted packets.
 				 */
-				if_statinc_ref(nsr, if_opackets);
+				if_statinc_ref(ifp, nsr, if_opackets);
 			}
 
 			/* Clear watchdog timer. */
@@ -713,8 +713,10 @@ dp8390_intr(void *arg)
 			 * Add in total number of collisions on last
 			 * transmission.
 			 */
-			if (collisions)
-				if_statadd_ref(nsr, if_collisions, collisions);
+			if (collisions) {
+				if_statadd_ref(ifp, nsr, if_collisions,
+				    collisions);
+			}
 
 			IF_STAT_PUTREF(ifp);
 

Index: src/sys/dev/ic/dp83932.c
diff -u src/sys/dev/ic/dp83932.c:1.49 src/sys/dev/ic/dp83932.c:1.50
--- src/sys/dev/ic/dp83932.c:1.49	Sun Sep 25 18:43:32 2022
+++ src/sys/dev/ic/dp83932.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: dp83932.c,v 1.49 2022/09/25 18:43:32 thorpej Exp $	*/
+/*	$NetBSD: dp83932.c,v 1.50 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dp83932.c,v 1.49 2022/09/25 18:43:32 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dp83932.c,v 1.50 2024/06/29 12:11:11 riastradh Exp $");
 
 
 #include <sys/param.h>
@@ -668,13 +668,15 @@ sonic_txintr(struct sonic_softc *sc)
 		 */
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 		if (status & TCR_PTX) {
-			if_statinc_ref(nsr, if_opackets);
+			if_statinc_ref(ifp, nsr, if_opackets);
 			count++;
-		} else
-			if_statinc_ref(nsr, if_oerrors);
-		if (TDA_STATUS_NCOL(status))
-			if_statadd_ref(nsr, if_collisions,
+		} else {
+			if_statinc_ref(ifp, nsr, if_oerrors);
+		}
+		if (TDA_STATUS_NCOL(status)) {
+			if_statadd_ref(ifp, nsr, if_collisions,
 			    TDA_STATUS_NCOL(status));
+		}
 		IF_STAT_PUTREF(ifp);
 	}
 

Index: src/sys/dev/ic/elinkxl.c
diff -u src/sys/dev/ic/elinkxl.c:1.139 src/sys/dev/ic/elinkxl.c:1.140
--- src/sys/dev/ic/elinkxl.c:1.139	Sun May 29 10:43:46 2022
+++ src/sys/dev/ic/elinkxl.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: elinkxl.c,v 1.139 2022/05/29 10:43:46 rin Exp $	*/
+/*	$NetBSD: elinkxl.c,v 1.140 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: elinkxl.c,v 1.139 2022/05/29 10:43:46 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: elinkxl.c,v 1.140 2024/06/29 12:11:11 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1490,18 +1490,18 @@ ex_getstats(struct ex_softc *sc)
 
 	GO_WINDOW(6);
 	upperok = bus_space_read_1(iot, ioh, UPPER_FRAMES_OK);
-	if_statadd_ref(nsr, if_opackets,
+	if_statadd_ref(ifp, nsr, if_opackets,
 	    bus_space_read_1(iot, ioh, TX_FRAMES_OK));
-	if_statadd_ref(nsr, if_opackets, (upperok & 0x30) << 4);
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_opackets, (upperok & 0x30) << 4);
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    bus_space_read_1(iot, ioh, RX_OVERRUNS));
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    bus_space_read_1(iot, ioh, TX_COLLISIONS));
 	/*
 	 * There seems to be no way to get the exact number of collisions,
 	 * this is the number that occurred at the very least.
 	 */
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    2 * bus_space_read_1(iot, ioh, TX_AFTER_X_COLLISIONS));
 
 	IF_STAT_PUTREF(ifp);

Index: src/sys/dev/ic/gem.c
diff -u src/sys/dev/ic/gem.c:1.136 src/sys/dev/ic/gem.c:1.137
--- src/sys/dev/ic/gem.c:1.136	Sat Feb 10 09:30:06 2024
+++ src/sys/dev/ic/gem.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: gem.c,v 1.136 2024/02/10 09:30:06 andvar Exp $ */
+/*	$NetBSD: gem.c,v 1.137 2024/06/29 12:11:11 riastradh Exp $ */
 
 /*
  *
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gem.c,v 1.136 2024/02/10 09:30:06 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gem.c,v 1.137 2024/06/29 12:11:11 riastradh Exp $");
 
 #include "opt_inet.h"
 
@@ -1642,10 +1642,10 @@ gem_tint(struct gem_softc *sc)
 	/* Unload collision counters ... */
 	v = bus_space_read_4(t, mac, GEM_MAC_EXCESS_COLL_CNT) +
 	    bus_space_read_4(t, mac, GEM_MAC_LATE_COLL_CNT);
-	if_statadd_ref(nsr, if_collisions, v +
+	if_statadd_ref(ifp, nsr, if_collisions, v +
 	    bus_space_read_4(t, mac, GEM_MAC_NORM_COLL_CNT) +
 	    bus_space_read_4(t, mac, GEM_MAC_FIRST_COLL_CNT));
-	if_statadd_ref(nsr, if_oerrors, v);
+	if_statadd_ref(ifp, nsr, if_oerrors, v);
 
 	/* ... then clear the hardware counters. */
 	bus_space_write_4(t, mac, GEM_MAC_NORM_COLL_CNT, 0);
@@ -1715,7 +1715,7 @@ gem_tint(struct gem_softc *sc)
 
 		SIMPLEQ_INSERT_TAIL(&sc->sc_txfreeq, txs, txs_q);
 
-		if_statinc_ref(nsr, if_opackets);
+		if_statinc_ref(ifp, nsr, if_opackets);
 		progress = 1;
 	}
 

Index: src/sys/dev/ic/hd64570.c
diff -u src/sys/dev/ic/hd64570.c:1.58 src/sys/dev/ic/hd64570.c:1.59
--- src/sys/dev/ic/hd64570.c:1.58	Sat Feb 10 08:24:51 2024
+++ src/sys/dev/ic/hd64570.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: hd64570.c,v 1.58 2024/02/10 08:24:51 andvar Exp $	*/
+/*	$NetBSD: hd64570.c,v 1.59 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1999 Christian E. Hopps
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hd64570.c,v 1.58 2024/02/10 08:24:51 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hd64570.c,v 1.59 2024/06/29 12:11:11 riastradh Exp $");
 
 #include "opt_inet.h"
 
@@ -879,15 +879,15 @@ sca_output(
 		IFQ_ENQUEUE(&ifp->if_snd, m, error);
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 	if (error != 0) {
-		if_statinc_ref(nsr, if_oerrors);
-		if_statinc_ref(nsr, if_collisions);
+		if_statinc_ref(ifp, nsr, if_oerrors);
+		if_statinc_ref(ifp, nsr, if_collisions);
 		IF_STAT_PUTREF(ifp);
 		splx(s);
 		return (error);
 	}
-	if_statadd_ref(nsr, if_obytes, len);
+	if_statadd_ref(ifp, nsr, if_obytes, len);
 	if (mflags & M_MCAST)
-		if_statinc_ref(nsr, if_omcasts);
+		if_statinc_ref(ifp, nsr, if_omcasts);
 	IF_STAT_PUTREF(ifp);
 
 	sca_start(ifp);

Index: src/sys/dev/ic/hme.c
diff -u src/sys/dev/ic/hme.c:1.109 src/sys/dev/ic/hme.c:1.110
--- src/sys/dev/ic/hme.c:1.109	Sun May 29 10:43:46 2022
+++ src/sys/dev/ic/hme.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: hme.c,v 1.109 2022/05/29 10:43:46 rin Exp $	*/
+/*	$NetBSD: hme.c,v 1.110 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hme.c,v 1.109 2022/05/29 10:43:46 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hme.c,v 1.110 2024/06/29 12:11:11 riastradh Exp $");
 
 /* #define HMEDEBUG */
 
@@ -989,10 +989,10 @@ hme_tint(struct hme_softc *sc)
 	/*
 	 * Unload collision counters
 	 */
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 		bus_space_read_4(t, mac, HME_MACI_NCCNT) +
 		bus_space_read_4(t, mac, HME_MACI_FCCNT));
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 		bus_space_read_4(t, mac, HME_MACI_EXCNT) +
 		bus_space_read_4(t, mac, HME_MACI_LTCNT));
 
@@ -1017,7 +1017,7 @@ hme_tint(struct hme_softc *sc)
 			break;
 
 		ifp->if_flags &= ~IFF_OACTIVE;
-		if_statinc_ref(nsr, if_opackets);
+		if_statinc_ref(ifp, nsr, if_opackets);
 
 		if (++ri == sc->sc_rb.rb_ntbuf)
 			ri = 0;
@@ -1114,13 +1114,13 @@ hme_eint(struct hme_softc *sc, u_int sta
 	/* Receive error counters rolled over */
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 	if (status & HME_SEB_STAT_ACNTEXP)
-		if_statadd_ref(nsr, if_ierrors, 0xff);
+		if_statadd_ref(ifp, nsr, if_ierrors, 0xff);
 	if (status & HME_SEB_STAT_CCNTEXP)
-		if_statadd_ref(nsr, if_ierrors, 0xff);
+		if_statadd_ref(ifp, nsr, if_ierrors, 0xff);
 	if (status & HME_SEB_STAT_LCNTEXP)
-		if_statadd_ref(nsr, if_ierrors, 0xff);
+		if_statadd_ref(ifp, nsr, if_ierrors, 0xff);
 	if (status & HME_SEB_STAT_CVCNTEXP)
-		if_statadd_ref(nsr, if_ierrors, 0xff);
+		if_statadd_ref(ifp, nsr, if_ierrors, 0xff);
 	IF_STAT_PUTREF(ifp);
 
 	/* RXTERR locks up the interface, so do a reset */

Index: src/sys/dev/ic/i82557.c
diff -u src/sys/dev/ic/i82557.c:1.161 src/sys/dev/ic/i82557.c:1.162
--- src/sys/dev/ic/i82557.c:1.161	Fri Feb  9 22:08:34 2024
+++ src/sys/dev/ic/i82557.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i82557.c,v 1.161 2024/02/09 22:08:34 andvar Exp $	*/
+/*	$NetBSD: i82557.c,v 1.162 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1998, 1999, 2001, 2002 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i82557.c,v 1.161 2024/02/09 22:08:34 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i82557.c,v 1.162 2024/06/29 12:11:11 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1480,14 +1480,15 @@ fxp_tick(void *arg)
 
 	FXP_CDSTATSSYNC(sc, BUS_DMASYNC_POSTREAD);
 
-	if_statadd_ref(nsr, if_opackets, le32toh(sp->tx_good));
-	if_statadd_ref(nsr, if_collisions, le32toh(sp->tx_total_collisions));
+	if_statadd_ref(ifp, nsr, if_opackets, le32toh(sp->tx_good));
+	if_statadd_ref(ifp, nsr, if_collisions,
+	    le32toh(sp->tx_total_collisions));
 	if (sp->rx_good) {
 		sc->sc_rxidle = 0;
 	} else if (sc->sc_flags & FXPF_RECV_WORKAROUND) {
 		sc->sc_rxidle++;
 	}
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    le32toh(sp->rx_crc_errors) +
 	    le32toh(sp->rx_alignment_errors) +
 	    le32toh(sp->rx_rnr_errors) +
@@ -1497,7 +1498,8 @@ fxp_tick(void *arg)
 	 * threshold by another 512 bytes (64 * 8).
 	 */
 	if (sp->tx_underruns) {
-		if_statadd_ref(nsr, if_oerrors, le32toh(sp->tx_underruns));
+		if_statadd_ref(ifp, nsr, if_oerrors,
+		    le32toh(sp->tx_underruns));
 		if (tx_threshold < 192)
 			tx_threshold += 64;
 	}

Index: src/sys/dev/ic/mb86960.c
diff -u src/sys/dev/ic/mb86960.c:1.97 src/sys/dev/ic/mb86960.c:1.98
--- src/sys/dev/ic/mb86960.c:1.97	Fri Jun  2 08:51:47 2023
+++ src/sys/dev/ic/mb86960.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: mb86960.c,v 1.97 2023/06/02 08:51:47 andvar Exp $	*/
+/*	$NetBSD: mb86960.c,v 1.98 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*
  * All Rights Reserved, Copyright (C) Fujitsu Limited 1995
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mb86960.c,v 1.97 2023/06/02 08:51:47 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mb86960.c,v 1.98 2024/06/29 12:11:11 riastradh Exp $");
 
 /*
  * Device driver for Fujitsu MB86960A/MB86965A based Ethernet cards.
@@ -819,9 +819,9 @@ mb86960_tint(struct mb86960_softc *sc, u
 		 * Update statistics.
 		 */
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-		if_statadd_ref(nsr, if_collisions, 16);
-		if_statinc_ref(nsr, if_oerrors);
-		if_statadd_ref(nsr, if_opackets, sc->txb_sched - left);
+		if_statadd_ref(ifp, nsr, if_collisions, 16);
+		if_statinc_ref(ifp, nsr, if_oerrors);
+		if_statadd_ref(ifp, nsr, if_opackets, sc->txb_sched - left);
 		IF_STAT_PUTREF(ifp);
 
 		/*
Index: src/sys/dev/ic/smc83c170.c
diff -u src/sys/dev/ic/smc83c170.c:1.97 src/sys/dev/ic/smc83c170.c:1.98
--- src/sys/dev/ic/smc83c170.c:1.97	Sat Feb 10 09:30:06 2024
+++ src/sys/dev/ic/smc83c170.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: smc83c170.c,v 1.97 2024/02/10 09:30:06 andvar Exp $	*/
+/*	$NetBSD: smc83c170.c,v 1.98 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smc83c170.c,v 1.97 2024/02/10 09:30:06 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smc83c170.c,v 1.98 2024/06/29 12:11:11 riastradh Exp $");
 
 
 #include <sys/param.h>
@@ -760,11 +760,11 @@ epic_intr(void *arg)
 			 */
 			net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 			if ((txstatus & ET_TXSTAT_PACKETTX) == 0)
-				if_statinc_ref(nsr, if_oerrors);
+				if_statinc_ref(ifp, nsr, if_oerrors);
 			else
-				if_statinc_ref(nsr, if_opackets);
+				if_statinc_ref(ifp, nsr, if_opackets);
 			if (TXSTAT_COLLISIONS(txstatus))
-				if_statadd_ref(nsr, if_collisions,
+				if_statadd_ref(ifp, nsr, if_collisions,
 				    TXSTAT_COLLISIONS(txstatus));
 			if (txstatus & ET_TXSTAT_CARSENSELOST)
 				printf("%s: lost carrier\n",

Index: src/sys/dev/ic/rtl8169.c
diff -u src/sys/dev/ic/rtl8169.c:1.175 src/sys/dev/ic/rtl8169.c:1.176
--- src/sys/dev/ic/rtl8169.c:1.175	Sun Sep 25 18:43:32 2022
+++ src/sys/dev/ic/rtl8169.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: rtl8169.c,v 1.175 2022/09/25 18:43:32 thorpej Exp $	*/
+/*	$NetBSD: rtl8169.c,v 1.176 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998-2003
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtl8169.c,v 1.175 2022/09/25 18:43:32 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtl8169.c,v 1.176 2024/06/29 12:11:11 riastradh Exp $");
 /* $FreeBSD: /repoman/r/ncvs/src/sys/dev/re/if_re.c,v 1.20 2004/04/11 20:34:08 ru Exp $ */
 
 /*
@@ -1471,11 +1471,11 @@ re_txeof(struct rtk_softc *sc)
 
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 		if (txstat & (RE_TDESC_STAT_EXCESSCOL | RE_TDESC_STAT_COLCNT))
-			if_statinc_ref(nsr, if_collisions);
+			if_statinc_ref(ifp, nsr, if_collisions);
 		if (txstat & RE_TDESC_STAT_TXERRSUM)
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(ifp, nsr, if_oerrors);
 		else
-			if_statinc_ref(nsr, if_opackets);
+			if_statinc_ref(ifp, nsr, if_opackets);
 		IF_STAT_PUTREF(ifp);
 	}
 

Index: src/sys/dev/ic/rtl81x9.c
diff -u src/sys/dev/ic/rtl81x9.c:1.114 src/sys/dev/ic/rtl81x9.c:1.115
--- src/sys/dev/ic/rtl81x9.c:1.114	Sun May 21 18:01:38 2023
+++ src/sys/dev/ic/rtl81x9.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: rtl81x9.c,v 1.114 2023/05/21 18:01:38 andvar Exp $	*/
+/*	$NetBSD: rtl81x9.c,v 1.115 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998
@@ -86,7 +86,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtl81x9.c,v 1.114 2023/05/21 18:01:38 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtl81x9.c,v 1.115 2024/06/29 12:11:11 riastradh Exp $");
 
 
 #include <sys/param.h>
@@ -1118,13 +1118,13 @@ rtk_txeof(struct rtk_softc *sc)
 		txd->txd_mbuf = NULL;
 
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-		if_statadd_ref(nsr, if_collisions,
+		if_statadd_ref(ifp, nsr, if_collisions,
 		    (txstat & RTK_TXSTAT_COLLCNT) >> 24);
 
 		if (txstat & RTK_TXSTAT_TX_OK)
-			if_statinc_ref(nsr, if_opackets);
+			if_statinc_ref(ifp, nsr, if_opackets);
 		else {
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(ifp, nsr, if_oerrors);
 
 			/*
 			 * Increase Early TX threshold if underrun occurred.

Index: src/sys/dev/ic/tulip.c
diff -u src/sys/dev/ic/tulip.c:1.211 src/sys/dev/ic/tulip.c:1.212
--- src/sys/dev/ic/tulip.c:1.211	Sat Feb 10 09:30:06 2024
+++ src/sys/dev/ic/tulip.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: tulip.c,v 1.211 2024/02/10 09:30:06 andvar Exp $	*/
+/*	$NetBSD: tulip.c,v 1.212 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2002 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tulip.c,v 1.211 2024/02/10 09:30:06 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tulip.c,v 1.212 2024/06/29 12:11:11 riastradh Exp $");
 
 
 #include <sys/param.h>
@@ -1485,17 +1485,17 @@ tlp_txintr(struct tulip_softc *sc)
 #endif
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 		if (txstat & (TDSTAT_Tx_UF | TDSTAT_Tx_TO))
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(ifp, nsr, if_oerrors);
 
 		if (txstat & TDSTAT_Tx_EC)
-			if_statadd_ref(nsr, if_collisions, 16);
+			if_statadd_ref(ifp, nsr, if_collisions, 16);
 		else
-			if_statadd_ref(nsr, if_collisions,
+			if_statadd_ref(ifp, nsr, if_collisions,
 			    TDSTAT_Tx_COLLISIONS(txstat));
 		if (txstat & TDSTAT_Tx_LC)
-			if_statinc_ref(nsr, if_collisions);
+			if_statinc_ref(ifp, nsr, if_collisions);
 
-		if_statinc_ref(nsr, if_opackets);
+		if_statinc_ref(ifp, nsr, if_opackets);
 		IF_STAT_PUTREF(ifp);
 	}
 

Index: src/sys/dev/pci/if_age.c
diff -u src/sys/dev/pci/if_age.c:1.73 src/sys/dev/pci/if_age.c:1.74
--- src/sys/dev/pci/if_age.c:1.73	Sat Sep 17 13:51:09 2022
+++ src/sys/dev/pci/if_age.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_age.c,v 1.73 2022/09/17 13:51:09 thorpej Exp $ */
+/*	$NetBSD: if_age.c,v 1.74 2024/06/29 12:11:11 riastradh Exp $ */
 /*	$OpenBSD: if_age.c,v 1.1 2009/01/16 05:00:34 kevlo Exp $	*/
 
 /*-
@@ -31,7 +31,7 @@
 /* Driver for Attansic Technology Corp. L1 Gigabit Ethernet. */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_age.c,v 1.73 2022/09/17 13:51:09 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_age.c,v 1.74 2024/06/29 12:11:11 riastradh Exp $");
 
 #include "vlan.h"
 
@@ -2055,19 +2055,19 @@ age_stats_update(struct age_softc *sc)
 	/* Update counters in ifnet. */
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 
-	if_statadd_ref(nsr, if_opackets, smb->tx_frames);
+	if_statadd_ref(ifp, nsr, if_opackets, smb->tx_frames);
 
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    smb->tx_single_colls +
 	    smb->tx_multi_colls + smb->tx_late_colls +
 	    smb->tx_excess_colls * HDPX_CFG_RETRY_DEFAULT);
 
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 	    smb->tx_excess_colls +
 	    smb->tx_late_colls + smb->tx_underrun +
 	    smb->tx_pkts_truncated);
 
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    smb->rx_crcerrs + smb->rx_lenerrs +
 	    smb->rx_runts + smb->rx_pkts_truncated +
 	    smb->rx_fifo_oflows + smb->rx_desc_oflows +

Index: src/sys/dev/pci/if_alc.c
diff -u src/sys/dev/pci/if_alc.c:1.53 src/sys/dev/pci/if_alc.c:1.54
--- src/sys/dev/pci/if_alc.c:1.53	Sat Sep 17 13:55:35 2022
+++ src/sys/dev/pci/if_alc.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_alc.c,v 1.53 2022/09/17 13:55:35 thorpej Exp $	*/
+/*	$NetBSD: if_alc.c,v 1.54 2024/06/29 12:11:11 riastradh Exp $	*/
 /*	$OpenBSD: if_alc.c,v 1.1 2009/08/08 09:31:13 kevlo Exp $	*/
 /*-
  * Copyright (c) 2009, Pyun YongHyeon <yong...@freebsd.org>
@@ -2288,18 +2288,18 @@ alc_stats_update(struct alc_softc *sc)
 	/* Update counters in ifnet. */
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 
-	if_statadd_ref(nsr, if_opackets, smb->tx_frames);
+	if_statadd_ref(ifp, nsr, if_opackets, smb->tx_frames);
 
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    smb->tx_single_colls +
 	    smb->tx_multi_colls * 2 + smb->tx_late_colls +
 	    smb->tx_excess_colls * HDPX_CFG_RETRY_DEFAULT);
 
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 	    smb->tx_late_colls + smb->tx_excess_colls +
 	    smb->tx_underrun + smb->tx_pkts_truncated);
 
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    smb->rx_crcerrs + smb->rx_lenerrs +
 	    smb->rx_runts + smb->rx_pkts_truncated +
 	    smb->rx_fifo_oflows + smb->rx_rrs_errs +

Index: src/sys/dev/pci/if_ale.c
diff -u src/sys/dev/pci/if_ale.c:1.43 src/sys/dev/pci/if_ale.c:1.44
--- src/sys/dev/pci/if_ale.c:1.43	Mon Aug 22 15:59:42 2022
+++ src/sys/dev/pci/if_ale.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ale.c,v 1.43 2022/08/22 15:59:42 thorpej Exp $	*/
+/*	$NetBSD: if_ale.c,v 1.44 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2008, Pyun YongHyeon <yong...@freebsd.org>
@@ -32,7 +32,7 @@
 /* Driver for Atheros AR8121/AR8113/AR8114 PCIe Ethernet. */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ale.c,v 1.43 2022/08/22 15:59:42 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ale.c,v 1.44 2024/06/29 12:11:11 riastradh Exp $");
 
 #include "vlan.h"
 
@@ -1253,9 +1253,9 @@ ale_stats_update(struct ale_softc *sc)
 	/* Update counters in ifnet. */
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 
-	if_statadd_ref(nsr, if_opackets, smb->tx_frames);
+	if_statadd_ref(ifp, nsr, if_opackets, smb->tx_frames);
 
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    smb->tx_single_colls +
 	    smb->tx_multi_colls * 2 + smb->tx_late_colls +
 	    smb->tx_abort * HDPX_CFG_RETRY_DEFAULT);
@@ -1267,11 +1267,11 @@ ale_stats_update(struct ale_softc *sc)
 	 * the counter name is not correct one so I've removed the
 	 * counter in output errors.
 	 */
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 	    smb->tx_abort + smb->tx_late_colls +
 	    smb->tx_underrun);
 
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    smb->rx_crcerrs + smb->rx_lenerrs +
 	    smb->rx_runts + smb->rx_pkts_truncated +
 	    smb->rx_fifo_oflows + smb->rx_rrs_errs +

Index: src/sys/dev/pci/if_aq.c
diff -u src/sys/dev/pci/if_aq.c:1.47 src/sys/dev/pci/if_aq.c:1.48
--- src/sys/dev/pci/if_aq.c:1.47	Sat Mar  9 22:03:32 2024
+++ src/sys/dev/pci/if_aq.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_aq.c,v 1.47 2024/03/09 22:03:32 mrg Exp $	*/
+/*	$NetBSD: if_aq.c,v 1.48 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /**
  * aQuantia Corporation Network Driver
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_aq.c,v 1.47 2024/03/09 22:03:32 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_aq.c,v 1.48 2024/06/29 12:11:11 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_if_aq.h"
@@ -5439,10 +5439,10 @@ aq_tx_intr(void *arg)
 			bus_dmamap_unload(sc->sc_dmat,
 			    txring->txr_mbufs[idx].dmamap);
 
-			if_statinc_ref(nsr, if_opackets);
-			if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
+			if_statinc_ref(ifp, nsr, if_opackets);
+			if_statadd_ref(ifp, nsr, if_obytes, m->m_pkthdr.len);
 			if (m->m_flags & M_MCAST)
-				if_statinc_ref(nsr, if_omcasts);
+				if_statinc_ref(ifp, nsr, if_omcasts);
 
 			m_freem(m);
 			txring->txr_mbufs[idx].m = NULL;
@@ -5526,7 +5526,7 @@ aq_rx_intr(void *arg)
 
 		if ((rxd_status & RXDESC_STATUS_MACERR) ||
 		    (rxd_type & RXDESC_TYPE_MAC_DMA_ERR)) {
-			if_statinc_ref(nsr, if_ierrors);
+			if_statinc_ref(ifp, nsr, if_ierrors);
 			if (m0 != NULL) {
 				m_freem(m0);
 				m0 = mprev = NULL;
@@ -5546,7 +5546,7 @@ aq_rx_intr(void *arg)
 			 * cannot allocate new mbuf.
 			 * discard this packet, and reuse mbuf for next.
 			 */
-			if_statinc_ref(nsr, if_iqdrops);
+			if_statinc_ref(ifp, nsr, if_iqdrops);
 			if (m0 != NULL) {
 				m_freem(m0);
 				m0 = mprev = NULL;
@@ -5657,8 +5657,8 @@ aq_rx_intr(void *arg)
 			}
 
 			m_set_rcvif(m0, ifp);
-			if_statinc_ref(nsr, if_ipackets);
-			if_statadd_ref(nsr, if_ibytes, m0->m_pkthdr.len);
+			if_statinc_ref(ifp, nsr, if_ipackets);
+			if_statadd_ref(ifp, nsr, if_ibytes, m0->m_pkthdr.len);
 			if_percpuq_enqueue(ifp->if_percpuq, m0);
 			m0 = mprev = NULL;
 		}
Index: src/sys/dev/pci/if_cas.c
diff -u src/sys/dev/pci/if_cas.c:1.47 src/sys/dev/pci/if_cas.c:1.48
--- src/sys/dev/pci/if_cas.c:1.47	Sat Sep 24 18:12:42 2022
+++ src/sys/dev/pci/if_cas.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_cas.c,v 1.47 2022/09/24 18:12:42 thorpej Exp $	*/
+/*	$NetBSD: if_cas.c,v 1.48 2024/06/29 12:11:11 riastradh Exp $	*/
 /*	$OpenBSD: if_cas.c,v 1.29 2009/11/29 16:19:38 kettenis Exp $	*/
 
 /*
@@ -44,7 +44,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cas.c,v 1.47 2022/09/24 18:12:42 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cas.c,v 1.48 2024/06/29 12:11:11 riastradh Exp $");
 
 #ifndef _MODULE
 #include "opt_inet.h"
@@ -839,13 +839,13 @@ cas_tick(void *arg)
 	/* unload collisions counters */
 	v = bus_space_read_4(t, mac, CAS_MAC_EXCESS_COLL_CNT) +
 	    bus_space_read_4(t, mac, CAS_MAC_LATE_COLL_CNT);
-	if_statadd_ref(nsr, if_collisions, v +
+	if_statadd_ref(ifp, nsr, if_collisions, v +
 	    bus_space_read_4(t, mac, CAS_MAC_NORM_COLL_CNT) +
 	    bus_space_read_4(t, mac, CAS_MAC_FIRST_COLL_CNT));
-	if_statadd_ref(nsr, if_oerrors, v);
+	if_statadd_ref(ifp, nsr, if_oerrors, v);
 
 	/* read error counters */
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    bus_space_read_4(t, mac, CAS_MAC_RX_LEN_ERR_CNT) +
 	    bus_space_read_4(t, mac, CAS_MAC_RX_ALIGN_ERR) +
 	    bus_space_read_4(t, mac, CAS_MAC_RX_CRC_ERR_CNT) +

Index: src/sys/dev/pci/if_bge.c
diff -u src/sys/dev/pci/if_bge.c:1.391 src/sys/dev/pci/if_bge.c:1.392
--- src/sys/dev/pci/if_bge.c:1.391	Mon Apr  1 22:56:55 2024
+++ src/sys/dev/pci/if_bge.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_bge.c,v 1.391 2024/04/01 22:56:55 andvar Exp $	*/
+/*	$NetBSD: if_bge.c,v 1.392 2024/06/29 12:11:11 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2001 Wind River Systems
@@ -79,7 +79,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.391 2024/04/01 22:56:55 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.392 2024/06/29 12:11:11 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -4878,7 +4878,7 @@ bge_stats_update_regs(struct bge_softc *
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    CSR_READ_4(sc, BGE_MAC_STATS +
 	    offsetof(struct bge_mac_stats_regs, etherStatsCollisions)));
 
@@ -4891,12 +4891,12 @@ bge_stats_update_regs(struct bge_softc *
 	if (BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5717 &&
 	    sc->bge_chipid != BGE_CHIPID_BCM5719_A0 &&
 	    sc->bge_chipid != BGE_CHIPID_BCM5720_A0) {
-		if_statadd_ref(nsr, if_ierrors,
+		if_statadd_ref(ifp, nsr, if_ierrors,
 		    CSR_READ_4(sc, BGE_RXLP_LOCSTAT_IFIN_DROPS));
 	}
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    CSR_READ_4(sc, BGE_RXLP_LOCSTAT_IFIN_ERRORS));
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    CSR_READ_4(sc, BGE_RXLP_LOCSTAT_OUT_OF_BDS));
 
 	IF_STAT_PUTREF(ifp);

Index: src/sys/dev/pci/if_bnx.c
diff -u src/sys/dev/pci/if_bnx.c:1.114 src/sys/dev/pci/if_bnx.c:1.115
--- src/sys/dev/pci/if_bnx.c:1.114	Tue Apr 23 15:34:07 2024
+++ src/sys/dev/pci/if_bnx.c	Sat Jun 29 12:11:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_bnx.c,v 1.114 2024/04/23 15:34:07 hans Exp $	*/
+/*	$NetBSD: if_bnx.c,v 1.115 2024/06/29 12:11:11 riastradh Exp $	*/
 /*	$OpenBSD: if_bnx.c,v 1.101 2013/03/28 17:21:44 brad Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
 #if 0
 __FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.3 2006/04/13 14:12:26 ru Exp $");
 #endif
-__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.114 2024/04/23 15:34:07 hans Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.115 2024/06/29 12:11:11 riastradh Exp $");
 
 /*
  * The following controllers are supported by this driver:
@@ -5680,7 +5680,8 @@ bnx_stats_update(struct bnx_softc *sc)
 	 * hardware statistics.
 	 */
 	value = (u_long)stats->stat_EtherStatsCollisions;
-	if_statadd_ref(nsr, if_collisions, value - sc->if_stat_collisions);
+	if_statadd_ref(ifp, nsr, if_collisions,
+	    value - sc->if_stat_collisions);
 	sc->if_stat_collisions = value;
 
 	value = (u_long)stats->stat_EtherStatsUndersizePkts +
@@ -5688,14 +5689,14 @@ bnx_stats_update(struct bnx_softc *sc)
 	    (u_long)stats->stat_IfInMBUFDiscards +
 	    (u_long)stats->stat_Dot3StatsAlignmentErrors +
 	    (u_long)stats->stat_Dot3StatsFCSErrors;
-	if_statadd_ref(nsr, if_ierrors, value - sc->if_stat_ierrors);
+	if_statadd_ref(ifp, nsr, if_ierrors, value - sc->if_stat_ierrors);
 	sc->if_stat_ierrors = value;
 
 	value = (u_long)
 	    stats->stat_emac_tx_stat_dot3statsinternalmactransmiterrors +
 	    (u_long)stats->stat_Dot3StatsExcessiveCollisions +
 	    (u_long)stats->stat_Dot3StatsLateCollisions;
-	if_statadd_ref(nsr, if_oerrors, value - sc->if_stat_oerrors);
+	if_statadd_ref(ifp, nsr, if_oerrors, value - sc->if_stat_oerrors);
 	sc->if_stat_oerrors = value;
 
 	/*
@@ -5705,7 +5706,7 @@ bnx_stats_update(struct bnx_softc *sc)
 	 */
 	if (!(BNX_CHIP_NUM(sc) == BNX_CHIP_NUM_5706) &&
 	    !(BNX_CHIP_ID(sc) == BNX_CHIP_ID_5708_A0)) {
-		if_statadd_ref(nsr, if_oerrors,
+		if_statadd_ref(ifp, nsr, if_oerrors,
 		    (u_long) stats->stat_Dot3StatsCarrierSenseErrors);
 	}
 

Index: src/sys/dev/pci/if_ena.c
diff -u src/sys/dev/pci/if_ena.c:1.41 src/sys/dev/pci/if_ena.c:1.42
--- src/sys/dev/pci/if_ena.c:1.41	Wed Dec 20 18:09:19 2023
+++ src/sys/dev/pci/if_ena.c	Sat Jun 29 12:11:12 2024
@@ -32,7 +32,7 @@
 #if 0
 __FBSDID("$FreeBSD: head/sys/dev/ena/ena.c 333456 2018-05-10 09:37:54Z mw $");
 #endif
-__KERNEL_RCSID(0, "$NetBSD: if_ena.c,v 1.41 2023/12/20 18:09:19 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ena.c,v 1.42 2024/06/29 12:11:12 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2946,12 +2946,13 @@ ena_start_xmit(struct ena_ring *tx_ring)
 		    mbuf, mbuf->m_flags, (uint64_t)mbuf->m_pkthdr.csum_flags);
 
 		if (likely((ret = ena_xmit_mbuf(tx_ring, &mbuf)) == 0)) {
-			if_statinc_ref(nsr, if_opackets);
-			if_statadd_ref(nsr, if_obytes, mbuf->m_pkthdr.len);
+			if_statinc_ref(adapter->ifp, nsr, if_opackets);
+			if_statadd_ref(adapter->ifp, nsr, if_obytes,
+			    mbuf->m_pkthdr.len);
 			if (ISSET(mbuf->m_flags, M_MCAST))
-				if_statinc_ref(nsr, if_omcasts);
+				if_statinc_ref(adapter->ifp, nsr, if_omcasts);
 		} else {
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(adapter->ifp, nsr, if_oerrors);
 			m_freem(mbuf);
 			break;
 		}

Index: src/sys/dev/pci/if_iavf.c
diff -u src/sys/dev/pci/if_iavf.c:1.17 src/sys/dev/pci/if_iavf.c:1.18
--- src/sys/dev/pci/if_iavf.c:1.17	Sun Jun  2 19:27:12 2024
+++ src/sys/dev/pci/if_iavf.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_iavf.c,v 1.17 2024/06/02 19:27:12 andvar Exp $	*/
+/*	$NetBSD: if_iavf.c,v 1.18 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2013-2015, Intel Corporation
@@ -75,7 +75,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_iavf.c,v 1.17 2024/06/02 19:27:12 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_iavf.c,v 1.18 2024/06/29 12:11:12 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -2710,12 +2710,12 @@ iavf_rxeof(struct iavf_softc *sc, struct
 			if (!ISSET(word,
 			    IXL_RX_DESC_RXE | IXL_RX_DESC_OVERSIZE)) {
 				m_set_rcvif(m, ifp);
-				if_statinc_ref(nsr, if_ipackets);
-				if_statadd_ref(nsr, if_ibytes,
+				if_statinc_ref(ifp, nsr, if_ipackets);
+				if_statadd_ref(ifp, nsr, if_ibytes,
 				    m->m_pkthdr.len);
 				if_percpuq_enqueue(sc->sc_ipq, m);
 			} else {
-				if_statinc_ref(nsr, if_ierrors);
+				if_statinc_ref(ifp, nsr, if_ierrors);
 				m_freem(m);
 			}
 
@@ -2733,7 +2733,7 @@ iavf_rxeof(struct iavf_softc *sc, struct
 		ecnt->ev_count++;
 		rxr->rxr_cons = cons;
 		if (iavf_rxfill(sc, rxr) == -1)
-			if_statinc_ref(nsr, if_iqdrops);
+			if_statinc_ref(ifp, nsr, if_iqdrops);
 	}
 
 	IF_STAT_PUTREF(ifp);
@@ -2830,10 +2830,10 @@ iavf_txeof(struct iavf_softc *sc, struct
 
 		m = txm->txm_m;
 		if (m != NULL) {
-			if_statinc_ref(nsr, if_opackets);
-			if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
+			if_statinc_ref(ifp, nsr, if_opackets);
+			if_statadd_ref(ifp, nsr, if_obytes, m->m_pkthdr.len);
 			if (ISSET(m->m_flags, M_MCAST))
-				if_statinc_ref(nsr, if_omcasts);
+				if_statinc_ref(ifp, nsr, if_omcasts);
 			m_freem(m);
 		}
 

Index: src/sys/dev/pci/if_ixl.c
diff -u src/sys/dev/pci/if_ixl.c:1.98 src/sys/dev/pci/if_ixl.c:1.99
--- src/sys/dev/pci/if_ixl.c:1.98	Fri Feb  9 22:08:35 2024
+++ src/sys/dev/pci/if_ixl.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ixl.c,v 1.98 2024/02/09 22:08:35 andvar Exp $	*/
+/*	$NetBSD: if_ixl.c,v 1.99 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2013-2015, Intel Corporation
@@ -74,7 +74,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ixl.c,v 1.98 2024/02/09 22:08:35 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ixl.c,v 1.99 2024/06/29 12:11:12 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_if_ixl.h"
@@ -2823,10 +2823,10 @@ ixl_txeof(struct ixl_softc *sc, struct i
 
 		m = txm->txm_m;
 		if (m != NULL) {
-			if_statinc_ref(nsr, if_opackets);
-			if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
+			if_statinc_ref(ifp, nsr, if_opackets);
+			if_statadd_ref(ifp, nsr, if_obytes, m->m_pkthdr.len);
 			if (ISSET(m->m_flags, M_MCAST))
-				if_statinc_ref(nsr, if_omcasts);
+				if_statinc_ref(ifp, nsr, if_omcasts);
 			m_freem(m);
 		}
 
@@ -3255,12 +3255,12 @@ ixl_rxeof(struct ixl_softc *sc, struct i
 			if (!ISSET(word,
 			    IXL_RX_DESC_RXE | IXL_RX_DESC_OVERSIZE)) {
 				m_set_rcvif(m, ifp);
-				if_statinc_ref(nsr, if_ipackets);
-				if_statadd_ref(nsr, if_ibytes,
+				if_statinc_ref(ifp, nsr, if_ipackets);
+				if_statadd_ref(ifp, nsr, if_ibytes,
 				    m->m_pkthdr.len);
 				if_percpuq_enqueue(sc->sc_ipq, m);
 			} else {
-				if_statinc_ref(nsr, if_ierrors);
+				if_statinc_ref(ifp, nsr, if_ierrors);
 				m_freem(m);
 			}
 
@@ -3277,7 +3277,7 @@ ixl_rxeof(struct ixl_softc *sc, struct i
 	if (done) {
 		rxr->rxr_cons = cons;
 		if (ixl_rxfill(sc, rxr) == -1)
-			if_statinc_ref(nsr, if_iqdrops);
+			if_statinc_ref(ifp, nsr, if_iqdrops);
 	}
 
 	IF_STAT_PUTREF(ifp);

Index: src/sys/dev/pci/if_rge.c
diff -u src/sys/dev/pci/if_rge.c:1.31 src/sys/dev/pci/if_rge.c:1.32
--- src/sys/dev/pci/if_rge.c:1.31	Thu Jan 18 03:47:26 2024
+++ src/sys/dev/pci/if_rge.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_rge.c,v 1.31 2024/01/18 03:47:26 msaitoh Exp $	*/
+/*	$NetBSD: if_rge.c,v 1.32 2024/06/29 12:11:12 riastradh Exp $	*/
 /*	$OpenBSD: if_rge.c,v 1.9 2020/12/12 11:48:53 jan Exp $	*/
 
 /*
@@ -18,7 +18,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_rge.c,v 1.31 2024/01/18 03:47:26 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_rge.c,v 1.32 2024/06/29 12:11:12 riastradh Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_net_mpsafe.h"
@@ -1394,11 +1394,11 @@ rge_txeof(struct rge_softc *sc)
 
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 		if (txstat & (RGE_TDCMDSTS_EXCESSCOLL | RGE_TDCMDSTS_COLL))
-			if_statinc_ref(nsr, if_collisions);
+			if_statinc_ref(ifp, nsr, if_collisions);
 		if (txstat & RGE_TDCMDSTS_TXERR)
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(ifp, nsr, if_oerrors);
 		else
-			if_statinc_ref(nsr, if_opackets);
+			if_statinc_ref(ifp, nsr, if_opackets);
 		IF_STAT_PUTREF(ifp);
 
 		bus_dmamap_sync(sc->sc_dmat, sc->rge_ldata.rge_tx_list_map,

Index: src/sys/dev/pci/if_sip.c
diff -u src/sys/dev/pci/if_sip.c:1.191 src/sys/dev/pci/if_sip.c:1.192
--- src/sys/dev/pci/if_sip.c:1.191	Sat Feb 10 09:30:06 2024
+++ src/sys/dev/pci/if_sip.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_sip.c,v 1.191 2024/02/10 09:30:06 andvar Exp $	*/
+/*	$NetBSD: if_sip.c,v 1.192 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -73,7 +73,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.191 2024/02/10 09:30:06 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.192 2024/06/29 12:11:12 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2071,9 +2071,9 @@ sipcom_txintr(struct sip_softc *sc)
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 		if (cmdsts & (CMDSTS_Tx_TXA | CMDSTS_Tx_TFU | CMDSTS_Tx_ED |
 		    CMDSTS_Tx_EC)) {
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(ifp, nsr, if_oerrors);
 			if (cmdsts & CMDSTS_Tx_EC)
-				if_statadd_ref(nsr, if_collisions, 16);
+				if_statadd_ref(ifp, nsr, if_collisions, 16);
 			if (ifp->if_flags & IFF_DEBUG) {
 				if (cmdsts & CMDSTS_Tx_ED)
 					printf("%s: excessive deferral\n",
@@ -2084,9 +2084,9 @@ sipcom_txintr(struct sip_softc *sc)
 			}
 		} else {
 			/* Packet was transmitted successfully. */
-			if_statinc_ref(nsr, if_opackets);
+			if_statinc_ref(ifp, nsr, if_opackets);
 			if (CMDSTS_COLLISIONS(cmdsts))
-				if_statadd_ref(nsr, if_collisions,
+				if_statadd_ref(ifp, nsr, if_collisions,
 				    CMDSTS_COLLISIONS(cmdsts));
 		}
 		IF_STAT_PUTREF(ifp);

Index: src/sys/dev/pci/if_ste.c
diff -u src/sys/dev/pci/if_ste.c:1.65 src/sys/dev/pci/if_ste.c:1.66
--- src/sys/dev/pci/if_ste.c:1.65	Sat Feb 10 09:30:06 2024
+++ src/sys/dev/pci/if_ste.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ste.c,v 1.65 2024/02/10 09:30:06 andvar Exp $	*/
+/*	$NetBSD: if_ste.c,v 1.66 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ste.c,v 1.65 2024/02/10 09:30:06 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ste.c,v 1.66 2024/06/29 12:11:12 riastradh Exp $");
 
 
 #include <sys/param.h>
@@ -1155,22 +1155,22 @@ ste_stats_update(struct ste_softc *sc)
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 
-	if_statadd_ref(nsr, if_opackets,
+	if_statadd_ref(ifp, nsr, if_opackets,
 	    (u_int) bus_space_read_2(st, sh, STE_FramesTransmittedOK));
 
 	(void) bus_space_read_2(st, sh, STE_FramesReceivedOK);
 
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    (u_int) bus_space_read_1(st, sh, STE_LateCollisions) +
 	    (u_int) bus_space_read_1(st, sh, STE_MultipleColFrames) +
 	    (u_int) bus_space_read_1(st, sh, STE_SingleColFrames));
 
 	(void) bus_space_read_1(st, sh, STE_FramesWDeferredXmt);
 
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    (u_int) bus_space_read_1(st, sh, STE_FramesLostRxErrors));
 
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 	    (u_int) bus_space_read_1(st, sh, STE_FramesWExDeferral) +
 	    (u_int) bus_space_read_1(st, sh, STE_FramesXbortXSColls) +
 	    bus_space_read_1(st, sh, STE_CarrierSenseErrors));

Index: src/sys/dev/pci/if_stge.c
diff -u src/sys/dev/pci/if_stge.c:1.91 src/sys/dev/pci/if_stge.c:1.92
--- src/sys/dev/pci/if_stge.c:1.91	Sat Feb 10 09:30:06 2024
+++ src/sys/dev/pci/if_stge.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_stge.c,v 1.91 2024/02/10 09:30:06 andvar Exp $	*/
+/*	$NetBSD: if_stge.c,v 1.92 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.91 2024/02/10 09:30:06 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.92 2024/06/29 12:11:12 riastradh Exp $");
 
 
 #include <sys/param.h>
@@ -1447,20 +1447,20 @@ stge_stats_update(struct stge_softc *sc)
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    (u_int) CSR_READ_2(sc, STGE_FramesLostRxErrors));
 
 	(void) CSR_READ_4(sc, STGE_OctetXmtdOk);
 
-	if_statadd_ref(nsr, if_opackets,
+	if_statadd_ref(ifp, nsr, if_opackets,
 	    CSR_READ_4(sc, STGE_FramesXmtdOk));
 
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    CSR_READ_4(sc, STGE_LateCollisions) +
 	    CSR_READ_4(sc, STGE_MultiColFrames) +
 	    CSR_READ_4(sc, STGE_SingleColFrames));
 
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 	    (u_int) CSR_READ_2(sc, STGE_FramesAbortXSColls) +
 	    (u_int) CSR_READ_2(sc, STGE_FramesWEXDeferal));
 

Index: src/sys/dev/pci/if_tl.c
diff -u src/sys/dev/pci/if_tl.c:1.125 src/sys/dev/pci/if_tl.c:1.126
--- src/sys/dev/pci/if_tl.c:1.125	Fri Sep  2 23:48:10 2022
+++ src/sys/dev/pci/if_tl.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_tl.c,v 1.125 2022/09/02 23:48:10 thorpej Exp $	*/
+/*	$NetBSD: if_tl.c,v 1.126 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1997 Manuel Bouyer.  All rights reserved.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_tl.c,v 1.125 2022/09/02 23:48:10 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_tl.c,v 1.126 2024/06/29 12:11:12 riastradh Exp $");
 
 #undef TLDEBUG
 #define TL_PRIV_STATS
@@ -1497,7 +1497,7 @@ tl_read_stats(tl_softc_t *sc)
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 
 	reg =  tl_intreg_read(sc, TL_INT_STATS_TX);
-	if_statadd_ref(nsr, if_opackets, reg & 0x00ffffff);
+	if_statadd_ref(ifp, nsr, if_opackets, reg & 0x00ffffff);
 	oerr_underr = reg >> 24;
 
 	reg =  tl_intreg_read(sc, TL_INT_STATS_RX);
@@ -1517,10 +1517,11 @@ tl_read_stats(tl_softc_t *sc)
 	oerr_latecoll = (reg & TL_LERR_LCOLL) >> 8;
 	oerr_carrloss = (reg & TL_LERR_CL) >> 16;
 
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 	   oerr_underr + oerr_exesscoll + oerr_latecoll + oerr_carrloss);
-	if_statadd_ref(nsr, if_collisions, oerr_coll + oerr_multicoll);
-	if_statadd_ref(nsr, if_ierrors, ierr_overr + ierr_code + ierr_crc);
+	if_statadd_ref(ifp, nsr, if_collisions, oerr_coll + oerr_multicoll);
+	if_statadd_ref(ifp, nsr, if_ierrors,
+	    ierr_overr + ierr_code + ierr_crc);
 	IF_STAT_PUTREF(ifp);
 
 	if (ierr_overr)

Index: src/sys/dev/pci/if_txp.c
diff -u src/sys/dev/pci/if_txp.c:1.75 src/sys/dev/pci/if_txp.c:1.76
--- src/sys/dev/pci/if_txp.c:1.75	Sat Feb 10 09:30:06 2024
+++ src/sys/dev/pci/if_txp.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: if_txp.c,v 1.75 2024/02/10 09:30:06 andvar Exp $ */
+/* $NetBSD: if_txp.c,v 1.76 2024/06/29 12:11:12 riastradh Exp $ */
 
 /*
  * Copyright (c) 2001
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.75 2024/02/10 09:30:06 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.76 2024/06/29 12:11:12 riastradh Exp $");
 
 #include "opt_inet.h"
 
@@ -1421,14 +1421,14 @@ txp_tick(void *vsc)
 	ext = (struct txp_ext_desc *)(rsp + 1);
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    ext[3].ext_2 + ext[3].ext_3 + ext[3].ext_4 +
 	    ext[4].ext_1 + ext[4].ext_4);
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 	    ext[0].ext_1 + ext[1].ext_1 + ext[1].ext_4 + ext[2].ext_1);
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    ext[0].ext_2 + ext[0].ext_3 + ext[1].ext_2 + ext[1].ext_3);
-	if_statadd_ref(nsr, if_opackets, rsp->rsp_par2);
+	if_statadd_ref(ifp, nsr, if_opackets, rsp->rsp_par2);
 	IF_STAT_PUTREF(ifp);
 
 out:

Index: src/sys/dev/pci/if_vge.c
diff -u src/sys/dev/pci/if_vge.c:1.87 src/sys/dev/pci/if_vge.c:1.88
--- src/sys/dev/pci/if_vge.c:1.87	Fri Feb  9 22:08:36 2024
+++ src/sys/dev/pci/if_vge.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: if_vge.c,v 1.87 2024/02/09 22:08:36 andvar Exp $ */
+/* $NetBSD: if_vge.c,v 1.88 2024/06/29 12:11:12 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2004
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vge.c,v 1.87 2024/02/09 22:08:36 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vge.c,v 1.88 2024/06/29 12:11:12 riastradh Exp $");
 
 /*
  * VIA Networking Technologies VT612x PCI gigabit ethernet NIC driver.
@@ -1388,11 +1388,11 @@ vge_txeof(struct vge_softc *sc)
 		txs->txs_mbuf = NULL;
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 		if (txstat & (VGE_TDSTS_EXCESSCOLL | VGE_TDSTS_COLL))
-			if_statinc_ref(nsr, if_collisions);
+			if_statinc_ref(ifp, nsr, if_collisions);
 		if (txstat & VGE_TDSTS_TXERR)
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(ifp, nsr, if_oerrors);
 		else
-			if_statinc_ref(nsr, if_opackets);
+			if_statinc_ref(ifp, nsr, if_opackets);
 		IF_STAT_PUTREF(ifp);
 	}
 

Index: src/sys/dev/pci/if_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.111 src/sys/dev/pci/if_vioif.c:1.112
--- src/sys/dev/pci/if_vioif.c:1.111	Thu Mar 21 12:33:21 2024
+++ src/sys/dev/pci/if_vioif.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.111 2024/03/21 12:33:21 isaki Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.112 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.111 2024/03/21 12:33:21 isaki Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.112 2024/06/29 12:11:12 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -845,9 +845,9 @@ vioif_transmit(struct ifnet *ifp, struct
 	}
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-	if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
+	if_statadd_ref(ifp, nsr, if_obytes, m->m_pkthdr.len);
 	if (m->m_flags & M_MCAST)
-		if_statinc_ref(nsr, if_omcasts);
+		if_statinc_ref(ifp, nsr, if_omcasts);
 	IF_STAT_PUTREF(ifp);
 
 	if (mutex_tryenter(&netq->netq_lock)) {

Index: src/sys/dev/pci/if_vmx.c
diff -u src/sys/dev/pci/if_vmx.c:1.15 src/sys/dev/pci/if_vmx.c:1.16
--- src/sys/dev/pci/if_vmx.c:1.15	Wed Mar  6 20:02:24 2024
+++ src/sys/dev/pci/if_vmx.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vmx.c,v 1.15 2024/03/06 20:02:24 andvar Exp $	*/
+/*	$NetBSD: if_vmx.c,v 1.16 2024/06/29 12:11:12 riastradh 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.15 2024/03/06 20:02:24 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.16 2024/06/29 12:11:12 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_if_vmx.h"
@@ -2160,10 +2160,10 @@ vmxnet3_txq_eof(struct vmxnet3_txqueue *
 			    BUS_DMASYNC_POSTWRITE);
 			bus_dmamap_unload(sc->vmx_dmat, txb->vtxb_dmamap);
 
-			if_statinc_ref(nsr, if_opackets);
-			if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
+			if_statinc_ref(ifp, nsr, if_opackets);
+			if_statadd_ref(ifp, nsr, if_obytes, m->m_pkthdr.len);
 			if (m->m_flags & M_MCAST)
-				if_statinc_ref(nsr, if_omcasts);
+				if_statinc_ref(ifp, nsr, if_omcasts);
 
 			m_freem(m);
 			txb->vtxb_m = NULL;
@@ -2338,8 +2338,8 @@ vmxnet3_rxq_input(struct vmxnet3_rxqueue
 		vlan_set_tag(m, rxcd->vtag);
 
 	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_statinc_ref(ifp, nsr, if_ipackets);
+	if_statadd_ref(ifp, nsr, if_ibytes, m->m_pkthdr.len);
 	IF_STAT_PUTREF(ifp);
 
 	if_percpuq_enqueue(ifp->if_percpuq, m);

Index: src/sys/dev/pci/if_vr.c
diff -u src/sys/dev/pci/if_vr.c:1.137 src/sys/dev/pci/if_vr.c:1.138
--- src/sys/dev/pci/if_vr.c:1.137	Sat Sep 24 18:12:43 2022
+++ src/sys/dev/pci/if_vr.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vr.c,v 1.137 2022/09/24 18:12:43 thorpej Exp $	*/
+/*	$NetBSD: if_vr.c,v 1.138 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vr.c,v 1.137 2022/09/24 18:12:43 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vr.c,v 1.138 2024/06/29 12:11:12 riastradh Exp $");
 
 
 
@@ -881,16 +881,16 @@ vr_txeof(struct vr_softc *sc)
 
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 		if (txstat & VR_TXSTAT_ERRSUM) {
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(ifp, nsr, if_oerrors);
 			if (txstat & VR_TXSTAT_DEFER)
-				if_statinc_ref(nsr, if_collisions);
+				if_statinc_ref(ifp, nsr, if_collisions);
 			if (txstat & VR_TXSTAT_LATECOLL)
-				if_statinc_ref(nsr, if_collisions);
+				if_statinc_ref(ifp, nsr, if_collisions);
 		}
 
-		if_statadd_ref(nsr, if_collisions,
+		if_statadd_ref(ifp, nsr, if_collisions,
 		    (txstat & VR_TXSTAT_COLLCNT) >> 3);
-		if_statinc_ref(nsr, if_opackets);
+		if_statinc_ref(ifp, nsr, if_opackets);
 		IF_STAT_PUTREF(ifp);
 	}
 

Index: src/sys/dev/pci/if_vte.c
diff -u src/sys/dev/pci/if_vte.c:1.35 src/sys/dev/pci/if_vte.c:1.36
--- src/sys/dev/pci/if_vte.c:1.35	Sat Sep 24 18:12:43 2022
+++ src/sys/dev/pci/if_vte.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vte.c,v 1.35 2022/09/24 18:12:43 thorpej Exp $	*/
+/*	$NetBSD: if_vte.c,v 1.36 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2011 Manuel Bouyer.  All rights reserved.
@@ -55,7 +55,7 @@
 /* Driver for DM&P Electronics, Inc, Vortex86 RDC R6040 FastEthernet. */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vte.c,v 1.35 2022/09/24 18:12:43 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vte.c,v 1.36 2024/06/29 12:11:12 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -926,25 +926,25 @@ vte_stats_update(struct vte_softc *sc)
 	stat->rx_mcast_frames += (value & 0xFF);
 
 	value = CSR_READ_2(sc, VTE_CNT_MECNT1);
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    (value >> 8) +			/* rx_runts */
 	    (value & 0xFF));			/* rx_crcerrs */
 
 	value = CSR_READ_2(sc, VTE_CNT_MECNT2);
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    (value & 0xFF));			/* rx_long_frames */
 
 	value = CSR_READ_2(sc, VTE_CNT_MECNT3);
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    (value >> 8));			/* rx_fifo_full */
 	stat->rx_desc_unavail += (value & 0xFF);
 
 	/* TX stats. */
-	if_statadd_ref(nsr, if_opackets,
+	if_statadd_ref(ifp, nsr, if_opackets,
 	    CSR_READ_2(sc, VTE_CNT_TX_DONE));	/* tx_frames */
 
 	value = CSR_READ_2(sc, VTE_CNT_MECNT4);
-	if_statadd_ref(nsr, if_oerrors,
+	if_statadd_ref(ifp, nsr, if_oerrors,
 	    (value >> 8) +			/* tx_underruns */
 	    (value & 0xFF));			/* tx_late_colls */
 

Index: src/sys/dev/pci/if_wm.c
diff -u src/sys/dev/pci/if_wm.c:1.798 src/sys/dev/pci/if_wm.c:1.799
--- src/sys/dev/pci/if_wm.c:1.798	Wed Feb 21 12:23:52 2024
+++ src/sys/dev/pci/if_wm.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_wm.c,v 1.798 2024/02/21 12:23:52 msaitoh Exp $	*/
+/*	$NetBSD: if_wm.c,v 1.799 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc.
@@ -82,7 +82,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.798 2024/02/21 12:23:52 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.799 2024/06/29 12:11:12 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_if_wm.h"
@@ -6820,8 +6820,8 @@ wm_update_stats(struct wm_softc *sc)
 		}
 	}
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-	if_statadd_ref(nsr, if_collisions, colc);
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_collisions, colc);
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    crcerrs + algnerrc + symerrc + rxerrc + sec + cexterr + rlec);
 	/*
 	 * WMREG_RNBC is incremented when there are no available buffers in
@@ -6832,7 +6832,7 @@ wm_update_stats(struct wm_softc *sc)
 	 * If you want to know the nubmer of WMREG_RMBC, you should use such as
 	 * own EVCNT instead of if_iqdrops.
 	 */
-	if_statadd_ref(nsr, if_iqdrops, mpc + total_qdrop);
+	if_statadd_ref(ifp, nsr, if_iqdrops, mpc + total_qdrop);
 	IF_STAT_PUTREF(ifp);
 }
 
@@ -8909,9 +8909,9 @@ wm_transmit(struct ifnet *ifp, struct mb
 	}
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-	if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
+	if_statadd_ref(ifp, nsr, if_obytes, m->m_pkthdr.len);
 	if (m->m_flags & M_MCAST)
-		if_statinc_ref(nsr, if_omcasts);
+		if_statinc_ref(ifp, nsr, if_omcasts);
 	IF_STAT_PUTREF(ifp);
 
 	if (mutex_tryenter(txq->txq_lock)) {
@@ -9516,9 +9516,9 @@ wm_nq_transmit(struct ifnet *ifp, struct
 	}
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-	if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
+	if_statadd_ref(ifp, nsr, if_obytes, m->m_pkthdr.len);
 	if (m->m_flags & M_MCAST)
-		if_statinc_ref(nsr, if_omcasts);
+		if_statinc_ref(ifp, nsr, if_omcasts);
 	IF_STAT_PUTREF(ifp);
 
 	/*

Index: src/sys/dev/pci/igc/if_igc.c
diff -u src/sys/dev/pci/igc/if_igc.c:1.14 src/sys/dev/pci/igc/if_igc.c:1.15
--- src/sys/dev/pci/igc/if_igc.c:1.14	Wed Jun 12 06:21:37 2024
+++ src/sys/dev/pci/igc/if_igc.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_igc.c,v 1.14 2024/06/12 06:21:37 rin Exp $	*/
+/*	$NetBSD: if_igc.c,v 1.15 2024/06/29 12:11:12 riastradh Exp $	*/
 /*	$OpenBSD: if_igc.c,v 1.13 2023/04/28 10:18:57 bluhm Exp $	*/
 /*-
  * SPDX-License-Identifier: BSD-2-Clause
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_igc.c,v 1.14 2024/06/12 06:21:37 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_igc.c,v 1.15 2024/06/29 12:11:12 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_if_igc.h"
@@ -1713,7 +1713,7 @@ igc_tx_common_locked(struct ifnet *ifp, 
 			if (caller == IGC_TX_TRANSMIT)
 				IGC_QUEUE_EVENT(q, tx_pcq_drop, 1);
 			m_freem(m);
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(ifp, nsr, if_oerrors);
 			continue;
 		}
 
@@ -1757,9 +1757,9 @@ igc_tx_common_locked(struct ifnet *ifp, 
 
 		bpf_mtap(ifp, m, BPF_D_OUT);
 
-		if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
+		if_statadd_ref(ifp, nsr, if_obytes, m->m_pkthdr.len);
 		if (m->m_flags & M_MCAST)
-			if_statinc_ref(nsr, if_omcasts);
+			if_statinc_ref(ifp, nsr, if_omcasts);
 		IGC_QUEUE_EVENT(q, tx_packets, 1);
 		IGC_QUEUE_EVENT(q, tx_bytes, m->m_pkthdr.len);
 

Index: src/sys/dev/pci/ixgbe/ix_txrx.c
diff -u src/sys/dev/pci/ixgbe/ix_txrx.c:1.116 src/sys/dev/pci/ixgbe/ix_txrx.c:1.117
--- src/sys/dev/pci/ixgbe/ix_txrx.c:1.116	Sat Dec 30 06:16:44 2023
+++ src/sys/dev/pci/ixgbe/ix_txrx.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: ix_txrx.c,v 1.116 2023/12/30 06:16:44 msaitoh Exp $ */
+/* $NetBSD: ix_txrx.c,v 1.117 2024/06/29 12:11:12 riastradh Exp $ */
 
 /******************************************************************************
 
@@ -64,7 +64,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ix_txrx.c,v 1.116 2023/12/30 06:16:44 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ix_txrx.c,v 1.117 2024/06/29 12:11:12 riastradh Exp $");
 
 #include "opt_inet.h"
 #include "opt_inet6.h"
@@ -561,9 +561,9 @@ retry:
 	IXGBE_WRITE_REG(&sc->hw, txr->tail, i);
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-	if_statadd_ref(nsr, if_obytes, m_head->m_pkthdr.len);
+	if_statadd_ref(ifp, nsr, if_obytes, m_head->m_pkthdr.len);
 	if (m_head->m_flags & M_MCAST)
-		if_statinc_ref(nsr, if_omcasts);
+		if_statinc_ref(ifp, nsr, if_omcasts);
 	IF_STAT_PUTREF(ifp);
 
 	/* Mark queue as having work */

Index: src/sys/dev/pci/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.351 src/sys/dev/pci/ixgbe/ixgbe.c:1.352
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.351	Thu May 30 08:55:02 2024
+++ src/sys/dev/pci/ixgbe/ixgbe.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.351 2024/05/30 08:55:02 msaitoh Exp $ */
+/* $NetBSD: ixgbe.c,v 1.352 2024/06/29 12:11:12 riastradh Exp $ */
 
 /******************************************************************************
 
@@ -64,7 +64,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixgbe.c,v 1.351 2024/05/30 08:55:02 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixgbe.c,v 1.352 2024/06/29 12:11:12 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1798,7 +1798,7 @@ ixgbe_update_stats_counters(struct ixgbe
 	 * normal RX counters are prepared in ether_input().
 	 */
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-	if_statadd_ref(nsr, if_iqdrops, total_missed_rx + total_qprdc);
+	if_statadd_ref(ifp, nsr, if_iqdrops, total_missed_rx + total_qprdc);
 
 	/*
 	 * Aggregate following types of errors as RX errors:
@@ -1810,7 +1810,7 @@ ixgbe_update_stats_counters(struct ixgbe
 	 * - oversized packets count,
 	 * - jabber count.
 	 */
-	if_statadd_ref(nsr, if_ierrors,
+	if_statadd_ref(ifp, nsr, if_ierrors,
 	    crcerrs + illerrc + rlec + ruc + rfc + roc + rjc);
 
 	IF_STAT_PUTREF(ifp);

Index: src/sys/dev/sbus/qe.c
diff -u src/sys/dev/sbus/qe.c:1.79 src/sys/dev/sbus/qe.c:1.80
--- src/sys/dev/sbus/qe.c:1.79	Sun Sep 25 18:03:04 2022
+++ src/sys/dev/sbus/qe.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: qe.c,v 1.79 2022/09/25 18:03:04 thorpej Exp $	*/
+/*	$NetBSD: qe.c,v 1.80 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: qe.c,v 1.79 2022/09/25 18:03:04 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: qe.c,v 1.80 2024/06/29 12:11:12 riastradh Exp $");
 
 #define QEDEBUG
 
@@ -702,18 +702,18 @@ qe_eint(struct qe_softc *sc, uint32_t wh
 	if (why & QE_CR_STAT_EDEFER) {
 		printf("%s: excessive tx defers.\n", xname);
 		r |= 1;
-		if_statinc_ref(nsr, if_oerrors);
+		if_statinc_ref(ifp, nsr, if_oerrors);
 	}
 
 	if (why & QE_CR_STAT_CLOSS) {
 		printf("%s: no carrier, link down?\n", xname);
-		if_statinc_ref(nsr, if_oerrors);
+		if_statinc_ref(ifp, nsr, if_oerrors);
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_ERETRIES) {
 		printf("%s: excessive tx retries\n", xname);
-		if_statinc_ref(nsr, if_oerrors);
+		if_statinc_ref(ifp, nsr, if_oerrors);
 		r |= 1;
 		rst = 1;
 	}
@@ -721,14 +721,14 @@ qe_eint(struct qe_softc *sc, uint32_t wh
 
 	if (why & QE_CR_STAT_LCOLL) {
 		printf("%s: late tx transmission\n", xname);
-		if_statinc_ref(nsr, if_oerrors);
+		if_statinc_ref(ifp, nsr, if_oerrors);
 		r |= 1;
 		rst = 1;
 	}
 
 	if (why & QE_CR_STAT_FUFLOW) {
 		printf("%s: tx fifo underflow\n", xname);
-		if_statinc_ref(nsr, if_oerrors);
+		if_statinc_ref(ifp, nsr, if_oerrors);
 		r |= 1;
 		rst = 1;
 	}
@@ -744,8 +744,8 @@ qe_eint(struct qe_softc *sc, uint32_t wh
 	}
 
 	if (why & QE_CR_STAT_TCCOFLOW) {
-		if_statadd_ref(nsr, if_collisions, 256);
-		if_statadd_ref(nsr, if_oerrors, 256);
+		if_statadd_ref(ifp, nsr, if_collisions, 256);
+		if_statadd_ref(ifp, nsr, if_oerrors, 256);
 		r |= 1;
 	}
 
@@ -757,94 +757,94 @@ qe_eint(struct qe_softc *sc, uint32_t wh
 
 	if (why & QE_CR_STAT_TXLERR) {
 		printf("%s: tx late error\n", xname);
-		if_statinc_ref(nsr, if_oerrors);
+		if_statinc_ref(ifp, nsr, if_oerrors);
 		rst = 1;
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_TXPERR) {
 		printf("%s: tx DMA parity error\n", xname);
-		if_statinc_ref(nsr, if_oerrors);
+		if_statinc_ref(ifp, nsr, if_oerrors);
 		rst = 1;
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_TXSERR) {
 		printf("%s: tx DMA sbus error ack\n", xname);
-		if_statinc_ref(nsr, if_oerrors);
+		if_statinc_ref(ifp, nsr, if_oerrors);
 		rst = 1;
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_RCCOFLOW) {
-		if_statadd_ref(nsr, if_collisions, 256);
-		if_statadd_ref(nsr, if_ierrors, 256);
+		if_statadd_ref(ifp, nsr, if_collisions, 256);
+		if_statadd_ref(ifp, nsr, if_ierrors, 256);
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_RUOFLOW) {
-		if_statadd_ref(nsr, if_ierrors, 256);
+		if_statadd_ref(ifp, nsr, if_ierrors, 256);
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_MCOFLOW) {
-		if_statadd_ref(nsr, if_ierrors, 256);
+		if_statadd_ref(ifp, nsr, if_ierrors, 256);
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_RXFOFLOW) {
 		printf("%s: rx fifo overflow\n", xname);
-		if_statinc_ref(nsr, if_ierrors);
+		if_statinc_ref(ifp, nsr, if_ierrors);
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_RLCOLL) {
 		printf("%s: rx late collision\n", xname);
-		if_statinc_ref(nsr, if_ierrors);
-		if_statinc_ref(nsr, if_collisions);
+		if_statinc_ref(ifp, nsr, if_ierrors);
+		if_statinc_ref(ifp, nsr, if_collisions);
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_FCOFLOW) {
-		if_statadd_ref(nsr, if_ierrors, 256);
+		if_statadd_ref(ifp, nsr, if_ierrors, 256);
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_CECOFLOW) {
-		if_statadd_ref(nsr, if_ierrors, 256);
+		if_statadd_ref(ifp, nsr, if_ierrors, 256);
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_RXDROP) {
 		printf("%s: rx packet dropped\n", xname);
-		if_statinc_ref(nsr, if_ierrors);
+		if_statinc_ref(ifp, nsr, if_ierrors);
 		r |= 1;
 	}
 
 	if (why & QE_CR_STAT_RXSMALL) {
 		printf("%s: rx buffer too small\n", xname);
-		if_statinc_ref(nsr, if_ierrors);
+		if_statinc_ref(ifp, nsr, if_ierrors);
 		r |= 1;
 		rst = 1;
 	}
 
 	if (why & QE_CR_STAT_RXLERR) {
 		printf("%s: rx late error\n", xname);
-		if_statinc_ref(nsr, if_ierrors);
+		if_statinc_ref(ifp, nsr, if_ierrors);
 		r |= 1;
 		rst = 1;
 	}
 
 	if (why & QE_CR_STAT_RXPERR) {
 		printf("%s: rx DMA parity error\n", xname);
-		if_statinc_ref(nsr, if_ierrors);
+		if_statinc_ref(ifp, nsr, if_ierrors);
 		r |= 1;
 		rst = 1;
 	}
 
 	if (why & QE_CR_STAT_RXSERR) {
 		printf("%s: rx DMA sbus error ack\n", xname);
-		if_statinc_ref(nsr, if_ierrors);
+		if_statinc_ref(ifp, nsr, if_ierrors);
 		r |= 1;
 		rst = 1;
 	}

Index: src/sys/dev/usb/if_cue.c
diff -u src/sys/dev/usb/if_cue.c:1.108 src/sys/dev/usb/if_cue.c:1.109
--- src/sys/dev/usb/if_cue.c:1.108	Sat Aug 20 14:09:10 2022
+++ src/sys/dev/usb/if_cue.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_cue.c,v 1.108 2022/08/20 14:09:10 riastradh Exp $	*/
+/*	$NetBSD: if_cue.c,v 1.109 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998, 1999, 2000
@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cue.c,v 1.108 2022/08/20 14:09:10 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cue.c,v 1.109 2024/06/29 12:11:12 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -545,13 +545,13 @@ cue_uno_tick(struct usbnet *un)
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 	if (cue_csr_read_2(un, CUE_RX_FRAMEERR))
-		if_statinc_ref(nsr, if_ierrors);
+		if_statinc_ref(ifp, nsr, if_ierrors);
 
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    cue_csr_read_2(un, CUE_TX_SINGLECOLL));
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    cue_csr_read_2(un, CUE_TX_MULTICOLL));
-	if_statadd_ref(nsr, if_collisions,
+	if_statadd_ref(ifp, nsr, if_collisions,
 	    cue_csr_read_2(un, CUE_TX_EXCESSCOLL));
 	IF_STAT_PUTREF(ifp);
 }

Index: src/sys/net/if.c
diff -u src/sys/net/if.c:1.529 src/sys/net/if.c:1.530
--- src/sys/net/if.c:1.529	Fri Feb 24 11:02:45 2023
+++ src/sys/net/if.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if.c,v 1.529 2023/02/24 11:02:45 riastradh Exp $	*/
+/*	$NetBSD: if.c,v 1.530 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2008 The NetBSD Foundation, Inc.
@@ -90,7 +90,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.529 2023/02/24 11:02:45 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.530 2024/06/29 12:11:12 riastradh Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_inet.h"
@@ -3785,9 +3785,9 @@ if_transmit(struct ifnet *ifp, struct mb
 	}
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-	if_statadd_ref(nsr, if_obytes, pktlen);
+	if_statadd_ref(ifp, nsr, if_obytes, pktlen);
 	if (mcast)
-		if_statinc_ref(nsr, if_omcasts);
+		if_statinc_ref(ifp, nsr, if_omcasts);
 	IF_STAT_PUTREF(ifp);
 
 	if ((ifp->if_flags & IFF_OACTIVE) == 0)

Index: src/sys/net/if_bridge.c
diff -u src/sys/net/if_bridge.c:1.189 src/sys/net/if_bridge.c:1.190
--- src/sys/net/if_bridge.c:1.189	Fri Jul 29 07:58:18 2022
+++ src/sys/net/if_bridge.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_bridge.c,v 1.189 2022/07/29 07:58:18 skrll Exp $	*/
+/*	$NetBSD: if_bridge.c,v 1.190 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -80,7 +80,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_bridge.c,v 1.189 2022/07/29 07:58:18 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bridge.c,v 1.190 2024/06/29 12:11:12 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1523,10 +1523,10 @@ bridge_enqueue(struct bridge_softc *sc, 
 	}
 
 	net_stat_ref_t nsr = IF_STAT_GETREF(&sc->sc_if);
-	if_statinc_ref(nsr, if_opackets);
-	if_statadd_ref(nsr, if_obytes, len);
+	if_statinc_ref(&sc->sc_if, nsr, if_opackets);
+	if_statadd_ref(&sc->sc_if, nsr, if_obytes, len);
 	if (mflags & M_MCAST)
-		if_statinc_ref(nsr, if_omcasts);
+		if_statinc_ref(&sc->sc_if, nsr, if_omcasts);
 	IF_STAT_PUTREF(&sc->sc_if);
 }
 

Index: src/sys/net/if_stats.h
diff -u src/sys/net/if_stats.h:1.4 src/sys/net/if_stats.h:1.5
--- src/sys/net/if_stats.h:1.4	Sat Jun 29 02:18:35 2024
+++ src/sys/net/if_stats.h	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_stats.h,v 1.4 2024/06/29 02:18:35 riastradh Exp $	*/
+/*	$NetBSD: if_stats.h,v 1.5 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@ if_statinc(ifnet_t *ifp, if_stat_t x)
 }
 
 static inline void
-if_statinc_ref(net_stat_ref_t nsr, if_stat_t x)
+if_statinc_ref(ifnet_t *ifp, net_stat_ref_t nsr, if_stat_t x)
 {
 	/* XXX sdt probe needs ifp */
 	_NET_STATINC_REF(nsr, x);
@@ -84,7 +84,7 @@ if_statdec(ifnet_t *ifp, if_stat_t x)
 }
 
 static inline void
-if_statdec_ref(net_stat_ref_t nsr, if_stat_t x)
+if_statdec_ref(ifnet_t *ifp, net_stat_ref_t nsr, if_stat_t x)
 {
 	/* XXX sdt probe needs ifp */
 	_NET_STATDEC_REF(nsr, x);
@@ -98,7 +98,7 @@ if_statadd(ifnet_t *ifp, if_stat_t x, ui
 }
 
 static inline void
-if_statadd_ref(net_stat_ref_t nsr, if_stat_t x, uint64_t v)
+if_statadd_ref(ifnet_t *ifp, net_stat_ref_t nsr, if_stat_t x, uint64_t v)
 {
 	/* XXX sdt probe needs ifp */
 	_NET_STATADD_REF(nsr, x, v);
@@ -123,7 +123,7 @@ if_statsub(ifnet_t *ifp, if_stat_t x, ui
 }
 
 static inline void
-if_statsub_ref(net_stat_ref_t nsr, if_stat_t x, uint64_t v)
+if_statsub_ref(ifnet_t *ifp, net_stat_ref_t nsr, if_stat_t x, uint64_t v)
 {
 	/* XXX sdt probe needs ifp */
 	_NET_STATSUB_REF(nsr, x, v);

Index: src/sys/net/if_vlan.c
diff -u src/sys/net/if_vlan.c:1.171 src/sys/net/if_vlan.c:1.172
--- src/sys/net/if_vlan.c:1.171	Thu Nov  2 09:48:29 2023
+++ src/sys/net/if_vlan.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vlan.c,v 1.171 2023/11/02 09:48:29 yamaguchi Exp $	*/
+/*	$NetBSD: if_vlan.c,v 1.172 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
@@ -78,7 +78,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vlan.c,v 1.171 2023/11/02 09:48:29 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vlan.c,v 1.172 2024/06/29 12:11:12 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1424,12 +1424,12 @@ vlan_transmit(struct ifnet *ifp, struct 
 	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 	if (error) {
 		/* mbuf is already freed */
-		if_statinc_ref(nsr, if_oerrors);
+		if_statinc_ref(ifp, nsr, if_oerrors);
 	} else {
-		if_statinc_ref(nsr, if_opackets);
-		if_statadd_ref(nsr, if_obytes, pktlen);
+		if_statinc_ref(ifp, nsr, if_opackets);
+		if_statadd_ref(ifp, nsr, if_obytes, pktlen);
 		if (mcast)
-			if_statinc_ref(nsr, if_omcasts);
+			if_statinc_ref(ifp, nsr, if_omcasts);
 	}
 	IF_STAT_PUTREF(ifp);
 

Index: src/sys/net/agr/if_agr.c
diff -u src/sys/net/agr/if_agr.c:1.56 src/sys/net/agr/if_agr.c:1.57
--- src/sys/net/agr/if_agr.c:1.56	Sun Sep 18 19:24:14 2022
+++ src/sys/net/agr/if_agr.c	Sat Jun 29 12:11:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_agr.c,v 1.56 2022/09/18 19:24:14 thorpej Exp $	*/
+/*	$NetBSD: if_agr.c,v 1.57 2024/06/29 12:11:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c)2005 YAMAMOTO Takashi,
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_agr.c,v 1.56 2022/09/18 19:24:14 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_agr.c,v 1.57 2024/06/29 12:11:12 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -398,13 +398,13 @@ agr_start(struct ifnet *ifp)
 
 			error = agr_xmit_frame(port->port_ifp, m);
 			if (error) {
-				if_statinc_ref(nsr, if_oerrors);
+				if_statinc_ref(ifp, nsr, if_oerrors);
 			} else {
-				if_statinc_ref(nsr, if_opackets);
+				if_statinc_ref(ifp, nsr, if_opackets);
 			}
 		} else {
 			m_freem(m);
-			if_statinc_ref(nsr, if_oerrors);
+			if_statinc_ref(ifp, nsr, if_oerrors);
 		}
 		IF_STAT_PUTREF(ifp);
 	}

Index: src/sys/net/lagg/if_lagg.c
diff -u src/sys/net/lagg/if_lagg.c:1.70 src/sys/net/lagg/if_lagg.c:1.71
--- src/sys/net/lagg/if_lagg.c:1.70	Fri Apr  5 06:48:22 2024
+++ src/sys/net/lagg/if_lagg.c	Sat Jun 29 12:11:13 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_lagg.c,v 1.70 2024/04/05 06:48:22 yamaguchi Exp $	*/
+/*	$NetBSD: if_lagg.c,v 1.71 2024/06/29 12:11:13 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006 Reyk Floeter <r...@openbsd.org>
@@ -20,7 +20,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_lagg.c,v 1.70 2024/04/05 06:48:22 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_lagg.c,v 1.71 2024/06/29 12:11:13 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1082,10 +1082,10 @@ lagg_output(struct lagg_softc *sc, struc
 		if_statinc(ifp, if_oerrors);
 	} else {
 		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
-		if_statinc_ref(nsr, if_opackets);
-		if_statadd_ref(nsr, if_obytes, len);
+		if_statinc_ref(ifp, nsr, if_opackets);
+		if_statadd_ref(ifp, nsr, if_obytes, len);
 		if (mflags & M_MCAST)
-			if_statinc_ref(nsr, if_omcasts);
+			if_statinc_ref(ifp, nsr, if_omcasts);
 		IF_STAT_PUTREF(ifp);
 	}
 }

Reply via email to