linux/drivers/net/wireless/intel
Johannes Berg 42116705a7 iwlwifi: mvm: fix race in queue notification wait
Initially in this code, the race didn't matter since it didn't
do anything. Latest with the commit I marked this as fixing it
started to matter as something got done here that needed other
data that got freed as soon as the queue notification wait was
returning.

In the scenario we saw, apparently the IWL_MVM_RXQ_NOTIF_DEL_BA
event was sent to all queues, but processing the last event we
returned from iwl_mvm_sync_rx_queues_internal() and then from
iwl_mvm_free_reorder() and continued some processing before
wl_mvm_del_ba() was even invoked on the other CPU. Thus, when
the latter finally ran, it found that mvm->baid_map[baid] was
no longer valid.

Correct the race by moving the counter decrement and wake_up()
to be done only after all the per-event processing completed.
Note that in the commit I marked as being fixed the wake_up()
didn't exist yet (and the code was otherwise problematic) but
this particular problem already existed in a way.

Fixes: b915c10174 ("iwlwifi: mvm: add reorder buffer per queue")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
2018-05-30 09:57:23 +03:00
..
ipw2x00 ipw2200: fix spelling mistake: "functionalitis" -> "functionalities" 2018-05-04 15:37:37 +03:00
iwlegacy wireless: Use octal not symbolic permissions 2018-03-27 11:01:13 +03:00
iwlwifi iwlwifi: mvm: fix race in queue notification wait 2018-05-30 09:57:23 +03:00
Kconfig net/wireless: fix spaces and grammar copy/paste in vendor Kconfig help text 2018-03-13 18:52:25 +02:00
Makefile