]> git.baikalelectronics.ru Git - kernel.git/commit
mac80211: fix CSA tx queue stopping
authorMichal Kazior <michal.kazior@tieto.com>
Wed, 9 Apr 2014 13:10:59 +0000 (15:10 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 6 May 2014 13:10:00 +0000 (15:10 +0200)
commit950cadfbd95804faf6f8d40c2ca63364635888df
treeef9010f083ae04406516c0e8cac87d0ebcd23546
parent3b5b3346c2a8a0bcb20afd67585b0138ccd86136
mac80211: fix CSA tx queue stopping

It was possible for tx queues to be stuck stopped
if AP CSA finalization failed. In that case
neither stop_ap nor do_stop woke the queues up.
This means it was impossible to perform tx at all
until driver was reloaded or a successful CSA was
performed later.

It was possible to solve this in a simpler manner
however this is more robust and future proof
(having multi-vif CSA in mind).

New sdata->csa_block_tx is introduced to keep
track of which interfaces requested tx to be
blocked for CSA. This is required because mac80211
stops all tx queues for that purpose. This means
queues must be awoken only when last tx-blocking
CSA interface is finished.

It is still possible to have tx queues stopped
after CSA failure but as soon as offending
interfaces are stopped from userspace (stop_ap or
ifdown) tx queues are woken up properly.

Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h
net/mac80211/cfg.c
net/mac80211/ieee80211_i.h
net/mac80211/iface.c
net/mac80211/mlme.c