if_sk patch to get more info from people with problems
Peter Edwards
peadar.edwards at gmail.com
Sun Jul 3 00:48:23 GMT 2005
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;
}
_______________________________________________
freebsd-current at freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
More information about the freebsd-amd64
mailing list