• Hans de Goede's avatar
    wifi: mac80211: fix regression with non-QoS drivers · d873697e
    Hans de Goede authored
    Commit 10cb8e61 ("mac80211: enable QoS support for nl80211 ctrl port")
    changed ieee80211_tx_control_port() to aways call
    __ieee80211_select_queue() without checking local->hw.queues.
    
    __ieee80211_select_queue() returns a queue-id between 0 and 3, which means
    that now ieee80211_tx_control_port() may end up setting the queue-mapping
    for a skb to a value higher then local->hw.queues if local->hw.queues
    is less then 4.
    
    Specifically this is a problem for ralink rt2500-pci cards where
    local->hw.queues is 2. There this causes rt2x00queue_get_tx_queue() to
    return NULL and the following error to be logged: "ieee80211 phy0:
    rt2x00mac_tx: Error - Attempt to send packet over invalid queue 2",
    after which association with the AP fails.
    
    Other callers of __ieee80211_select_queue() skip calling it when
    local->hw.queues < IEEE80211_NUM_ACS, add the same check to
    ieee80211_tx_control_port(). This fixes ralink rt2500-pci and
    similar cards when less then 4 tx-queues no longer working.
    
    Fixes: 10cb8e61 ("mac80211: enable QoS support for nl80211 ctrl port")
    Cc: Markus Theil <markus.theil@tu-ilmenau.de>
    Suggested-by: default avatarStanislaw Gruszka <stf_xl@wp.pl>
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20220918192052.443529-1-hdegoede@redhat.comSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    d873697e
tx.c 158 KB