Module Name:    src
Committed By:   mlelstv
Date:           Sun Nov 10 11:45:09 UTC 2024

Modified Files:
        src/sys/dev/pci: if_iwn.c

Log Message:
Add MBUFTRACE


To generate a diff of this commit:
cvs rdiff -u -r1.100 -r1.101 src/sys/dev/pci/if_iwn.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/dev/pci/if_iwn.c
diff -u src/sys/dev/pci/if_iwn.c:1.100 src/sys/dev/pci/if_iwn.c:1.101
--- src/sys/dev/pci/if_iwn.c:1.100	Wed Apr  3 01:13:41 2024
+++ src/sys/dev/pci/if_iwn.c	Sun Nov 10 11:45:09 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_iwn.c,v 1.100 2024/04/03 01:13:41 gutteridge Exp $	*/
+/*	$NetBSD: if_iwn.c,v 1.101 2024/11/10 11:45:09 mlelstv Exp $	*/
 /*	$OpenBSD: if_iwn.c,v 1.135 2014/09/10 07:22:09 dcoppa Exp $	*/
 
 /*-
@@ -22,7 +22,7 @@
  * adapters.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_iwn.c,v 1.100 2024/04/03 01:13:41 gutteridge Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_iwn.c,v 1.101 2024/11/10 11:45:09 mlelstv Exp $");
 
 #define IWN_USE_RBUF	/* Use local storage for RX */
 #undef IWN_HWCRYPTO	/* XXX does not even compile yet */
@@ -225,6 +225,7 @@ static void	iwn_free_ict(struct iwn_soft
 static int	iwn_alloc_fwmem(struct iwn_softc *);
 static void	iwn_free_fwmem(struct iwn_softc *);
 static int	iwn_alloc_rx_ring(struct iwn_softc *, struct iwn_rx_ring *);
+static void	iwn_claim_rx_ring(struct iwn_softc *, struct iwn_rx_ring *);
 static void	iwn_reset_rx_ring(struct iwn_softc *, struct iwn_rx_ring *);
 static void	iwn_free_rx_ring(struct iwn_softc *, struct iwn_rx_ring *);
 static int	iwn_alloc_tx_ring(struct iwn_softc *, struct iwn_tx_ring *,
@@ -661,6 +662,10 @@ iwn_attach(device_t parent __unused, dev
 
 	if_initialize(ifp);
 	ieee80211_ifattach(ic);
+
+	/* MBUFTRACE */
+	iwn_claim_rx_ring(sc, &sc->rxq);
+
 	/* Use common softint-based if_input */
 	ifp->if_percpuq = if_percpuq_create(ifp);
 	if_register(ifp);
@@ -1411,6 +1416,20 @@ fail:	iwn_free_rx_ring(sc, ring);
 }
 
 static void
+iwn_claim_rx_ring(struct iwn_softc *sc, struct iwn_rx_ring *ring)
+{
+	int i;
+
+	for (i = 0; i < IWN_RX_RING_COUNT; i++) {
+		struct iwn_rx_data *data = &ring->data[i];
+	
+		if (data->m != NULL) {
+			MCLAIM(data->m, &sc->sc_ec.ec_rx_mowner);
+		}
+	}
+}
+
+static void
 iwn_reset_rx_ring(struct iwn_softc *sc, struct iwn_rx_ring *ring)
 {
 	int ntries;
@@ -2165,6 +2184,7 @@ iwn_rx_done(struct iwn_softc *sc, struct
 		if_statinc(ifp, if_ierrors);
 		return;
 	}
+	MCLAIM(m1, &sc->sc_ec.ec_rx_mowner);
 	bus_dmamap_unload(sc->sc_dmat, data->map);
 
 	error = bus_dmamap_load(sc->sc_dmat, data->map, mtod(m1, void *),
@@ -3177,6 +3197,7 @@ iwn_tx(struct iwn_softc *sc, struct mbuf
 			m_freem(m);
 			return ENOBUFS;
 		}
+		MCLAIM(m1, &sc->sc_ec.ec_tx_mowner);
 		if (m->m_pkthdr.len > MHLEN) {
 			MCLGET(m1, M_DONTWAIT);
 			if (!(m1->m_flags & M_EXT)) {
@@ -3437,6 +3458,7 @@ iwn_cmd(struct iwn_softc *sc, int code, 
 		MGETHDR(m, M_DONTWAIT, MT_DATA);
 		if (m == NULL)
 			return ENOMEM;
+		MCLAIM(m, &sc->sc_ec.ec_tx_mowner);
 		if (totlen > MHLEN) {
 			MCLGET(m, M_DONTWAIT);
 			if (!(m->m_flags & M_EXT)) {

Reply via email to