fwiw, I'm facing the same kinds of cleanup problems with my port of (oct 2015) ath10k to freebsd. The oct 2015 ath10k tree doesn't have the firmware per-txq/tid/peer feedback stuff in it, so this hasn't yet bitten me, but there rest of the races have - mostly surrounding handling pending TX frames when a VAP is deleted (vdev/interface in ath10k/mac80211 language) and if any TX frames were stuck. Stuck TX frames happens more often than I'd like because of how earlier firmware required peer entries to first appear in the hardware. Maybe we need some kind of lifecycle checkpoint for things like peer addition/removal (for the txq issues ben had before) and the ability to ask the firmware to stop/flush HTT TX and re-start it. That way we can cleanly add/remove interfaces at any point without worrying about any dangling frames in the transmit queue waiting for completion. -adrian