mac80211: backport a fix for single-queue drivers (fixes #11534)
authorFelix Fietkau <nbd@openwrt.org>
Sat, 26 May 2012 20:15:28 +0000 (20:15 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sat, 26 May 2012 20:15:28 +0000 (20:15 +0000)
SVN-Revision: 31862

package/mac80211/patches/300-pending_work.patch
package/mac80211/patches/513-mac80211_reduce_txqueuelen.patch

index eb982d53b1011ca746051997ffa1daa972baddcc..fab677f2f93b930863bb396b16adf15d822d5437 100644 (file)
                            TEST(TDLS_PEER_AUTH), TEST(4ADDR_EVENT),
 --- a/net/mac80211/iface.c
 +++ b/net/mac80211/iface.c
-@@ -282,7 +282,6 @@ static int ieee80211_do_open(struct net_
+@@ -206,8 +206,10 @@ static void ieee80211_set_default_queues
+       for (i = 0; i < IEEE80211_NUM_ACS; i++) {
+               if (local->hw.flags & IEEE80211_HW_QUEUE_CONTROL)
+                       sdata->vif.hw_queue[i] = IEEE80211_INVAL_HW_QUEUE;
+-              else
++              else if (local->hw.queues >= IEEE80211_NUM_ACS)
+                       sdata->vif.hw_queue[i] = i;
++              else
++                      sdata->vif.hw_queue[i] = 0;
+       }
+       sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE;
+ }
+@@ -282,7 +284,6 @@ static int ieee80211_do_open(struct net_
  {
        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
        struct ieee80211_local *local = sdata->local;
        u32 changed = 0;
        int res;
        u32 hw_reconf_flags = 0;
-@@ -428,28 +427,6 @@ static int ieee80211_do_open(struct net_
+@@ -428,28 +429,6 @@ static int ieee80211_do_open(struct net_
  
        set_bit(SDATA_STATE_RUNNING, &sdata->state);
  
        /*
         * set_multicast_list will be invoked by the networking core
         * which will check whether any increments here were done in
-@@ -846,6 +823,72 @@ static void ieee80211_if_setup(struct ne
+@@ -846,6 +825,72 @@ static void ieee80211_if_setup(struct ne
        dev->destructor = free_netdev;
  }
  
  static void ieee80211_iface_work(struct work_struct *work)
  {
        struct ieee80211_sub_if_data *sdata =
-@@ -950,6 +993,9 @@ static void ieee80211_iface_work(struct 
+@@ -950,6 +995,9 @@ static void ieee80211_iface_work(struct 
                                break;
                        ieee80211_mesh_rx_queued_mgmt(sdata, skb);
                        break;
index a1405a8aa6827975471a1820c1eeceecf5b68d0e..0dbe6bf36ebc3033926febaeede3c4ba67ba3f15 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/mac80211/iface.c
 +++ b/net/mac80211/iface.c
-@@ -813,6 +813,7 @@ static const struct net_device_ops ieee8
+@@ -815,6 +815,7 @@ static const struct net_device_ops ieee8
  static void ieee80211_if_setup(struct net_device *dev)
  {
        ether_setup(dev);