vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| If you have an sk(4) NIC then please try out this diff.. ----- Forwarded message from Brad <brad@comstyle.com> ----- X-Original-To: brad@localhost Delivered-To: brad@localhost.comstyle.com X-Original-To: brad@comstyle.com Delivered-To: brad@comstyle.com Date: Sun, 10 Jul 2005 21:24:51 -0400 From: Brad <brad@comstyle.com> To: hackers@openbsd.org Subject: Re: sk In-Reply-To: <Pine.BSO.4.61.0504140232310.133@af.pbqrshfvbavf.p bz> User-Agent: Mutt/1.5.6i X-Loop: hackers@openbsd.org Precedence: list On Thu, Apr 14, 2005 at 02:36:33AM -0400, Ted Unangst wrote: > run ifconfig sk0 down, ifconfig sk0 up about 20 times. does M_DEVBUF get > out of hand? > > sk_init_tx_ring definitely has problems. i can't find where the txmap > list is ever freed. Ya, this is pretty bad.. devbuf 1053 249K 252K 39322K 1899 0 0 16,32,64,128,256,512,1024,2048,4096,8192,16384,327 68 around 10 down/up's devbuf 11293 2889K 2889K 39322K 12354 0 0 16,32,64,128,256,512,1024,2048,4096,8192,16384,327 68 This seems to do the trick. Index: if_sk.c ================================================== ================= RCS file: /cvs/src/sys/dev/pci/if_sk.c,v retrieving revision 1.69 diff -u -p -r1.69 if_sk.c --- if_sk.c 2 Jul 2005 23:10:11 -0000 1.69 +++ if_sk.c 11 Jul 2005 01:16:23 -0000 @@ -2703,6 +2703,7 @@ sk_stop(struct sk_if_softc *sc_if) { struct sk_softc *sc = sc_if->sk_softc; struct ifnet *ifp = &sc_if->arpcom.ac_if; + struct sk_txmap_entry *dma; int i; DPRINTFN(2, ("sk_stop\n")); @@ -2773,7 +2774,16 @@ sk_stop(struct sk_if_softc *sc_if) if (sc_if->sk_cdata.sk_tx_chain[i].sk_mbuf != NULL) { m_freem(sc_if->sk_cdata.sk_tx_chain[i].sk_mbuf); sc_if->sk_cdata.sk_tx_chain[i].sk_mbuf = NULL; + SIMPLEQ_INSERT_HEAD(&sc_if->sk_txmap_head, + sc_if->sk_cdata.sk_tx_map[i], link); + sc_if->sk_cdata.sk_tx_map[i] = 0; } + } + + while ((dma = SIMPLEQ_FIRST(&sc_if->sk_txmap_head))) { + SIMPLEQ_REMOVE_HEAD(&sc_if->sk_txmap_head, link); + bus_dmamap_destroy(sc->sc_dmatag, dma->dmamap); + free(dma, M_DEVBUF); } } ----- End forwarded message ----- |