Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
authorJohn W. Linville <linville@tuxdriver.com>
Wed, 12 Jun 2013 18:35:23 +0000 (14:35 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 12 Jun 2013 18:35:23 +0000 (14:35 -0400)
Conflicts:
drivers/net/wireless/ath/ath9k/Kconfig
net/mac80211/iface.c

1  2 
drivers/net/wireless/ath/ath9k/Kconfig
drivers/net/wireless/ath/ath9k/ar9003_phy.c
drivers/net/wireless/ath/ath9k/ath9k.h
drivers/net/wireless/ath/ath9k/debug.c
drivers/net/wireless/ath/ath9k/debug.h
drivers/net/wireless/ath/ath9k/hw.c
drivers/net/wireless/ath/ath9k/init.c
drivers/net/wireless/ath/ath9k/mac.c
drivers/net/wireless/ath/ath9k/main.c
net/mac80211/iface.c

index ec33c8007b29a123e2d12d1cee1038d5b4c75409,3c2cbc9d6295df0e16afce4a4d541bde93f9164a..760ab3fe09e2f753c360e1b1a149700ef5beca04
@@@ -84,13 -84,25 +84,17 @@@ config ATH9K_DFS_CERTIFIE
          developed. At this point enabling this option won't do anything
          except increase code size.
  
- config ATH9K_RATE_CONTROL
 -config ATH9K_MAC_DEBUG
 -      bool "Atheros MAC statistics"
 -      depends on ATH9K_DEBUGFS
 -      default y
 -      ---help---
 -        This option enables collection of statistics for Rx/Tx status
 -        data and some other MAC related statistics
 -
+ config ATH9K_LEGACY_RATE_CONTROL
        bool "Atheros ath9k rate control"
        depends on ATH9K
-       default y
+       default n
        ---help---
          Say Y, if you want to use the ath9k specific rate control
-         module instead of minstrel_ht.
+         module instead of minstrel_ht. Be warned that there are various
+         issues with the ath9k RC and minstrel is a more robust algorithm.
+         Note that even if this option is selected, "ath9k_rate_control"
+         has to be passed to mac80211 using the module parameter,
+         ieee80211_default_rc_algo.
  
  config ATH9K_HTC
         tristate "Atheros HTC based wireless cards support"
Simple merge
Simple merge
Simple merge
index cc5a98b8d187714f6e738295190aa704610443d8,5092ecae7706ab7140bcf7d3f88f830be176cc38..e5b186b04b29a52e67f466fb972408b554a1f24c
@@@ -1686,9 -1687,10 +1686,10 @@@ static int ath9k_ampdu_action(struct ie
                              u16 tid, u16 *ssn, u8 buf_size)
  {
        struct ath_softc *sc = hw->priv;
+       bool flush = false;
        int ret = 0;
  
 -      local_bh_disable();
 +      mutex_lock(&sc->mutex);
  
        switch (action) {
        case IEEE80211_AMPDU_RX_START:
index 7cabaf261fede492c77f9aa93452000732c5cb15,98d20c0f6fed8829c1881e16b274c2bf97c589c4..a2a8250e2f845d6441f60e177357900d3d411155
@@@ -159,10 -159,10 +159,11 @@@ static int ieee80211_change_mtu(struct 
        return 0;
  }
  
- static int ieee80211_verify_mac(struct ieee80211_local *local, u8 *addr,
 -static int ieee80211_verify_mac(struct ieee80211_sub_if_data *sdata, u8 *addr)
++static int ieee80211_verify_mac(struct ieee80211_sub_if_data *sdata, u8 *addr,
 +                              bool check_dup)
  {
-       struct ieee80211_sub_if_data *sdata;
+       struct ieee80211_local *local = sdata->local;
+       struct ieee80211_sub_if_data *iter;
        u64 new, mask, tmp;
        u8 *m;
        int ret = 0;
                ((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) |
                ((u64)m[4] << 1*8) | ((u64)m[5] << 0*8);
  
 +      if (!check_dup)
 +              return ret;
  
        mutex_lock(&local->iflist_mtx);
-       list_for_each_entry(sdata, &local->interfaces, list) {
-               if (sdata->vif.type == NL80211_IFTYPE_MONITOR &&
-                   !(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE))
+       list_for_each_entry(iter, &local->interfaces, list) {
+               if (iter == sdata)
                        continue;
  
-               m = sdata->vif.addr;
 -              if (iter->vif.type == NL80211_IFTYPE_MONITOR)
++              if (iter->vif.type == NL80211_IFTYPE_MONITOR &&
++                  !(iter->u.mntr_flags & MONITOR_FLAG_ACTIVE))
+                       continue;
+               m = iter->vif.addr;
                tmp =   ((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) |
                        ((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) |
                        ((u64)m[4] << 1*8) | ((u64)m[5] << 0*8);
@@@ -214,11 -213,7 +218,11 @@@ static int ieee80211_change_mac(struct 
        if (ieee80211_sdata_running(sdata))
                return -EBUSY;
  
 -      ret = ieee80211_verify_mac(sdata, sa->sa_data);
 +      if (sdata->vif.type == NL80211_IFTYPE_MONITOR &&
 +          !(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE))
 +              check_dup = false;
 +
-       ret = ieee80211_verify_mac(sdata->local, sa->sa_data, check_dup);
++      ret = ieee80211_verify_mac(sdata, sa->sa_data, check_dup);
        if (ret)
                return ret;