PERFORCE change 64927 for review
Sam Leffler
sam at FreeBSD.org
Thu Nov 11 16:46:21 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=64927
Change 64927 by sam at sam_ebb on 2004/11/12 00:46:02
o add some assertions to track bus_dma failures (need to recover
but for now at least catch them))
o add debug code to watch for whomever is smashing m_next in rx mbufs
Affected files ...
.. //depot/projects/wifi/sys/dev/ath/if_ath.c#19 edit
Differences ...
==== //depot/projects/wifi/sys/dev/ath/if_ath.c#19 (text+ko) ====
@@ -1561,7 +1561,9 @@
struct ath_buf *bf = arg;
KASSERT(nseg <= ATH_MAX_SCATTER,
- ("ath_mbuf_load_cb: too many DMA segments %u", nseg));
+ ("%s: too many DMA segments %u", __func__, nseg));
+ KASSERT(error == 0,
+ ("%s: error %u on bus_dma callback", __func__, error));
bf->bf_mapsize = mapsize;
bf->bf_nseg = nseg;
bcopy(seg, bf->bf_segs, nseg * sizeof (seg[0]));
@@ -1676,6 +1678,7 @@
else
ath_setslottime(sc);
}
+}
/*
* Allocate and setup an initial beacon frame.
@@ -1942,6 +1945,8 @@
ath_load_cb(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
{
bus_addr_t *paddr = (bus_addr_t*) arg;
+ KASSERT(error == 0,
+ ("%s: error %u on bus_dma callback", __func__, error));
*paddr = segs->ds_addr;
}
@@ -2154,9 +2159,11 @@
struct ath_hal *ah = sc->sc_ah;
int error;
struct mbuf *m;
+struct mbuf *morig; /*XXX*/
struct ath_desc *ds;
m = bf->bf_m;
+morig = m; /* XXX */
if (m == NULL) {
/*
* NB: by assigning a page to the rx dma buffer we
@@ -2172,6 +2179,7 @@
sc->sc_stats.ast_rx_nombuf++;
return ENOMEM;
}
+ KASSERT(m->m_next == NULL, ("m_next %p (1)", m->m_next));
bf->bf_m = m;
m->m_pkthdr.len = m->m_len = m->m_ext.ext_size;
@@ -2188,6 +2196,7 @@
KASSERT(bf->bf_nseg == 1, ("%s: multi-segment packet; nseg %u",
__func__, bf->bf_nseg));
}
+ KASSERT(m->m_next == NULL, ("m_next %p morig %p (2)", m->m_next, morig));
bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREREAD);
/*
@@ -2333,6 +2342,10 @@
#endif
if (status == HAL_EINPROGRESS)
break;
+ if (m->m_next != NULL) { /* XXX */
+ if_printf(ifp, "m_next %p, patching!\n", m->m_next);
+ m->m_next = NULL;
+ }
STAILQ_REMOVE_HEAD(&sc->sc_rxbuf, bf_list);
if (ds->ds_rxstat.rs_more) {
/*
@@ -2401,6 +2414,7 @@
goto rx_next;
}
rx_accept:
+ KASSERT(m->m_next == NULL, ("m_next %p (3)", m->m_next));
/*
* Sync and unmap the frame. At this point we're
* committed to passing the mbuf somewhere so clear
More information about the p4-projects
mailing list