Hi, can someone explain how TX flow control in d80211 is supposed to work? I failed to understand the full design so far.
What I (think to) understand is that a low-level drivers call ieee80211_stop_queue() if they run out of buffers. That flips a per-queue bit (IEEE80211_LINK_STATE_XOFF), prevents that any further frame is passed to the low-level TX routine, and can cause that up to *one* packet per queue is stored in ieee80211_local::pending_packets[queue]. But it looks to me like nothing prevents ieee80211_tx() being invoked even in case that there is already some stuff in that single-packet storage. That in turn triggers WARN_ONs in ieee80211_tx() under high load for me (with rt2500usb). And it should also cause orphaned skbs because the storage is overwritten in that case. Either I'm blind or something is fishy... Jan
signature.asc
Description: OpenPGP digital signature