From 3fe0ff5e6c57f42cb5b0400f2ce2ba42d4e251f7 Mon Sep 17 00:00:00 2001 From: raj Date: Tue, 17 Feb 2009 15:39:16 +0000 Subject: Handle mbuf exhaustion scenario in tsec(4). Without this fix the system would hang under heavy networking load. Submitted by: Leon Theunissen leon ! parsec dot co dot za --- sys/dev/tsec/if_tsec.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'sys') diff --git a/sys/dev/tsec/if_tsec.c b/sys/dev/tsec/if_tsec.c index bde6aed..d6d5edd 100644 --- a/sys/dev/tsec/if_tsec.c +++ b/sys/dev/tsec/if_tsec.c @@ -1332,7 +1332,12 @@ tsec_receive_intr_locked(struct tsec_softc *sc, int count) if (tsec_new_rxbuf(sc->tsec_rx_mtag, rx_data[i].map, &rx_data[i].mbuf, &rx_data[i].paddr)) { ifp->if_ierrors++; - continue; + /* + * We ran out of mbufs; didn't consume current + * descriptor and have to return it to the queue. + */ + TSEC_BACK_CUR_RX_DESC(sc); + break; } /* Attach new buffer to descriptor and clear flags */ -- cgit v1.1