Date: Fri, 10 Mar 2006 07:57:39 -0500 From: John Baldwin <jhb@freebsd.org> To: Warner Losh <imp@freebsd.org> Cc: Perforce Change Reviews <perforce@freebsd.org> Subject: Re: PERFORCE change 93095 for review Message-ID: <200603100757.40459.jhb@freebsd.org> In-Reply-To: <200603100640.k2A6e2fM072334@repoman.freebsd.org> References: <200603100640.k2A6e2fM072334@repoman.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 10 March 2006 01:40 am, Warner Losh wrote: > http://perforce.freebsd.org/chv.cgi?CH=3D93095 > > Change 93095 by imp@imp_hammer on 2006/03/10 06:39:29 > > Try to use m_devget() as suggested by jhb and done in the de > driver. > > Affected files ... > > .. //depot/projects/arm/src/sys/arm/at91/if_ate.c#38 edit > > Differences ... > > =3D=3D=3D=3D //depot/projects/arm/src/sys/arm/at91/if_ate.c#38 (text+ko) = =3D=3D=3D=3D > > @@ -24,10 +24,8 @@ > > /* TODO: (in no order) > * > - * 5) Setup RX buffers in ateinit_locked > * 8) Need to sync busdma goo in atestop > * 9) atestop should maybe free the mbufs? > - * 10) On Rx, how do we get a new mbuf? > * > * 1) detach > * 2) Free dma setup > @@ -657,7 +655,8 @@ > mb->m_len =3D rx_stat & ETH_LEN_MASK; > mb->m_pkthdr.len =3D mb->m_len; > mb->m_pkthdr.rcvif =3D sc->ifp; > - tmp_mbuf =3D m_copyup(mb, ETHER_HDR_LEN, 2); > + tmp_mbuf =3D m_devget(mtod(md, caddr_t), mb->m_len, > + ETHER_ALIGN, sc->ifp, NULL); > /* > * For the last buffer, set the wrap bit so > * the controller restarts from the first Note that you can drop all the mb-> lines above, just pass in rx_stat &=20 ETH_LEN_MASK to m_devget() where you pass mb->m_len. It will setup the pkthdr on the new mbuf. You probably want to bump your iferrors count if m_devget fails too. > @@ -671,7 +670,8 @@ > BUS_DMASYNC_PREREAD); > bus_dmamap_sync(sc->rx_desc_tag, sc->rx_desc_map, > BUS_DMASYNC_PREWRITE); > - (*sc->ifp->if_input)(sc->ifp, tmp_mbuf); > + if (tmp_mbuf !=3D NULL) > + (*sc->ifp->if_input)(sc->ifp, tmp_mbuf); > } Not sure if you have locking for this driver yet, but if you do, don't forget to drop your driver lock around the call to if_input. =2D-=20 John Baldwin <jhb@FreeBSD.org> =A0<>< =A0http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" =A0=3D =A0http://www.FreeBSD.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200603100757.40459.jhb>