Date: Tue, 2 Nov 2004 17:56:40 +0000 From: Peter Edwards <peadar.edwards@gmail.com> To: "Bjoern A. Zeeb" <bzeeb-lists@lists.zabbadoz.net> Cc: freebsd-amd64@freebsd.org Subject: Re: if_sk patch to get more info from people with problems Message-ID: <34cb7c8404110209563fc01498@mail.gmail.com> In-Reply-To: <Pine.BSF.4.53.0411011123190.90940@e0-0.zab2.int.zabbadoz.net> References: <Pine.BSF.4.53.0411011123190.90940@e0-0.zab2.int.zabbadoz.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Ok, I don't have this hardware, but dumb question: A (very) quick look at the source reveals that buffers are allocated via sk_rxeof()->sk_newbuf()->sk_jalloc() in the interrupt receive function, with the softc lock held in sk_rxeof(). They're freed by the mbuf system via a call to sk_jfree(), but that doesn't hold the SK_LOCK. Is this possibly the source of the corruption problems? What am I missing? This compiles, anyway :-) --- /tmp/if_sk.c Tue Nov 2 17:49:26 2004 +++ if_sk.c Tue Nov 2 17:52:20 2004 @@ -1115,12 +1115,14 @@ if ((i < 0) || (i >= SK_JSLOTS)) panic("sk_jfree: asked to free buffer that we don't manage!"); + SK_LOCK(sc_if->sk_softc); entry = SLIST_FIRST(&sc_if->sk_jinuse_listhead); if (entry == NULL) panic("sk_jfree: buffer not in use!"); entry->slot = i; SLIST_REMOVE_HEAD(&sc_if->sk_jinuse_listhead, jpool_entries); SLIST_INSERT_HEAD(&sc_if->sk_jfree_listhead, entry, jpool_entries); + SK_UNLOCK(sc_if->sk_softc); return; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?34cb7c8404110209563fc01498>