3COM ep0 pccard device broken in current.

M. Warner Losh imp at bsdimp.com
Fri Jul 4 06:04:50 PDT 2003


In message: <200307041246.h64Cku8E042346 at grimreaper.grondar.org>
            Mark Murray <mark at grondar.org> writes:
: "M. Warner Losh" writes:
: > Have you gotten all of the recent changes to current wrt ep0?  It was
: > broken by my making cbbintr mpsafe.  Well, it was broken a long time
: > ago, my change just opened a race that used to be won, but now is
: > lost.
: 
: Yup. I believe so, but please confirm where the change was to be sure?

There were two changes.  One is in pccbb.c that makes things a MPSAFE
interrupt.  You could revert to version 1.175 of pccbb.c.

For ep.c, you need the following or newer

Revision 1.115 / (download) - annotate - [select for diffs], Thu Jun
26 13:27:44 2003 UTC (7 days, 23 hours ago) by mux
Changes since 1.114: +5 -7 lines

Fix a race condition that was introduced since pccbb interrupts are
flag'ed INTR_MPSAFE.  In ep_if_start(), use the IF_DEQUEUE macro to
grab the next mbuf to send, and use IF_PREPEND if the card is busy
and we actually can't handle it right now.

The old code was first getting the mbuf by taking it from the queue
without using the macros, thus without locking, and without removing
it from the queue either.  It was later assuming that IF_DEQUEUE would
give him this same mbuf.

Tested by:	mich


More information about the freebsd-current mailing list