In article <local.mail.freebsd-current/[EMAIL PROTECTED]> you
write:
>The fxp driver is broken in a lot of places.
>
>For example, in fxp_intr():
>
> for (txp = sc->cbl_first; sc->tx_queued &&
> (txp->cb_status & FXP_CB_STATUS_C) != 0;
> txp = txp->next) {
> if (txp->mb_head != NULL) {
> m_freem(txp->mb_head);
> txp->mb_head = NULL;
> }
> sc->tx_queued--;
> }
>
>...notice the "for" loop doesn't check to see if "txp = txp->next"
>ends up being NULL? You can get this, if you put your system
>under extreme load.
I would be quite interested in knowing just how you manage
to accomplish that, given that all the transmit control buffers
are arranged in a circular linked list:
fxp_init(void *xsc)
{
...
for (i = 0; i < FXP_NTXCB; i++) {
...
txp[i].next = &txp[(i + 1) & FXP_TXCB_MASK];
}
I would suggest actually examining the rest of the code to see
how it works before making erroneous proclamations based on the
myopic examination of a single statement.
--
Jonathan
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message