• J
    iwlwifi: mvm: fix race in queue notification wait · 42116705
    Johannes Berg 提交于
    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: b915c101 ("iwlwifi: mvm: add reorder buffer per queue")
    Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
    Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
    42116705
rxmq.c 34.6 KB