mac80211: check IEEE80211_HW_QUEUE_CONTROL in ieee80211_check_queues()
authorLuciano Coelho <coelho@ti.com>
Thu, 12 Apr 2012 13:09:49 +0000 (16:09 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 16 Apr 2012 18:16:58 +0000 (14:16 -0400)
Commit 3a25a8c8 (mac80211: add improved HW queue control) introduced a
bug when running in AP mode without the IEEE80211_HW_QUEUE_CONTROL
flag set.  The ieee80211_check_queues() function always returns
-EINVAL, preventing AP mode from starting.  To fix this, check whether
this flag is set before checking if cab_queue is set properly.

Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/iface.c

index 6e85faed053d83afa375efe544ea96083be7ed05..23d1da376eb39f108296be63cd93de7b16d509fa 100644 (file)
@@ -163,7 +163,8 @@ static int ieee80211_check_queues(struct ieee80211_sub_if_data *sdata)
                        return -EINVAL;
        }
 
-       if (sdata->vif.type != NL80211_IFTYPE_AP) {
+       if ((sdata->vif.type != NL80211_IFTYPE_AP) ||
+           !(sdata->local->hw.flags & IEEE80211_HW_QUEUE_CONTROL)) {
                sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE;
                return 0;
        }