]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Jun 2014 23:15:59 +0000 (16:15 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Jun 2014 23:15:59 +0000 (16:15 -0700)
added patches:
iwlwifi-add-rs_rate_scale_clear_tbl_windows-helper-function.patch
iwlwifi-mvm-disable-beacon-filtering.patch
iwlwifi-mvm-rs-clear-per-rate-stats-when-aggregation-changes.patch

queue-3.14/iwlwifi-add-rs_rate_scale_clear_tbl_windows-helper-function.patch [new file with mode: 0644]
queue-3.14/iwlwifi-mvm-disable-beacon-filtering.patch [new file with mode: 0644]
queue-3.14/iwlwifi-mvm-rs-clear-per-rate-stats-when-aggregation-changes.patch [new file with mode: 0644]
queue-3.14/series

diff --git a/queue-3.14/iwlwifi-add-rs_rate_scale_clear_tbl_windows-helper-function.patch b/queue-3.14/iwlwifi-add-rs_rate_scale_clear_tbl_windows-helper-function.patch
new file mode 100644 (file)
index 0000000..f433264
--- /dev/null
@@ -0,0 +1,99 @@
+From egrumbach@gmail.com  Wed Jun  4 16:13:16 2014
+From: Emmanuel Grumbach <egrumbach@gmail.com>
+Date: Wed,  4 Jun 2014 21:58:00 +0300
+Subject: iwlwifi: add rs_rate_scale_clear_tbl_windows helper function
+To: stable@vger.kernel.org
+Cc: Eliad Peller <eliad@wizery.com>, Eliad Peller <eliadx.peller@intel.com>, Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Message-ID: <1401908281-9185-1-git-send-email-egrumbach@gmail.com>
+
+From: Eliad Peller <eliad@wizery.com>
+
+commit 3ca71f603bb1a0f55e1ba24618ba45617bc36f70 upstream.
+
+instead of duplicating the same loop multiple times,
+use a new function for it.
+
+this will be later used also for clearing other
+windows in the table.
+
+Signed-off-by: Eliad Peller <eliadx.peller@intel.com>
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/wireless/iwlwifi/mvm/rs.c |   23 ++++++++++++-----------
+ 1 file changed, 12 insertions(+), 11 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/mvm/rs.c
++++ b/drivers/net/wireless/iwlwifi/mvm/rs.c
+@@ -519,6 +519,14 @@ static void rs_rate_scale_clear_window(s
+       window->average_tpt = IWL_INVALID_VALUE;
+ }
++static void rs_rate_scale_clear_tbl_windows(struct iwl_scale_tbl_info *tbl)
++{
++      int i;
++
++      for (i = 0; i < IWL_RATE_COUNT; i++)
++              rs_rate_scale_clear_window(&tbl->win[i]);
++}
++
+ static inline u8 rs_is_valid_ant(u8 valid_antenna, u8 ant_type)
+ {
+       return (ant_type & valid_antenna) == ant_type;
+@@ -1397,7 +1405,6 @@ static u32 rs_bw_from_sta_bw(struct ieee
+ static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search)
+ {
+       struct iwl_scale_tbl_info *tbl;
+-      int i;
+       int active_tbl;
+       int flush_interval_passed = 0;
+       struct iwl_mvm *mvm;
+@@ -1458,9 +1465,7 @@ static void rs_stay_in_table(struct iwl_
+                               IWL_DEBUG_RATE(mvm,
+                                              "LQ: stay in table clear win\n");
+-                              for (i = 0; i < IWL_RATE_COUNT; i++)
+-                                      rs_rate_scale_clear_window(
+-                                              &(tbl->win[i]));
++                              rs_rate_scale_clear_tbl_windows(tbl);
+                       }
+               }
+@@ -1469,8 +1474,7 @@ static void rs_stay_in_table(struct iwl_
+                * "search" table). */
+               if (lq_sta->rs_state == RS_STATE_SEARCH_CYCLE_STARTED) {
+                       IWL_DEBUG_RATE(mvm, "Clearing up window stats\n");
+-                      for (i = 0; i < IWL_RATE_COUNT; i++)
+-                              rs_rate_scale_clear_window(&(tbl->win[i]));
++                      rs_rate_scale_clear_tbl_windows(tbl);
+               }
+       }
+ }
+@@ -1751,7 +1755,6 @@ static void rs_rate_scale_perform(struct
+       int low = IWL_RATE_INVALID;
+       int high = IWL_RATE_INVALID;
+       int index;
+-      int i;
+       struct iwl_rate_scale_data *window = NULL;
+       int current_tpt = IWL_INVALID_VALUE;
+       int low_tpt = IWL_INVALID_VALUE;
+@@ -2036,8 +2039,7 @@ lq_update:
+               if (lq_sta->search_better_tbl) {
+                       /* Access the "search" table, clear its history. */
+                       tbl = &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]);
+-                      for (i = 0; i < IWL_RATE_COUNT; i++)
+-                              rs_rate_scale_clear_window(&(tbl->win[i]));
++                      rs_rate_scale_clear_tbl_windows(tbl);
+                       /* Use new "search" start rate */
+                       index = tbl->rate.index;
+@@ -2301,8 +2303,7 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm
+       lq_sta->lq.sta_id = sta_priv->sta_id;
+       for (j = 0; j < LQ_SIZE; j++)
+-              for (i = 0; i < IWL_RATE_COUNT; i++)
+-                      rs_rate_scale_clear_window(&lq_sta->lq_info[j].win[i]);
++              rs_rate_scale_clear_tbl_windows(&lq_sta->lq_info[j]);
+       lq_sta->flush_timer = 0;
+       lq_sta->last_tx = jiffies;
diff --git a/queue-3.14/iwlwifi-mvm-disable-beacon-filtering.patch b/queue-3.14/iwlwifi-mvm-disable-beacon-filtering.patch
new file mode 100644 (file)
index 0000000..2ed5962
--- /dev/null
@@ -0,0 +1,29 @@
+From 7bacc782270ff7db3b9f29fa5d24ad2ee1e8e81d Mon Sep 17 00:00:00 2001
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Date: Sun, 18 May 2014 19:05:23 +0300
+Subject: iwlwifi: mvm: disable beacon filtering
+
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+
+commit 7bacc782270ff7db3b9f29fa5d24ad2ee1e8e81d upstream.
+
+This feature has been causing trouble - disable it for now.
+
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/iwlwifi/mvm/mac80211.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
++++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+@@ -606,7 +606,7 @@ static int iwl_mvm_mac_add_interface(str
+       if (ret)
+               goto out_remove_mac;
+-      if (!mvm->bf_allowed_vif &&
++      if (!mvm->bf_allowed_vif && false &&
+           vif->type == NL80211_IFTYPE_STATION && !vif->p2p &&
+           mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_BF_UPDATED){
+               mvm->bf_allowed_vif = mvmvif;
diff --git a/queue-3.14/iwlwifi-mvm-rs-clear-per-rate-stats-when-aggregation-changes.patch b/queue-3.14/iwlwifi-mvm-rs-clear-per-rate-stats-when-aggregation-changes.patch
new file mode 100644 (file)
index 0000000..c75d682
--- /dev/null
@@ -0,0 +1,85 @@
+From egrumbach@gmail.com  Wed Jun  4 16:13:48 2014
+From: Emmanuel Grumbach <egrumbach@gmail.com>
+Date: Wed,  4 Jun 2014 21:58:01 +0300
+Subject: iwlwifi: mvm: rs: clear per rate stats when aggregation changes
+To: stable@vger.kernel.org
+Cc: Eyal Shapira <eyal@wizery.com>, Eyal Shapira <eyalx.shapira@intel.com>, Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Message-ID: <1401908281-9185-2-git-send-email-egrumbach@gmail.com>
+
+From: Eyal Shapira <eyal@wizery.com>
+
+commit b804eeb6649d75caeccbeae9f5623fc7b8bdfdfa upstream.
+
+The per rate stats should be cleared when aggregation state changes
+to avoid making rate scale decisions based on throughput figures which
+were collected prior to the aggregation state change and are now stale.
+While at it make sure any clearing of the per rate stats will get logged.
+
+Signed-off-by: Eyal Shapira <eyalx.shapira@intel.com>
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/wireless/iwlwifi/mvm/rs.c |   14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/mvm/rs.c
++++ b/drivers/net/wireless/iwlwifi/mvm/rs.c
+@@ -519,10 +519,12 @@ static void rs_rate_scale_clear_window(s
+       window->average_tpt = IWL_INVALID_VALUE;
+ }
+-static void rs_rate_scale_clear_tbl_windows(struct iwl_scale_tbl_info *tbl)
++static void rs_rate_scale_clear_tbl_windows(struct iwl_mvm *mvm,
++                                          struct iwl_scale_tbl_info *tbl)
+ {
+       int i;
++      IWL_DEBUG_RATE(mvm, "Clearing up window stats\n");
+       for (i = 0; i < IWL_RATE_COUNT; i++)
+               rs_rate_scale_clear_window(&tbl->win[i]);
+ }
+@@ -1465,7 +1467,7 @@ static void rs_stay_in_table(struct iwl_
+                               IWL_DEBUG_RATE(mvm,
+                                              "LQ: stay in table clear win\n");
+-                              rs_rate_scale_clear_tbl_windows(tbl);
++                              rs_rate_scale_clear_tbl_windows(mvm, tbl);
+                       }
+               }
+@@ -1473,8 +1475,7 @@ static void rs_stay_in_table(struct iwl_
+                * bitmaps and stats in active table (this will become the new
+                * "search" table). */
+               if (lq_sta->rs_state == RS_STATE_SEARCH_CYCLE_STARTED) {
+-                      IWL_DEBUG_RATE(mvm, "Clearing up window stats\n");
+-                      rs_rate_scale_clear_tbl_windows(tbl);
++                      rs_rate_scale_clear_tbl_windows(mvm, tbl);
+               }
+       }
+ }
+@@ -1810,6 +1811,7 @@ static void rs_rate_scale_perform(struct
+                              "Aggregation changed: prev %d current %d. Update expected TPT table\n",
+                              prev_agg, lq_sta->is_agg);
+               rs_set_expected_tpt_table(lq_sta, tbl);
++              rs_rate_scale_clear_tbl_windows(mvm, tbl);
+       }
+       /* current tx rate */
+@@ -2039,7 +2041,7 @@ lq_update:
+               if (lq_sta->search_better_tbl) {
+                       /* Access the "search" table, clear its history. */
+                       tbl = &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]);
+-                      rs_rate_scale_clear_tbl_windows(tbl);
++                      rs_rate_scale_clear_tbl_windows(mvm, tbl);
+                       /* Use new "search" start rate */
+                       index = tbl->rate.index;
+@@ -2303,7 +2305,7 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm
+       lq_sta->lq.sta_id = sta_priv->sta_id;
+       for (j = 0; j < LQ_SIZE; j++)
+-              rs_rate_scale_clear_tbl_windows(&lq_sta->lq_info[j]);
++              rs_rate_scale_clear_tbl_windows(mvm, &lq_sta->lq_info[j]);
+       lq_sta->flush_timer = 0;
+       lq_sta->last_tx = jiffies;
index 51b43481d2a864968458fed406a76a2363e15e37..c6545c08de3140f446b87e0f52ea18235c4c1504 100644 (file)
@@ -221,3 +221,6 @@ spi-core-ignore-unsupported-dual-quad-transfer-mode-bits.patch
 libceph-fix-corruption-when-using-page_count-0-page-in-rbd.patch
 iommu-amd-fix-interrupt-remapping-for-aliased-devices.patch
 media-fc2580-fix-tuning-failure-on-32-bit-arch.patch
+iwlwifi-mvm-disable-beacon-filtering.patch
+iwlwifi-add-rs_rate_scale_clear_tbl_windows-helper-function.patch
+iwlwifi-mvm-rs-clear-per-rate-stats-when-aggregation-changes.patch