• A
    mac80211: flush hw_roc_start work before cancelling the ROC · 6e46d8ce
    Avraham Stern 提交于
    When HW ROC is supported it is possible that after the HW notified
    that the ROC has started, the ROC was cancelled and another ROC was
    added while the hw_roc_start worker is waiting on the mutex (since
    cancelling the ROC and adding another one also holds the same mutex).
    As a result, the hw_roc_start worker will continue to run after the
    new ROC is added but before it is actually started by the HW.
    This may result in notifying userspace that the ROC has started before
    it actually does, or in case of management tx ROC, in an attempt to
    tx while not on the right channel.
    
    In addition, when the driver will notify mac80211 that the second ROC
    has started, mac80211 will warn that this ROC has already been
    notified.
    
    Fix this by flushing the hw_roc_start work before cancelling an ROC.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: NAvraham Stern <avraham.stern@intel.com>
    Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
    Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
    6e46d8ce
offchannel.c 26.3 KB