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 _at__at_ -1115,12 +1115,14 _at__at_ 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; }Received on Tue Nov 02 2004 - 16:56:45 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:20 UTC