ath9k: fix a soft lockup on smp systems
[openwrt.git] / package / mac80211 / patches / 512-ath9k_channelbw_debugfs.patch
index d688b06..8c45918 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -649,6 +649,7 @@ struct ath_softc {
+@@ -671,6 +671,7 @@ struct ath_softc {
        struct ieee80211_hw *hw;
        struct device *dev;
  
@@ -8,8 +8,8 @@
        struct survey_info *cur_survey;
        struct survey_info survey[ATH9K_NUM_CHANNELS];
  
-@@ -717,6 +718,7 @@ struct ath_softc {
-       struct dfs_pattern_detector *dfs_detector;
+@@ -743,6 +744,7 @@ struct ath_softc {
+ #endif
  };
  
 +int ath9k_config(struct ieee80211_hw *hw, u32 changed);
@@ -18,7 +18,7 @@
  
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1579,6 +1579,50 @@ static const struct file_operations fops
+@@ -1764,6 +1764,50 @@ static const struct file_operations fops
        .owner = THIS_MODULE
  };
  
@@ -51,7 +51,7 @@
 +              return -EINVAL;
 +
 +      sc->chan_bw = chan_bw;
-+      if (!(sc->sc_flags & SC_OP_INVALID))
++      if (!test_bit(SC_OP_INVALID, &sc->sc_flags))
 +              ath9k_config(sc->hw, IEEE80211_CONF_CHANGE_CHANNEL);
 +
 +      return count;
  int ath9k_init_debug(struct ath_hw *ah)
  {
        struct ath_common *common = ath9k_hw_common(ah);
-@@ -1645,5 +1689,8 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1783,6 +1827,8 @@ int ath9k_init_debug(struct ath_hw *ah)
        debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
                            &fops_eeprom);
 +      debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
 +                          sc, &fops_chanbw);
-+
-       return 0;
- }
+       debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy, sc,
+                           &fops_dma);
+       debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc,
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1084,7 +1084,7 @@ static void ath9k_disable_ps(struct ath_
+@@ -1068,7 +1068,7 @@ static void ath9k_disable_ps(struct ath_
        ath_dbg(common, PS, "PowerSave disabled\n");
  }
  
@@ -89,7 +89,7 @@
  {
        struct ath_softc *sc = hw->priv;
        struct ath_hw *ah = sc->sc_ah;
-@@ -1138,9 +1138,11 @@ static int ath9k_config(struct ieee80211
+@@ -1122,9 +1122,11 @@ static int ath9k_config(struct ieee80211
  
        if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
                struct ieee80211_channel *curchan = hw->conf.channel;
  
                if (ah->curchan)
                        old_pos = ah->curchan - &ah->channels[0];
-@@ -1183,7 +1185,23 @@ static int ath9k_config(struct ieee80211
+@@ -1167,7 +1169,23 @@ static int ath9k_config(struct ieee80211
                        memset(&sc->survey[pos], 0, sizeof(struct survey_info));
                }