makes sense to me. On 23/03/2011, at 10:28 AM, Alexander Bluhm wrote:
> Hi, > > When the kernel runs out of mbuf clusters, the hme receive ring may > become empty. In that case, the hme driver cannot recover as the > ring is only filled after receiving data. My fix is to fill an > empty receive ring every second. > > ok? > > bluhm > > > Index: dev/ic/hme.c > =================================================================== > RCS file: /data/mirror/openbsd/cvs/src/sys/dev/ic/hme.c,v > retrieving revision 1.61 > diff -u -p -r1.61 hme.c > --- dev/ic/hme.c 15 Oct 2009 17:54:54 -0000 1.61 > +++ dev/ic/hme.c 23 Mar 2011 00:07:51 -0000 > @@ -362,6 +362,13 @@ hme_tick(arg) > bus_space_write_4(t, mac, HME_MACI_EXCNT, 0); > bus_space_write_4(t, mac, HME_MACI_LTCNT, 0); > > + /* > + * If buffer allocation fails, the receive ring may become > + * empty. There is no receive interrupt to recover from that. > + */ > + if (sc->sc_rx_cnt == 0) > + hme_fill_rx_ring(sc); > + > mii_tick(&sc->sc_mii); > splx(s);
