Skip to content

Commit

Permalink
wifi: rt2x00: Fix "Error - Attempt to send packet over invalid queue 2"
Browse files Browse the repository at this point in the history
Even though ieee80211_hw.queues is set to 2, the ralink rt2x00 driver
is seeing tx skbs submitted to it with the queue-id set to 2 / set to
IEEE80211_AC_BE on a rt2500 card when associating with an access-point.

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.

This patch works around this by mapping QID_AC_BE and QID_AC_BK
to QID_AC_VI when there are only 2 tx_queues.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
The net/mac80211 code has checks for local->hw.queues < IEEE80211_NUM_ACS
in various places and returns queue-id 0 when this condition is true.

So it looks like the rt2x00 driver receiving a queue-id of 2 /
IEEE80211_AC_BE might actually be a bug in the mac80211 core code,
I will send out a separate email about this.
  • Loading branch information
jwrdegoede committed Sep 10, 2022
1 parent 1e77429 commit 2b4255b
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion drivers/net/wireless/ralink/rt2x00/rt2x00.h
Original file line number Diff line number Diff line change
Expand Up @@ -1309,8 +1309,11 @@ void rt2x00queue_unmap_skb(struct queue_entry *entry);
*/
static inline struct data_queue *
rt2x00queue_get_tx_queue(struct rt2x00_dev *rt2x00dev,
const enum data_queue_qid queue)
enum data_queue_qid queue)
{
if (queue >= rt2x00dev->ops->tx_queues && queue < IEEE80211_NUM_ACS)
queue = rt2x00dev->ops->tx_queues - 1;

if (queue < rt2x00dev->ops->tx_queues && rt2x00dev->tx)
return &rt2x00dev->tx[queue];

Expand Down

0 comments on commit 2b4255b

Please sign in to comment.