On 24 December 2012 17:01, Ryan Stone <ryst...@gmail.com> wrote: > I don't believe that this is fixed in later versions of the driver. The > problem is that when the interface loses link the transmit queue can fill > up. Once that happens the driver never gets any more calls from the network > stack to make it send packets. Pinging the interface fixes it because the > driver processes rx.and tx from the same context, so when it receives a > packet it starts transmitting again. > > The patch that I sent fixes the problem by forcing the driver to process > the tx queue when ever links goes from down to up.
This is a cute fix, and I've noticed similar issues in net80211. In net80211, the stack currently calls if_start() to re-attempt frame transmission during a VAP state transition to RUN. This has similar issues (ie, it assumes that if_start() DTRT; it assumes OACTIVE has been cleared, etc.) I think we may need another if_* method which specifically attempts to service the TX queue again; versus just waiting for if_transmit() to make some progress. Adrian _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"