From owner-p4-projects@FreeBSD.ORG Fri Nov 12 00:46:20 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5CF4216A4D1; Fri, 12 Nov 2004 00:46:20 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 3785316A4CE for ; Fri, 12 Nov 2004 00:46:20 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0E8C543D45 for ; Fri, 12 Nov 2004 00:46:20 +0000 (GMT) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id iAC0kJFZ053134 for ; Fri, 12 Nov 2004 00:46:19 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id iAC0kJ09053131 for perforce@freebsd.org; Fri, 12 Nov 2004 00:46:19 GMT (envelope-from sam@freebsd.org) Date: Fri, 12 Nov 2004 00:46:19 GMT Message-Id: <200411120046.iAC0kJ09053131@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 64927 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Nov 2004 00:46:21 -0000 http://perforce.freebsd.org/chv.cgi?CH=64927 Change 64927 by sam@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