mac80211: decouple # of netdev queues from HW queues
authorJohannes Berg <johannes.berg@intel.com>
Wed, 28 Mar 2012 09:04:26 +0000 (11:04 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 10 Apr 2012 18:54:10 +0000 (14:54 -0400)
When we get more hardware queues, we'll still want
to only have netdev queues per AC, so set it up in
that way. If the hardware doesn't support QoS (by
not supporting at least 4 queues) the netdevs get
a single queue only (this is no change in behavior
as there are no drivers with 2 or 3 queues today.)

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/iface.c
net/mac80211/wme.c

index 401c01f0731e996e5c22435f0066b53c97529559..efa9409865acbbad2a65848d707a6e51141137ab 100644 (file)
@@ -1133,11 +1133,15 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
        struct net_device *ndev;
        struct ieee80211_sub_if_data *sdata = NULL;
        int ret, i;
+       int txqs = 1;
 
        ASSERT_RTNL();
 
+       if (local->hw.queues >= IEEE80211_NUM_ACS)
+               txqs = IEEE80211_NUM_ACS;
+
        ndev = alloc_netdev_mqs(sizeof(*sdata) + local->hw.vif_data_size,
-                               name, ieee80211_if_setup, local->hw.queues, 1);
+                               name, ieee80211_if_setup, txqs, 1);
        if (!ndev)
                return -ENOMEM;
        dev_net_set(ndev, wiphy_net(local->hw.wiphy));
index b3d4ee044e7cce0feb4100249056cf783f7b1a86..16b48395a468ff0594c60673e89da39acc5404d6 100644 (file)
@@ -108,7 +108,7 @@ u16 ieee80211_select_queue(struct ieee80211_sub_if_data *sdata,
 
        if (local->hw.queues < 4 || skb->len < 6) {
                skb->priority = 0; /* required for correct WPA/11i MIC */
-               return min_t(u16, local->hw.queues - 1, IEEE80211_AC_BE);
+               return 0;
        }
 
        rcu_read_lock();