• Stanislaw Gruszka's avatar
    rt2x00: fix stop queue · e2288b66
    Stanislaw Gruszka authored
    Since we clear QUEUE_STARTED in rt2x00queue_stop_queue(), following
    call to rt2x00queue_pause_queue() reduce to noop, i.e we do not
    stop queue in mac80211.
    
    To fix that introduce rt2x00queue_pause_queue_nocheck() function,
    which will stop queue in mac80211 directly.
    
    Note that rt2x00_start_queue() explicitly set QUEUE_PAUSED bit.
    
    Note also that reordering operations i.e. first call to
    rt2x00queue_pause_queue() and then clear QUEUE_STARTED bit, will race
    with rt2x00queue_unpause_queue(), so calling ieee80211_stop_queue()
    directly is the only available solution to fix the problem without
    major rework.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarStanislaw Gruszka <stf_xl@wp.pl>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    e2288b66
rt2x00queue.c 35.1 KB