HomeFreeBSD

Convert if_rsu to use a deferred transmit task rather than using rsu_start()

Description

Convert if_rsu to use a deferred transmit task rather than using rsu_start()
to do it directly.

Ensure that we re-queue starting transmit upon TX completion.

This solves two issues:

  • It stops tx stalls - before this, if the transmit path filled the mbuf queue then it'd never start another transmit.
  • It enforces ordering - this is very required for 802.11n which requires frames to be transmitted in the order they're queued. Since everything remotely involved in USB has an unlock/thing/relock pattern with that mutex, the only way to guarantee TX ordering is to 100% defer it into a separate thread.

This now survives an iperf test and gets a reliable 30mbit/sec.

Details

Provenance
adrianAuthored on
Parents
rS288051: Drain the mbuf queue upon rsu_stop().
Branches
Unknown
Tags
Unknown