--- /dev/null
+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;
--- /dev/null
+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;
--- /dev/null
+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;
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