linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* pull request: iwlwifi 2014-04-13
@ 2014-04-13 12:59 Emmanuel Grumbach
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
  2014-04-13 13:53 ` pull request: iwlwifi 2014-04-13 Emmanuel Grumbach
  0 siblings, 2 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 12:59 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless

[-- Attachment #1: Type: text/plain, Size: 2712 bytes --]

Hi John,

This is a first pull request of fixes for 3.15.

I have new device IDs and a new firmware API. These are the trivial ones. The less trivial ones are Johannes's fix that delays the enablement of an interrupt coalescing hardware until after association - this fixes a few connection problems seen in the field. Eyal has a bunch of rate control fixes. I decided to add these for 3.15 because they fix some disconnection and packet loss scenarios which were reported by the field. I also have a fix for a memory leak that happens only with a very new NIC.

I'll be with low connectivity for the coming week and a half, so I want hope you won't have any issues with this pull request. If you do have issues, please let me know, but I am not sure I'll be able to handle the problems immediately.

Thanks!

The following changes since commit 67b3bd4e65f0854aca70e0134d59b1daede49504:

  brcmfmac: fallback to mimo_bw_cap for older firmwares (2014-03-20 11:55:41 -0400)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git for-john

for you to fetch changes up to f59913dfbb8ce07d7fb527f67b26791aa849aa1c:

  iwlwifi: mvm: BT Coex - fix Look Up Table (2014-04-13 15:57:36 +0300)

----------------------------------------------------------------
Emmanuel Grumbach (4):
      iwlwifi: mvm: BT Coex - send the new LUT upon antenna coupling change
      iwlwifi: 7000: bump API to 9
      iwlwifi: add MODULE_FIRMWARE for 7265
      iwlwifi: mvm: BT Coex - fix Look Up Table

Eyal Shapira (7):
      iwlwifi: mvm: rs: fix mimo delimiter in LQ cmd
      iwlwifi: mvm: rs: use correct max expected throughput figures
      iwlwifi: mvm: rs: fix and cleanup rs_get_rate_action
      iwlwifi: mvm: rs: reinit rs if no tx for a long time
      iwlwifi: mvm: rs: fallback to legacy Tx columns
      iwlwifi: mvm: avoid searching unnecessary columns
      iwlwifi: mvm: rs: clear per rate stats when aggregation changes

Johannes Berg (1):
      iwlwifi: mvm: delay enabling smart FIFO until after beacon RX

Oren Givon (1):
      iwlwifi: add new 7265 HW IDs

 drivers/net/wireless/iwlwifi/iwl-7000.c     |   5 +-
 drivers/net/wireless/iwlwifi/mvm/coex.c     |  18 +++++---
 drivers/net/wireless/iwlwifi/mvm/mac80211.c |   1 +
 drivers/net/wireless/iwlwifi/mvm/rs.c       | 261 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------
 drivers/net/wireless/iwlwifi/mvm/rs.h       |  14 ++++--
 drivers/net/wireless/iwlwifi/mvm/sf.c       |   3 +-
 drivers/net/wireless/iwlwifi/pcie/drv.c     |   2 +
 7 files changed, 195 insertions(+), 109 deletions(-)


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX
  2014-04-13 12:59 pull request: iwlwifi 2014-04-13 Emmanuel Grumbach
@ 2014-04-13 13:01 ` Emmanuel Grumbach
  2014-04-13 13:01   ` [PATCH 02/13] iwlwifi: mvm: rs: fix mimo delimiter in LQ cmd Emmanuel Grumbach
                     ` (11 more replies)
  2014-04-13 13:53 ` pull request: iwlwifi 2014-04-13 Emmanuel Grumbach
  1 sibling, 12 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:01 UTC (permalink / raw)
  To: linux-wireless; +Cc: Johannes Berg, stable, Emmanuel Grumbach

From: Johannes Berg <johannes.berg@intel.com>

If we have no beacon data before association, delay smart FIFO
enablement until after we have this data.

Not doing so can cause association failures in extremely silent
environments (usually only a shielded box/room) as beacon RX is
not sent to the host immediately, and then the association time
event ends without the host receiving any beacon even though it
was on the air - it's just stuck on the FIFO.

Cc: <stable@vger.kernel.org> [3.14]
Fixes: 1f3b0ff8ecce ("iwlwifi: mvm: Add Smart FIFO support")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/mvm/mac80211.c | 1 +
 drivers/net/wireless/iwlwifi/mvm/sf.c       | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index 4dd9ff4..f0cebf1 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -1332,6 +1332,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
 		 */
 		iwl_mvm_remove_time_event(mvm, mvmvif,
 					  &mvmvif->time_event_data);
+		iwl_mvm_sf_update(mvm, vif, false);
 		WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, CMD_SYNC));
 	} else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS |
 			      BSS_CHANGED_QOS)) {
diff --git a/drivers/net/wireless/iwlwifi/mvm/sf.c b/drivers/net/wireless/iwlwifi/mvm/sf.c
index 8401627..88809b2 100644
--- a/drivers/net/wireless/iwlwifi/mvm/sf.c
+++ b/drivers/net/wireless/iwlwifi/mvm/sf.c
@@ -274,7 +274,8 @@ int iwl_mvm_sf_update(struct iwl_mvm *mvm, struct ieee80211_vif *changed_vif,
 				return -EINVAL;
 			if (changed_vif->type != NL80211_IFTYPE_STATION) {
 				new_state = SF_UNINIT;
-			} else if (changed_vif->bss_conf.assoc) {
+			} else if (changed_vif->bss_conf.assoc &&
+				   changed_vif->bss_conf.dtim_period) {
 				mvmvif = iwl_mvm_vif_from_mac80211(changed_vif);
 				sta_id = mvmvif->ap_sta_id;
 				new_state = SF_FULL_ON;
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 02/13] iwlwifi: mvm: rs: fix mimo delimiter in LQ cmd
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
@ 2014-04-13 13:01   ` Emmanuel Grumbach
  2014-04-13 13:01   ` [PATCH 03/13] iwlwifi: mvm: BT Coex - send the new LUT upon antenna coupling change Emmanuel Grumbach
                     ` (10 subsequent siblings)
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:01 UTC (permalink / raw)
  To: linux-wireless; +Cc: Eyal Shapira, stable, Eyal Shapira, Emmanuel Grumbach

From: Eyal Shapira <eyal@wizery.com>

mimo_delim was always set to 0 instead of pointing to
the first SISO entry after MIMO rates.
This can cause keep transmitting in MIMO even when we shouldn't.
For example when the peer is requesting static SMPS.

Cc: <stable@vger.kernel.org> [3.14]
Signed-off-by: Eyal Shapira <eyalx.shapira@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/mvm/rs.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c
index 568abd6..dd13629 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.c
@@ -2547,6 +2547,7 @@ static void rs_build_rates_table(struct iwl_mvm *mvm,
 	if (is_siso(&rate)) {
 		num_rates = RS_SECONDARY_SISO_NUM_RATES;
 		num_retries = RS_SECONDARY_SISO_RETRIES;
+		lq_cmd->mimo_delim = index;
 	} else if (is_legacy(&rate)) {
 		num_rates = RS_SECONDARY_LEGACY_NUM_RATES;
 		num_retries = RS_LEGACY_RETRIES_PER_RATE;
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 03/13] iwlwifi: mvm: BT Coex - send the new LUT upon antenna coupling change
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
  2014-04-13 13:01   ` [PATCH 02/13] iwlwifi: mvm: rs: fix mimo delimiter in LQ cmd Emmanuel Grumbach
@ 2014-04-13 13:01   ` Emmanuel Grumbach
  2014-04-13 13:01   ` [PATCH 04/13] iwlwifi: add new 7265 HW IDs Emmanuel Grumbach
                     ` (9 subsequent siblings)
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:01 UTC (permalink / raw)
  To: linux-wireless; +Cc: Emmanuel Grumbach

From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>

I forgot to send the new Look Up Table to the firmware and
I also forgot to free the command which is kzalloc'ed.
This code is relevant for 7265 device only.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/mvm/coex.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/iwlwifi/mvm/coex.c b/drivers/net/wireless/iwlwifi/mvm/coex.c
index 685f7e8..f9c7b30 100644
--- a/drivers/net/wireless/iwlwifi/mvm/coex.c
+++ b/drivers/net/wireless/iwlwifi/mvm/coex.c
@@ -1262,6 +1262,7 @@ int iwl_mvm_rx_ant_coupling_notif(struct iwl_mvm *mvm,
 	struct iwl_rx_packet *pkt = rxb_addr(rxb);
 	u32 ant_isolation = le32_to_cpup((void *)pkt->data);
 	u8 __maybe_unused lower_bound, upper_bound;
+	int ret;
 	u8 lut;
 
 	struct iwl_bt_coex_cmd *bt_cmd;
@@ -1318,5 +1319,8 @@ int iwl_mvm_rx_ant_coupling_notif(struct iwl_mvm *mvm,
 	memcpy(bt_cmd->bt4_corun_lut40, antenna_coupling_ranges[lut].lut20,
 	       sizeof(bt_cmd->bt4_corun_lut40));
 
-	return 0;
+	ret = iwl_mvm_send_cmd(mvm, &cmd);
+
+	kfree(bt_cmd);
+	return ret;
 }
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 04/13] iwlwifi: add new 7265 HW IDs
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
  2014-04-13 13:01   ` [PATCH 02/13] iwlwifi: mvm: rs: fix mimo delimiter in LQ cmd Emmanuel Grumbach
  2014-04-13 13:01   ` [PATCH 03/13] iwlwifi: mvm: BT Coex - send the new LUT upon antenna coupling change Emmanuel Grumbach
@ 2014-04-13 13:01   ` Emmanuel Grumbach
  2014-04-13 13:01   ` [PATCH 05/13] iwlwifi: 7000: bump API to 9 Emmanuel Grumbach
                     ` (8 subsequent siblings)
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:01 UTC (permalink / raw)
  To: linux-wireless; +Cc: Oren Givon, stable, Emmanuel Grumbach

From: Oren Givon <oren.givon@intel.com>

Add 2 new HW IDs for the 7265 series.

Cc: <stable@vger.kernel.org> [3.13+]
Signed-off-by: Oren Givon <oren.givon@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/pcie/drv.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/wireless/iwlwifi/pcie/drv.c b/drivers/net/wireless/iwlwifi/pcie/drv.c
index edb015c..3d1d57f 100644
--- a/drivers/net/wireless/iwlwifi/pcie/drv.c
+++ b/drivers/net/wireless/iwlwifi/pcie/drv.c
@@ -373,12 +373,14 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
 	{IWL_PCI_DEVICE(0x095A, 0x500A, iwl7265_2n_cfg)},
 	{IWL_PCI_DEVICE(0x095B, 0x5200, iwl7265_2n_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x5002, iwl7265_n_cfg)},
+	{IWL_PCI_DEVICE(0x095A, 0x5102, iwl7265_n_cfg)},
 	{IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x9012, iwl7265_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x9112, iwl7265_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)},
+	{IWL_PCI_DEVICE(0x095A, 0x9200, iwl7265_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x9510, iwl7265_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x9310, iwl7265_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x9410, iwl7265_2ac_cfg)},
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 05/13] iwlwifi: 7000: bump API to 9
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
                     ` (2 preceding siblings ...)
  2014-04-13 13:01   ` [PATCH 04/13] iwlwifi: add new 7265 HW IDs Emmanuel Grumbach
@ 2014-04-13 13:01   ` Emmanuel Grumbach
  2014-04-13 13:01   ` [PATCH 06/13] iwlwifi: add MODULE_FIRMWARE for 7265 Emmanuel Grumbach
                     ` (7 subsequent siblings)
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:01 UTC (permalink / raw)
  To: linux-wireless; +Cc: Emmanuel Grumbach, stable

From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>

This will allow to load the new firmware.

Cc: <stable@vger.kernel.org> [3.14]
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-7000.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-7000.c b/drivers/net/wireless/iwlwifi/iwl-7000.c
index 003a546..8425130 100644
--- a/drivers/net/wireless/iwlwifi/iwl-7000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-7000.c
@@ -67,8 +67,8 @@
 #include "iwl-agn-hw.h"
 
 /* Highest firmware API version supported */
-#define IWL7260_UCODE_API_MAX	8
-#define IWL3160_UCODE_API_MAX	8
+#define IWL7260_UCODE_API_MAX	9
+#define IWL3160_UCODE_API_MAX	9
 
 /* Oldest version we won't warn about */
 #define IWL7260_UCODE_API_OK	8
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 06/13] iwlwifi: add MODULE_FIRMWARE for 7265
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
                     ` (3 preceding siblings ...)
  2014-04-13 13:01   ` [PATCH 05/13] iwlwifi: 7000: bump API to 9 Emmanuel Grumbach
@ 2014-04-13 13:01   ` Emmanuel Grumbach
  2014-04-13 13:01   ` [PATCH 07/13] iwlwifi: mvm: rs: use correct max expected throughput figures Emmanuel Grumbach
                     ` (6 subsequent siblings)
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:01 UTC (permalink / raw)
  To: linux-wireless; +Cc: Emmanuel Grumbach, stable

From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>

It was missing.

Cc: stable@vger.kernel.org [3.13+]
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-7000.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/iwlwifi/iwl-7000.c b/drivers/net/wireless/iwlwifi/iwl-7000.c
index 8425130..4c2d4ef 100644
--- a/drivers/net/wireless/iwlwifi/iwl-7000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-7000.c
@@ -244,3 +244,4 @@ const struct iwl_cfg iwl7265_n_cfg = {
 
 MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK));
 MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK));
+MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK));
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 07/13] iwlwifi: mvm: rs: use correct max expected throughput figures
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
                     ` (4 preceding siblings ...)
  2014-04-13 13:01   ` [PATCH 06/13] iwlwifi: add MODULE_FIRMWARE for 7265 Emmanuel Grumbach
@ 2014-04-13 13:01   ` Emmanuel Grumbach
  2014-04-13 13:01   ` [PATCH 08/13] iwlwifi: mvm: rs: fix and cleanup rs_get_rate_action Emmanuel Grumbach
                     ` (5 subsequent siblings)
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:01 UTC (permalink / raw)
  To: linux-wireless; +Cc: Eyal Shapira, Eyal Shapira, Emmanuel Grumbach

From: Eyal Shapira <eyal@wizery.com>

The selection of the max expected throughput for a column
didn't take into account the maximal allowed rate for the current
peer. This can cause unnecessary switches during the search cycle
to columns which have no chance of beating the current throughput.

Signed-off-by: Eyal Shapira <eyalx.shapira@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/mvm/rs.c | 55 ++++++++++++++++++++++++++---------
 drivers/net/wireless/iwlwifi/mvm/rs.h | 12 ++++++--
 2 files changed, 51 insertions(+), 16 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c
index dd13629..cd32ad5 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.c
@@ -1186,9 +1186,26 @@ static void rs_set_stay_in_table(struct iwl_mvm *mvm, u8 is_legacy,
 	lq_sta->visited_columns = 0;
 }
 
+static int rs_get_max_allowed_rate(struct iwl_lq_sta *lq_sta,
+				   const struct rs_tx_column *column)
+{
+	switch (column->mode) {
+	case RS_LEGACY:
+		return lq_sta->max_legacy_rate_idx;
+	case RS_SISO:
+		return lq_sta->max_siso_rate_idx;
+	case RS_MIMO2:
+		return lq_sta->max_mimo2_rate_idx;
+	default:
+		WARN_ON_ONCE(1);
+	}
+
+	return lq_sta->max_legacy_rate_idx;
+}
+
 static const u16 *rs_get_expected_tpt_table(struct iwl_lq_sta *lq_sta,
-				      const struct rs_tx_column *column,
-				      u32 bw)
+					    const struct rs_tx_column *column,
+					    u32 bw)
 {
 	/* Used to choose among HT tables */
 	const u16 (*ht_tbl_pointer)[IWL_RATE_COUNT];
@@ -1485,14 +1502,14 @@ static enum rs_column rs_get_next_column(struct iwl_mvm *mvm,
 					 struct ieee80211_sta *sta,
 					 struct iwl_scale_tbl_info *tbl)
 {
-	int i, j, n;
+	int i, j, max_rate;
 	enum rs_column next_col_id;
 	const struct rs_tx_column *curr_col = &rs_tx_columns[tbl->column];
 	const struct rs_tx_column *next_col;
 	allow_column_func_t allow_func;
 	u8 valid_ants = mvm->fw->valid_tx_ant;
 	const u16 *expected_tpt_tbl;
-	s32 tpt, max_expected_tpt;
+	u16 tpt, max_expected_tpt;
 
 	for (i = 0; i < MAX_NEXT_COLUMNS; i++) {
 		next_col_id = curr_col->next_columns[i];
@@ -1535,11 +1552,11 @@ static enum rs_column rs_get_next_column(struct iwl_mvm *mvm,
 		if (WARN_ON_ONCE(!expected_tpt_tbl))
 			continue;
 
-		max_expected_tpt = 0;
-		for (n = 0; n < IWL_RATE_COUNT; n++)
-			if (expected_tpt_tbl[n] > max_expected_tpt)
-				max_expected_tpt = expected_tpt_tbl[n];
+		max_rate = rs_get_max_allowed_rate(lq_sta, next_col);
+		if (WARN_ON_ONCE(max_rate == IWL_RATE_INVALID))
+			continue;
 
+		max_expected_tpt = expected_tpt_tbl[max_rate];
 		if (tpt >= max_expected_tpt) {
 			IWL_DEBUG_RATE(mvm,
 				       "Skip column %d: can't beat current TPT. Max expected %d current %d\n",
@@ -1547,14 +1564,15 @@ static enum rs_column rs_get_next_column(struct iwl_mvm *mvm,
 			continue;
 		}
 
+		IWL_DEBUG_RATE(mvm,
+			       "Found potential column %d. Max expected %d current %d\n",
+			       next_col_id, max_expected_tpt, tpt);
 		break;
 	}
 
 	if (i == MAX_NEXT_COLUMNS)
 		return RS_COLUMN_INVALID;
 
-	IWL_DEBUG_RATE(mvm, "Found potential column %d\n", next_col_id);
-
 	return next_col_id;
 }
 
@@ -2388,11 +2406,22 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
 		lq_sta->is_vht = true;
 	}
 
-	IWL_DEBUG_RATE(mvm,
-		       "SISO-RATE=%X MIMO2-RATE=%X VHT=%d\n",
+	lq_sta->max_legacy_rate_idx = find_last_bit(&lq_sta->active_legacy_rate,
+						    BITS_PER_LONG);
+	lq_sta->max_siso_rate_idx = find_last_bit(&lq_sta->active_siso_rate,
+						  BITS_PER_LONG);
+	lq_sta->max_mimo2_rate_idx = find_last_bit(&lq_sta->active_mimo2_rate,
+						   BITS_PER_LONG);
+
+	IWL_DEBUG_RATE(mvm, "RATE MASK: LEGACY=%lX SISO=%lX MIMO2=%lX VHT=%d\n",
+		       lq_sta->active_legacy_rate,
 		       lq_sta->active_siso_rate,
 		       lq_sta->active_mimo2_rate,
 		       lq_sta->is_vht);
+	IWL_DEBUG_RATE(mvm, "MAX RATE: LEGACY=%d SISO=%d MIMO2=%d\n",
+		       lq_sta->max_legacy_rate_idx,
+		       lq_sta->max_siso_rate_idx,
+		       lq_sta->max_mimo2_rate_idx);
 
 	/* These values will be overridden later */
 	lq_sta->lq.single_stream_ant_msk =
@@ -2750,7 +2779,7 @@ static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file,
 		return -ENOMEM;
 
 	desc += sprintf(buff+desc, "sta_id %d\n", lq_sta->lq.sta_id);
-	desc += sprintf(buff+desc, "failed=%d success=%d rate=0%X\n",
+	desc += sprintf(buff+desc, "failed=%d success=%d rate=0%lX\n",
 			lq_sta->total_failed, lq_sta->total_success,
 			lq_sta->active_legacy_rate);
 	desc += sprintf(buff+desc, "fixed rate 0x%X\n",
diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.h b/drivers/net/wireless/iwlwifi/mvm/rs.h
index 3332b39..9892d92 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rs.h
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.h
@@ -314,9 +314,15 @@ struct iwl_lq_sta {
 	enum ieee80211_band band;
 
 	/* The following are bitmaps of rates; IWL_RATE_6M_MASK, etc. */
-	u16 active_legacy_rate;
-	u16 active_siso_rate;
-	u16 active_mimo2_rate;
+	unsigned long active_legacy_rate;
+	unsigned long active_siso_rate;
+	unsigned long active_mimo2_rate;
+
+	/* Highest rate per Tx mode */
+	u8 max_legacy_rate_idx;
+	u8 max_siso_rate_idx;
+	u8 max_mimo2_rate_idx;
+
 	s8 max_rate_idx;     /* Max rate set by user */
 	u8 missed_rate_counter;
 
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 08/13] iwlwifi: mvm: rs: fix and cleanup rs_get_rate_action
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
                     ` (5 preceding siblings ...)
  2014-04-13 13:01   ` [PATCH 07/13] iwlwifi: mvm: rs: use correct max expected throughput figures Emmanuel Grumbach
@ 2014-04-13 13:01   ` Emmanuel Grumbach
  2014-04-13 13:01   ` [PATCH 09/13] iwlwifi: mvm: rs: reinit rs if no tx for a long time Emmanuel Grumbach
                     ` (4 subsequent siblings)
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:01 UTC (permalink / raw)
  To: linux-wireless; +Cc: Eyal Shapira, stable, Eyal Shapira, Emmanuel Grumbach

From: Eyal Shapira <eyal@wizery.com>

Change the down/upscale decision logic a bit to be based
on different success ratio thresholds. This fixes the implementation
compared to the rate scale algorithm which was planned to yield
optimal results. Also fix a case where a lower rate wasn't explored
despite being a potential for better throughput.
While at it rewrite rs_get_rate_action to be more clear and clean.

Cc: <stable@vger.kernel.org> [3.14]
Signed-off-by: Eyal Shapira <eyalx.shapira@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/mvm/rs.c | 127 ++++++++++++++++------------------
 drivers/net/wireless/iwlwifi/mvm/rs.h |   1 +
 2 files changed, 60 insertions(+), 68 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c
index cd32ad5..97b8fac 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.c
@@ -1658,85 +1658,76 @@ static enum rs_action rs_get_rate_action(struct iwl_mvm *mvm,
 {
 	enum rs_action action = RS_ACTION_STAY;
 
-	/* Too many failures, decrease rate */
 	if ((sr <= RS_SR_FORCE_DECREASE) || (current_tpt == 0)) {
 		IWL_DEBUG_RATE(mvm,
-			       "decrease rate because of low SR\n");
-		action = RS_ACTION_DOWNSCALE;
-	/* No throughput measured yet for adjacent rates; try increase. */
-	} else if ((low_tpt == IWL_INVALID_VALUE) &&
-		   (high_tpt == IWL_INVALID_VALUE)) {
-		if (high != IWL_RATE_INVALID && sr >= IWL_RATE_INCREASE_TH) {
-			IWL_DEBUG_RATE(mvm,
-				       "Good SR and no high rate measurement. "
-				       "Increase rate\n");
-			action = RS_ACTION_UPSCALE;
-		} else if (low != IWL_RATE_INVALID) {
-			IWL_DEBUG_RATE(mvm,
-				       "Remain in current rate\n");
-			action = RS_ACTION_STAY;
-		}
+			       "Decrease rate because of low SR\n");
+		return RS_ACTION_DOWNSCALE;
 	}
 
-	/* Both adjacent throughputs are measured, but neither one has better
-	 * throughput; we're using the best rate, don't change it!
-	 */
-	else if ((low_tpt != IWL_INVALID_VALUE) &&
-		 (high_tpt != IWL_INVALID_VALUE) &&
-		 (low_tpt < current_tpt) &&
-		 (high_tpt < current_tpt)) {
+	if ((low_tpt == IWL_INVALID_VALUE) &&
+	    (high_tpt == IWL_INVALID_VALUE) &&
+	    (high != IWL_RATE_INVALID)) {
 		IWL_DEBUG_RATE(mvm,
-			       "Both high and low are worse. "
-			       "Maintain rate\n");
-		action = RS_ACTION_STAY;
+			       "No data about high/low rates. Increase rate\n");
+		return RS_ACTION_UPSCALE;
 	}
 
-	/* At least one adjacent rate's throughput is measured,
-	 * and may have better performance.
-	 */
-	else {
-		/* Higher adjacent rate's throughput is measured */
-		if (high_tpt != IWL_INVALID_VALUE) {
-			/* Higher rate has better throughput */
-			if (high_tpt > current_tpt &&
-			    sr >= IWL_RATE_INCREASE_TH) {
-				IWL_DEBUG_RATE(mvm,
-					       "Higher rate is better and good "
-					       "SR. Increate rate\n");
-				action = RS_ACTION_UPSCALE;
-			} else {
-				IWL_DEBUG_RATE(mvm,
-					       "Higher rate isn't better OR "
-					       "no good SR. Maintain rate\n");
-				action = RS_ACTION_STAY;
-			}
+	if ((high_tpt == IWL_INVALID_VALUE) &&
+	    (high != IWL_RATE_INVALID) &&
+	    (low_tpt != IWL_INVALID_VALUE) &&
+	    (low_tpt < current_tpt)) {
+		IWL_DEBUG_RATE(mvm,
+			       "No data about high rate and low rate is worse. Increase rate\n");
+		return RS_ACTION_UPSCALE;
+	}
 
-		/* Lower adjacent rate's throughput is measured */
-		} else if (low_tpt != IWL_INVALID_VALUE) {
-			/* Lower rate has better throughput */
-			if (low_tpt > current_tpt) {
-				IWL_DEBUG_RATE(mvm,
-					       "Lower rate is better. "
-					       "Decrease rate\n");
-				action = RS_ACTION_DOWNSCALE;
-			} else if (sr >= IWL_RATE_INCREASE_TH) {
-				IWL_DEBUG_RATE(mvm,
-					       "Lower rate isn't better and "
-					       "good SR. Increase rate\n");
-				action = RS_ACTION_UPSCALE;
-			}
-		}
+	if ((high_tpt != IWL_INVALID_VALUE) &&
+	    (high_tpt > current_tpt)) {
+		IWL_DEBUG_RATE(mvm,
+			       "Higher rate is better. Increate rate\n");
+		return RS_ACTION_UPSCALE;
 	}
 
-	/* Sanity check; asked for decrease, but success rate or throughput
-	 * has been good at old rate.  Don't change it.
-	 */
-	if ((action == RS_ACTION_DOWNSCALE) && (low != IWL_RATE_INVALID) &&
-	    ((sr > IWL_RATE_HIGH_TH) ||
-	     (current_tpt > (100 * tbl->expected_tpt[low])))) {
+	if ((low_tpt != IWL_INVALID_VALUE) &&
+	    (high_tpt != IWL_INVALID_VALUE) &&
+	    (low_tpt < current_tpt) &&
+	    (high_tpt < current_tpt)) {
 		IWL_DEBUG_RATE(mvm,
-			       "Sanity check failed. Maintain rate\n");
-		action = RS_ACTION_STAY;
+			       "Both high and low are worse. Maintain rate\n");
+		return RS_ACTION_STAY;
+	}
+
+	if ((low_tpt != IWL_INVALID_VALUE) &&
+	    (low_tpt > current_tpt)) {
+		IWL_DEBUG_RATE(mvm,
+			       "Lower rate is better\n");
+		action = RS_ACTION_DOWNSCALE;
+		goto out;
+	}
+
+	if ((low_tpt == IWL_INVALID_VALUE) &&
+	    (low != IWL_RATE_INVALID)) {
+		IWL_DEBUG_RATE(mvm,
+			       "No data about lower rate\n");
+		action = RS_ACTION_DOWNSCALE;
+		goto out;
+	}
+
+	IWL_DEBUG_RATE(mvm, "Maintain rate\n");
+
+out:
+	if ((action == RS_ACTION_DOWNSCALE) && (low != IWL_RATE_INVALID)) {
+		if (sr >= RS_SR_NO_DECREASE) {
+			IWL_DEBUG_RATE(mvm,
+				       "SR is above NO DECREASE. Avoid downscale\n");
+			action = RS_ACTION_STAY;
+		} else if (current_tpt > (100 * tbl->expected_tpt[low])) {
+			IWL_DEBUG_RATE(mvm,
+				       "Current TPT is higher than max expected in low rate. Avoid downscale\n");
+			action = RS_ACTION_STAY;
+		} else {
+			IWL_DEBUG_RATE(mvm, "Decrease rate\n");
+		}
 	}
 
 	return action;
diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.h b/drivers/net/wireless/iwlwifi/mvm/rs.h
index 9892d92..fbb476a 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rs.h
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.h
@@ -156,6 +156,7 @@ enum {
 #define IWL_RATE_HIGH_TH		10880	/*  85% */
 #define IWL_RATE_INCREASE_TH		6400	/*  50% */
 #define RS_SR_FORCE_DECREASE		1920	/*  15% */
+#define RS_SR_NO_DECREASE		10880	/*  85% */
 
 #define LINK_QUAL_AGG_TIME_LIMIT_DEF	(4000) /* 4 milliseconds */
 #define LINK_QUAL_AGG_TIME_LIMIT_MAX	(8000)
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 09/13] iwlwifi: mvm: rs: reinit rs if no tx for a long time
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
                     ` (6 preceding siblings ...)
  2014-04-13 13:01   ` [PATCH 08/13] iwlwifi: mvm: rs: fix and cleanup rs_get_rate_action Emmanuel Grumbach
@ 2014-04-13 13:01   ` Emmanuel Grumbach
  2014-04-13 13:02   ` [PATCH 10/13] iwlwifi: mvm: rs: fallback to legacy Tx columns Emmanuel Grumbach
                     ` (3 subsequent siblings)
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:01 UTC (permalink / raw)
  To: linux-wireless; +Cc: Eyal Shapira, stable, Eyal Shapira, Emmanuel Grumbach

From: Eyal Shapira <eyal@wizery.com>

After being idle for a long time (>5sec) the rs statistics
will be stale so we prefer to reset rs and start from legacy
rates again. This gives better results when the attenuation
increased signficantly (e.g. we got further from the AP) and
after a while we start Tx
Note that the first Tx after the idle period will still go out
in the old modulation and rate but this seemed a simpler approach
compared to adding a timer or modifying mac80211 for this.
The negative impact is negligble as we'll recover quickly.

Cc: <stable@vger.kernel.org> [3.14]
Signed-off-by: Eyal Shapira <eyalx.shapira@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/mvm/rs.c | 22 +++++++++++++++++++++-
 drivers/net/wireless/iwlwifi/mvm/rs.h |  1 +
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c
index 97b8fac..0d03dcd 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.c
@@ -59,7 +59,7 @@
 /* max allowed rate miss before sync LQ cmd */
 #define IWL_MISSED_RATE_MAX		15
 #define RS_STAY_IN_COLUMN_TIMEOUT       (5*HZ)
-
+#define RS_IDLE_TIMEOUT                 (5*HZ)
 
 static u8 rs_ht_to_legacy[] = {
 	[IWL_RATE_MCS_0_INDEX] = IWL_RATE_6M_INDEX,
@@ -992,6 +992,13 @@ static void rs_tx_status(void *mvm_r, struct ieee80211_supported_band *sband,
 		return;
 	}
 
+#ifdef CPTCFG_MAC80211_DEBUGFS
+	/* Disable last tx check if we are debugging with fixed rate */
+	if (lq_sta->dbg_fixed_rate) {
+		IWL_DEBUG_RATE(mvm, "Fixed rate. avoid rate scaling\n");
+		return;
+	}
+#endif
 	if (!ieee80211_is_data(hdr->frame_control) ||
 	    info->flags & IEEE80211_TX_CTL_NO_ACK)
 		return;
@@ -1034,6 +1041,18 @@ static void rs_tx_status(void *mvm_r, struct ieee80211_supported_band *sband,
 			mac_index++;
 	}
 
+	if (time_after(jiffies,
+		       (unsigned long)(lq_sta->last_tx + RS_IDLE_TIMEOUT))) {
+		int tid;
+		IWL_DEBUG_RATE(mvm, "Tx idle for too long. reinit rs\n");
+		for (tid = 0; tid < IWL_MAX_TID_COUNT; tid++)
+			ieee80211_stop_tx_ba_session(sta, tid);
+
+		iwl_mvm_rs_rate_init(mvm, sta, sband->band, false);
+		return;
+	}
+	lq_sta->last_tx = jiffies;
+
 	/* Here we actually compare this rate to the latest LQ command */
 	if ((mac_index < 0) ||
 	    (rate.sgi != !!(mac_flags & IEEE80211_TX_RC_SHORT_GI)) ||
@@ -2354,6 +2373,7 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
 		rs_rate_scale_clear_tbl_windows(&lq_sta->lq_info[j]);
 
 	lq_sta->flush_timer = 0;
+	lq_sta->last_tx = jiffies;
 
 	IWL_DEBUG_RATE(mvm,
 		       "LQ: *** rate scale station global init for station %d ***\n",
diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.h b/drivers/net/wireless/iwlwifi/mvm/rs.h
index fbb476a..0acfac9 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rs.h
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.h
@@ -311,6 +311,7 @@ struct iwl_lq_sta {
 	u32 visited_columns;    /* Bitmask marking which Tx columns were
 				 * explored during a search cycle
 				 */
+	u64 last_tx;
 	bool is_vht;
 	enum ieee80211_band band;
 
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 10/13] iwlwifi: mvm: rs: fallback to legacy Tx columns
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
                     ` (7 preceding siblings ...)
  2014-04-13 13:01   ` [PATCH 09/13] iwlwifi: mvm: rs: reinit rs if no tx for a long time Emmanuel Grumbach
@ 2014-04-13 13:02   ` Emmanuel Grumbach
  2014-04-13 13:02   ` [PATCH 11/13] iwlwifi: mvm: avoid searching unnecessary columns Emmanuel Grumbach
                     ` (2 subsequent siblings)
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:02 UTC (permalink / raw)
  To: linux-wireless; +Cc: Eyal Shapira, stable, Eyal Shapira, Emmanuel Grumbach

From: Eyal Shapira <eyal@wizery.com>

Allow switching back to legacy Tx columns so we'll stop doing
HT/VHT in case we're far from the AP. Stop active aggregation when
making a deciding to stay in a legacy column.
Despite having low legacy rates in the LQ table lower entries
it doesn't help much in case we're doing aggregations as the
aggregation was being transmitted in the initial rate of the table.

This should help traffic stalls when far from the AP.

Cc: <stable@vger.kernel.org> [3.14]
Signed-off-by: Eyal Shapira <eyalx.shapira@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/mvm/rs.c | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c
index 0d03dcd..b007db9 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.c
@@ -142,7 +142,7 @@ enum rs_column_mode {
 	RS_MIMO2,
 };
 
-#define MAX_NEXT_COLUMNS 5
+#define MAX_NEXT_COLUMNS 7
 #define MAX_COLUMN_CHECKS 3
 
 typedef bool (*allow_column_func_t) (struct iwl_mvm *mvm,
@@ -214,6 +214,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_SISO_ANT_B,
 			RS_COLUMN_MIMO2,
 			RS_COLUMN_MIMO2_SGI,
+			RS_COLUMN_INVALID,
+			RS_COLUMN_INVALID,
 		},
 	},
 	[RS_COLUMN_LEGACY_ANT_B] = {
@@ -225,6 +227,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_SISO_ANT_B,
 			RS_COLUMN_MIMO2,
 			RS_COLUMN_MIMO2_SGI,
+			RS_COLUMN_INVALID,
+			RS_COLUMN_INVALID,
 		},
 	},
 	[RS_COLUMN_SISO_ANT_A] = {
@@ -236,6 +240,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_SISO_ANT_A_SGI,
 			RS_COLUMN_SISO_ANT_B_SGI,
 			RS_COLUMN_MIMO2_SGI,
+			RS_COLUMN_LEGACY_ANT_A,
+			RS_COLUMN_LEGACY_ANT_B,
 		},
 		.checks = {
 			rs_siso_allow,
@@ -250,6 +256,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_SISO_ANT_B_SGI,
 			RS_COLUMN_SISO_ANT_A_SGI,
 			RS_COLUMN_MIMO2_SGI,
+			RS_COLUMN_LEGACY_ANT_A,
+			RS_COLUMN_LEGACY_ANT_B,
 		},
 		.checks = {
 			rs_siso_allow,
@@ -265,6 +273,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_SISO_ANT_A,
 			RS_COLUMN_SISO_ANT_B,
 			RS_COLUMN_MIMO2,
+			RS_COLUMN_LEGACY_ANT_A,
+			RS_COLUMN_LEGACY_ANT_B,
 		},
 		.checks = {
 			rs_siso_allow,
@@ -281,6 +291,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_SISO_ANT_B,
 			RS_COLUMN_SISO_ANT_A,
 			RS_COLUMN_MIMO2,
+			RS_COLUMN_LEGACY_ANT_A,
+			RS_COLUMN_LEGACY_ANT_B,
 		},
 		.checks = {
 			rs_siso_allow,
@@ -296,6 +308,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_SISO_ANT_A_SGI,
 			RS_COLUMN_SISO_ANT_B_SGI,
 			RS_COLUMN_MIMO2_SGI,
+			RS_COLUMN_LEGACY_ANT_A,
+			RS_COLUMN_LEGACY_ANT_B,
 		},
 		.checks = {
 			rs_mimo_allow,
@@ -311,6 +325,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_SISO_ANT_A,
 			RS_COLUMN_SISO_ANT_B,
 			RS_COLUMN_MIMO2,
+			RS_COLUMN_LEGACY_ANT_A,
+			RS_COLUMN_LEGACY_ANT_B,
 		},
 		.checks = {
 			rs_mimo_allow,
@@ -2070,8 +2086,18 @@ lq_update:
 		 * stay with best antenna legacy modulation for a while
 		 * before next round of mode comparisons. */
 		tbl1 = &(lq_sta->lq_info[lq_sta->active_tbl]);
-		if (is_legacy(&tbl1->rate) && !sta->ht_cap.ht_supported) {
+		if (is_legacy(&tbl1->rate)) {
 			IWL_DEBUG_RATE(mvm, "LQ: STAY in legacy table\n");
+
+			if (tid != IWL_MAX_TID_COUNT) {
+				tid_data = &sta_priv->tid_data[tid];
+				if (tid_data->state != IWL_AGG_OFF) {
+					IWL_DEBUG_RATE(mvm,
+						       "Stop aggregation on tid %d\n",
+						       tid);
+					ieee80211_stop_tx_ba_session(sta, tid);
+				}
+			}
 			rs_set_stay_in_table(mvm, 1, lq_sta);
 		} else {
 		/* If we're in an HT mode, and all 3 mode switch actions
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 11/13] iwlwifi: mvm: avoid searching unnecessary columns
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
                     ` (8 preceding siblings ...)
  2014-04-13 13:02   ` [PATCH 10/13] iwlwifi: mvm: rs: fallback to legacy Tx columns Emmanuel Grumbach
@ 2014-04-13 13:02   ` Emmanuel Grumbach
  2014-04-13 13:02   ` [PATCH 12/13] iwlwifi: mvm: rs: clear per rate stats when aggregation changes Emmanuel Grumbach
  2014-04-13 13:02   ` [PATCH 13/13] iwlwifi: mvm: BT Coex - fix Look Up Table Emmanuel Grumbach
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:02 UTC (permalink / raw)
  To: linux-wireless; +Cc: Eyal Shapira, stable, Eyal Shapira, Emmanuel Grumbach

From: Eyal Shapira <eyal@wizery.com>

Don't search columns which are unlikely to succeed as previous
columns searched with less aggressive modulation failed.

Cc: <stable@vger.kernel.org> [3.14]
Signed-off-by: Eyal Shapira <eyalx.shapira@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/mvm/rs.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c
index b007db9..5cab26e 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.c
@@ -212,8 +212,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_LEGACY_ANT_B,
 			RS_COLUMN_SISO_ANT_A,
 			RS_COLUMN_SISO_ANT_B,
-			RS_COLUMN_MIMO2,
-			RS_COLUMN_MIMO2_SGI,
+			RS_COLUMN_INVALID,
+			RS_COLUMN_INVALID,
 			RS_COLUMN_INVALID,
 			RS_COLUMN_INVALID,
 		},
@@ -225,8 +225,8 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_LEGACY_ANT_A,
 			RS_COLUMN_SISO_ANT_A,
 			RS_COLUMN_SISO_ANT_B,
-			RS_COLUMN_MIMO2,
-			RS_COLUMN_MIMO2_SGI,
+			RS_COLUMN_INVALID,
+			RS_COLUMN_INVALID,
 			RS_COLUMN_INVALID,
 			RS_COLUMN_INVALID,
 		},
@@ -239,9 +239,9 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_MIMO2,
 			RS_COLUMN_SISO_ANT_A_SGI,
 			RS_COLUMN_SISO_ANT_B_SGI,
-			RS_COLUMN_MIMO2_SGI,
 			RS_COLUMN_LEGACY_ANT_A,
 			RS_COLUMN_LEGACY_ANT_B,
+			RS_COLUMN_INVALID,
 		},
 		.checks = {
 			rs_siso_allow,
@@ -255,9 +255,9 @@ static const struct rs_tx_column rs_tx_columns[] = {
 			RS_COLUMN_MIMO2,
 			RS_COLUMN_SISO_ANT_B_SGI,
 			RS_COLUMN_SISO_ANT_A_SGI,
-			RS_COLUMN_MIMO2_SGI,
 			RS_COLUMN_LEGACY_ANT_A,
 			RS_COLUMN_LEGACY_ANT_B,
+			RS_COLUMN_INVALID,
 		},
 		.checks = {
 			rs_siso_allow,
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 12/13] iwlwifi: mvm: rs: clear per rate stats when aggregation changes
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
                     ` (9 preceding siblings ...)
  2014-04-13 13:02   ` [PATCH 11/13] iwlwifi: mvm: avoid searching unnecessary columns Emmanuel Grumbach
@ 2014-04-13 13:02   ` Emmanuel Grumbach
  2014-04-13 13:02   ` [PATCH 13/13] iwlwifi: mvm: BT Coex - fix Look Up Table Emmanuel Grumbach
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:02 UTC (permalink / raw)
  To: linux-wireless; +Cc: Eyal Shapira, stable, Eyal Shapira, Emmanuel Grumbach

From: Eyal Shapira <eyal@wizery.com>

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.

Cc: <stable@vger.kernel.org> [3.14]
Signed-off-by: Eyal Shapira <eyalx.shapira@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/mvm/rs.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c
index 5cab26e..9f52c5b 100644
--- 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(struct iwl_rate_scale_data *window)
 	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]);
 }
@@ -1490,7 +1492,7 @@ static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search)
 
 				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);
 			}
 		}
 
@@ -1498,8 +1500,7 @@ static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search)
 		 * 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);
 		}
 	}
 }
@@ -1836,6 +1837,7 @@ static void rs_rate_scale_perform(struct iwl_mvm *mvm,
 			       "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 */
@@ -2065,7 +2067,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;
@@ -2396,7 +2398,7 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
 	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;
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 13/13] iwlwifi: mvm: BT Coex - fix Look Up Table
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
                     ` (10 preceding siblings ...)
  2014-04-13 13:02   ` [PATCH 12/13] iwlwifi: mvm: rs: clear per rate stats when aggregation changes Emmanuel Grumbach
@ 2014-04-13 13:02   ` Emmanuel Grumbach
  11 siblings, 0 replies; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:02 UTC (permalink / raw)
  To: linux-wireless; +Cc: Emmanuel Grumbach, stable

From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>

A few entries were wrong and this caused throughput issues.

Cc: <stable@vger.kernel.org> [3.13+]
Fixes: dac94da8dba3 ("iwlwifi: mvm: new BT Coex API")
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/mvm/coex.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/mvm/coex.c b/drivers/net/wireless/iwlwifi/mvm/coex.c
index f9c7b30..fa858d54 100644
--- a/drivers/net/wireless/iwlwifi/mvm/coex.c
+++ b/drivers/net/wireless/iwlwifi/mvm/coex.c
@@ -190,7 +190,7 @@ static const __le32 iwl_combined_lookup[BT_COEX_MAX_LUT][BT_COEX_LUT_SIZE] = {
 		cpu_to_le32(0xcc00aaaa),
 		cpu_to_le32(0x0000aaaa),
 		cpu_to_le32(0xc0004000),
-		cpu_to_le32(0x00000000),
+		cpu_to_le32(0x00004000),
 		cpu_to_le32(0xf0005000),
 		cpu_to_le32(0xf0005000),
 	},
@@ -213,16 +213,16 @@ static const __le32 iwl_combined_lookup[BT_COEX_MAX_LUT][BT_COEX_LUT_SIZE] = {
 		/* Tx Tx disabled */
 		cpu_to_le32(0xaaaaaaaa),
 		cpu_to_le32(0xaaaaaaaa),
-		cpu_to_le32(0xaaaaaaaa),
+		cpu_to_le32(0xeeaaaaaa),
 		cpu_to_le32(0xaaaaaaaa),
 		cpu_to_le32(0xcc00ff28),
 		cpu_to_le32(0x0000aaaa),
 		cpu_to_le32(0xcc00aaaa),
 		cpu_to_le32(0x0000aaaa),
-		cpu_to_le32(0xC0004000),
-		cpu_to_le32(0xC0004000),
-		cpu_to_le32(0xF0005000),
-		cpu_to_le32(0xF0005000),
+		cpu_to_le32(0xc0004000),
+		cpu_to_le32(0xc0004000),
+		cpu_to_le32(0xf0005000),
+		cpu_to_le32(0xf0005000),
 	},
 };
 
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: pull request: iwlwifi 2014-04-13
  2014-04-13 12:59 pull request: iwlwifi 2014-04-13 Emmanuel Grumbach
  2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
@ 2014-04-13 13:53 ` Emmanuel Grumbach
  2014-04-14 18:22   ` John W. Linville
  1 sibling, 1 reply; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 13:53 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless

[-- Attachment #1: Type: text/plain, Size: 1521 bytes --]



On 04/13/2014 03:59 PM, Emmanuel Grumbach wrote:
> Hi John,
> 
> This is a first pull request of fixes for 3.15.
> 
> I have new device IDs and a new firmware API. These are the trivial ones. The less trivial ones are Johannes's fix that delays the enablement of an interrupt coalescing hardware until after association - this fixes a few connection problems seen in the field. Eyal has a bunch of rate control fixes. I decided to add these for 3.15 because they fix some disconnection and packet loss scenarios which were reported by the field. I also have a fix for a memory leak that happens only with a very new NIC.
> 
> I'll be with low connectivity for the coming week and a half, so I want hope you won't have any issues with this pull request. If you do have issues, please let me know, but I am not sure I'll be able to handle the problems immediately.
> 
> Thanks!
> a6bc92803e7f765e02c923cf37c8e280e729642aa6bc92803e7f765e02c923cf37c8e280e729642aa6bc92803e7f765e02c923cf37c8e280e729642a
> The following changes since commit 67b3bd4e65f0854aca70e0134d59b1daede49504:
> 
>   brcmfmac: fallback to mimo_bw_cap for older firmwares (2014-03-20 11:55:41 -0400)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git for-john
> 
> for you to fetch changes up to f59913dfbb8ce07d7fb527f67b26791aa849aa1c:
> 

I had a typo in the stable address in one of the patches - new HEAD: a6bc92803e7f765e02c923cf37c8e280e729642a


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* pull request: iwlwifi 2014-04-13
@ 2014-04-13 19:19 Emmanuel Grumbach
  2014-04-13 19:25 ` Emmanuel Grumbach
  0 siblings, 1 reply; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 19:19 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless

[-- Attachment #1: Type: text/plain, Size: 7421 bytes --]

Hi John,

This is for 3.16.

I have here a bunch of unrelated things. I disabled support for -7.ucode which means that I can removed a lot of code. Eliad has a brand new feature: we reduce the Tx power when the link allows - this reduces our power consumption. The regular changes in power and scan area. One interesting thing though is the patches from Johannes, we have now GRO which allows to increase our throughput in TCP Rx. The main advantage is that it reduces the number of TCP Acks - these TCP Acks are completely useless when we are using A-MPDU since the first packet of the A-MPDU generates a TCP Ack which is made obsolete by the next packets.

Same footer as previous pull request, I won't be available this week, so let's hope I am not causing any problem here.

Thanks!

The following changes since commit a31267c30880ebdc73e6815f58c69a665052fab8:

  rtl8187: fix use after free on failure path in rtl8187_probe() (2014-03-31 13:47:41 -0400)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next.git master

for you to fetch changes up to 3cd5279b021de6501a8012dd856d7a78ee58ead9:

  iwlwifi: don't disable SCD chain extension on newer devices (2014-04-13 22:02:44 +0300)

----------------------------------------------------------------
Alexander Bondar (2):
      iwlwifi: mvm: Change scan fragmentation condition
      iwlwifi: mvm: Fix scan parameters units

Avri Altman (2):
      iwlwifi: mvm: Handle power management constraints for additional use-cases
      iwlwifi: mvm: Re-factor enabling uAPSD logic

Eliad Peller (4):
      iwlwifi: mvm: add lq_cmd/tx_resp reduced_tpc field
      iwlwifi: mvm: add ATPC implementation
      iwlwifi: mvm: add debugfs file for fixed reduced tx power
      iwlwifi: mvm: don't use d3 fw if d0i3 is used

Emmanuel Grumbach (27):
      iwlwifi: pcie: don't leave the new NICs awake for commands
      iwlwifi: pcie: unify iwl_rx_replenish and iwl_rx_replenish_now
      iwlwifi: mvm: remove redundant empty line
      iwlwifi: mvm: propagate the beamforming status from firmware
      iwlwifi: mvm: don't set AP STA to EINVAL
      iwlwifi: allow to wait for a subset of the queues
      iwlwifi: pcie: WARN upon traffic while flushing TX queues
      iwlwifi: mvm: dump Rx FIFO when the firmware asserts
      iwlwifi: mvm: don't enable bcast filtering on P2P client
      iwlwifi: mvm: replace BUG_ON by WARN_ON in scan.c
      iwlwifi: mvm: deprecate -7 firmware
      iwlwifi: remove IWL_UCODE_TLV_FLAGS_NEWBT_COEX TLV flag
      iwlwifi: remove IWL_UCODE_TLV_FLAGS_PM_CMD_SUPPORT flag
      iwlwifi: remove IWL_UCODE_TLV_FLAGS_RX_ENERGY_API flag
      iwlwifi: remove IWL_UCODE_TLV_FLAGS_TIME_EVENT_API_V2 flag
      iwlwifi: remove IWL_UCODE_TLV_FLAGS_BF_UPDATED flag
      iwlwifi: remove IWL_UCODE_TLV_FLAGS_D3_CONTINUITY_API flag
      iwlwifi: remove IWL_UCODE_TLV_FLAGS_SCHED_SCAN flag
      iwlwifi: remove IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT flag
      iwlwifi: remove IWL_UCODE_TLV_FLAGS_STA_KEY_CMD flag
      iwlwifi: remove IWL_UCODE_TLV_FLAGS_DEVICE_PS_CMD flag
      iwlwifi: mvm: BT Coex - don't use comma operator
      iwlwifi: mvm: BT Coex - minor API change
      iwlwifi: mvm: BT Coex - send priority tables from iwl_send_bt_init_conf
      iwlwifi: 7000: bump firmware API version to 9
      iwlwifi: mvm: replace leading spaces by tabs
      iwlwifi: don't disable SCD chain extension on newer devices

Eran Harary (2):
      iwlwifi: mvm: fix the number of channels in family 8000
      iwlwifi: move CPU1_CPU2_SEPARATOR_SECTION to iwl-fw.h

Eyal Shapira (1):
      iwlwifi: mvm: add per rate tx stats

Eytan Lifshitz (2):
      iwlwifi: mvm: Fix warning message when exit thermal throttling
      iwlwifi: mvm: Fix tx-backoff when NIC exit thermal throttling

Haim Dreyfuss (1):
      iwlwifi: mvm: Add support for Energy based scan (EBS)

Johannes Berg (5):
      iwlwifi: pcie: implement GRO without NAPI
      iwlwifi: pcie: clarify RX queue need_update handling and locking
      iwlwifi: pcie: use bool for TX queue where appropriate
      iwlwifi: pcie: fix TX queue locking
      iwlwifi: pcie: clarify TX queue need_update handling

Monam Agarwal (1):
      iwlwifi: mvm: Use RCU_INIT_POINTER(x, NULL)

 drivers/net/wireless/iwlwifi/dvm/lib.c           |   2 +-
 drivers/net/wireless/iwlwifi/dvm/mac80211.c      |   2 +-
 drivers/net/wireless/iwlwifi/dvm/main.c          |  12 ++
 drivers/net/wireless/iwlwifi/iwl-1000.c          |   1 +
 drivers/net/wireless/iwlwifi/iwl-2000.c          |   2 +
 drivers/net/wireless/iwlwifi/iwl-5000.c          |   1 +
 drivers/net/wireless/iwlwifi/iwl-6000.c          |   3 +
 drivers/net/wireless/iwlwifi/iwl-7000.c          |  13 +-
 drivers/net/wireless/iwlwifi/iwl-config.h        |   5 +
 drivers/net/wireless/iwlwifi/iwl-fw.h            |  27 ++--
 drivers/net/wireless/iwlwifi/iwl-nvm-parse.c     |  25 ++--
 drivers/net/wireless/iwlwifi/iwl-op-mode.h       |  25 +++-
 drivers/net/wireless/iwlwifi/iwl-prph.h          |   8 ++
 drivers/net/wireless/iwlwifi/iwl-trans.h         |  10 +-
 drivers/net/wireless/iwlwifi/mvm/coex.c          |  34 +++--
 drivers/net/wireless/iwlwifi/mvm/d3.c            |  94 ++++++-------
 drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c   |  13 +-
 drivers/net/wireless/iwlwifi/mvm/debugfs.c       |  15 +--
 drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h   |  38 +++---
 drivers/net/wireless/iwlwifi/mvm/fw-api-d3.h     |  17 +--
 drivers/net/wireless/iwlwifi/mvm/fw-api-rs.h     |   2 +-
 drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h   |  34 +++--
 drivers/net/wireless/iwlwifi/mvm/fw-api-sta.h    |  46 +------
 drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h     |   3 +-
 drivers/net/wireless/iwlwifi/mvm/fw-api.h        |  54 +-------
 drivers/net/wireless/iwlwifi/mvm/fw-error-dump.h |   6 +-
 drivers/net/wireless/iwlwifi/mvm/fw.c            |  12 +-
 drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c      |   5 +-
 drivers/net/wireless/iwlwifi/mvm/mac80211.c      |  49 ++++---
 drivers/net/wireless/iwlwifi/mvm/mvm.h           |  26 +++-
 drivers/net/wireless/iwlwifi/mvm/ops.c           |  56 +++++++-
 drivers/net/wireless/iwlwifi/mvm/power.c         | 272 ++++++++++++++++++-------------------
 drivers/net/wireless/iwlwifi/mvm/rs.c            | 330 ++++++++++++++++++++++++++++++++++++++++++++-
 drivers/net/wireless/iwlwifi/mvm/rs.h            |  24 ++++
 drivers/net/wireless/iwlwifi/mvm/rx.c            |  45 +------
 drivers/net/wireless/iwlwifi/mvm/scan.c          |  75 +++++++----
 drivers/net/wireless/iwlwifi/mvm/sf.c            |   3 -
 drivers/net/wireless/iwlwifi/mvm/sta.c           | 177 +++++-------------------
 drivers/net/wireless/iwlwifi/mvm/sta.h           |   3 +
 drivers/net/wireless/iwlwifi/mvm/time-event.c    |  71 ++--------
 drivers/net/wireless/iwlwifi/mvm/tt.c            |  10 +-
 drivers/net/wireless/iwlwifi/mvm/tx.c            |  11 +-
 drivers/net/wireless/iwlwifi/mvm/utils.c         |  46 ++++++-
 drivers/net/wireless/iwlwifi/pcie/internal.h     |   9 +-
 drivers/net/wireless/iwlwifi/pcie/rx.c           |  84 ++++++------
 drivers/net/wireless/iwlwifi/pcie/trans.c        |  47 ++++++-
 drivers/net/wireless/iwlwifi/pcie/tx.c           |  62 +++++----
 47 files changed, 1092 insertions(+), 817 deletions(-)


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: pull request: iwlwifi 2014-04-13
  2014-04-13 19:19 Emmanuel Grumbach
@ 2014-04-13 19:25 ` Emmanuel Grumbach
  2014-04-22 20:07   ` John W. Linville
  0 siblings, 1 reply; 19+ messages in thread
From: Emmanuel Grumbach @ 2014-04-13 19:25 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless

[-- Attachment #1: Type: text/plain, Size: 1492 bytes --]



On 04/13/2014 10:19 PM, Emmanuel Grumbach wrote:
> Hi John,
> 
> This is for 3.16.
> 
> I have here a bunch of unrelated things. I disabled support for -7.ucode which means that I can removed a lot of code. Eliad has a brand new feature: we reduce the Tx power when the link allows - this reduces our power consumption. The regular changes in power and scan area. One interesting thing though is the patches from Johannes, we have now GRO which allows to increase our throughput in TCP Rx. The main advantage is that it reduces the number of TCP Acks - these TCP Acks are completely useless when we are using A-MPDU since the first packet of the A-MPDU generates a TCP Ack which is made obsolete by the next packets.
> 
> Same footer as previous pull request, I won't be available this week, so let's hope I am not causing any problem here.
> 
> Thanks!
> 
> The following changes since commit a31267c30880ebdc73e6815f58c69a665052fab8:
> 
>   rtl8187: fix use after free on failure path in rtl8187_probe() (2014-03-31 13:47:41 -0400)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next.git master
> 
> for you to fetch changes up to 3cd5279b021de6501a8012dd856d7a78ee58ead9:
> 
Apparently I can't get the rid of my tradition to fixup something after the mail goes out...

I dropped 2 patches that I queued up for 3.15 in my next pull request - new HEAD: e03bbb62cfdf539ae8110b297493c685f9d12774


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: pull request: iwlwifi 2014-04-13
  2014-04-13 13:53 ` pull request: iwlwifi 2014-04-13 Emmanuel Grumbach
@ 2014-04-14 18:22   ` John W. Linville
  0 siblings, 0 replies; 19+ messages in thread
From: John W. Linville @ 2014-04-14 18:22 UTC (permalink / raw)
  To: Emmanuel Grumbach; +Cc: linux-wireless

On Sun, Apr 13, 2014 at 04:53:31PM +0300, Emmanuel Grumbach wrote:
> 
> 
> On 04/13/2014 03:59 PM, Emmanuel Grumbach wrote:
> > Hi John,
> > 
> > This is a first pull request of fixes for 3.15.
> > 
> > I have new device IDs and a new firmware API. These are the trivial ones. The less trivial ones are Johannes's fix that delays the enablement of an interrupt coalescing hardware until after association - this fixes a few connection problems seen in the field. Eyal has a bunch of rate control fixes. I decided to add these for 3.15 because they fix some disconnection and packet loss scenarios which were reported by the field. I also have a fix for a memory leak that happens only with a very new NIC.
> > 
> > I'll be with low connectivity for the coming week and a half, so I want hope you won't have any issues with this pull request. If you do have issues, please let me know, but I am not sure I'll be able to handle the problems immediately.
> > 
> > Thanks!
> > a6bc92803e7f765e02c923cf37c8e280e729642aa6bc92803e7f765e02c923cf37c8e280e729642aa6bc92803e7f765e02c923cf37c8e280e729642a
> > The following changes since commit 67b3bd4e65f0854aca70e0134d59b1daede49504:
> > 
> >   brcmfmac: fallback to mimo_bw_cap for older firmwares (2014-03-20 11:55:41 -0400)
> > 
> > are available in the git repository at:
> > 
> >   git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git for-john
> > 
> > for you to fetch changes up to f59913dfbb8ce07d7fb527f67b26791aa849aa1c:
> > 
> 
> I had a typo in the stable address in one of the patches - new HEAD: a6bc92803e7f765e02c923cf37c8e280e729642a

Pulling now...

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: pull request: iwlwifi 2014-04-13
  2014-04-13 19:25 ` Emmanuel Grumbach
@ 2014-04-22 20:07   ` John W. Linville
  0 siblings, 0 replies; 19+ messages in thread
From: John W. Linville @ 2014-04-22 20:07 UTC (permalink / raw)
  To: Emmanuel Grumbach; +Cc: linux-wireless

On Sun, Apr 13, 2014 at 10:25:13PM +0300, Emmanuel Grumbach wrote:
> 
> 
> On 04/13/2014 10:19 PM, Emmanuel Grumbach wrote:
> > Hi John,
> > 
> > This is for 3.16.
> > 
> > I have here a bunch of unrelated things. I disabled support for -7.ucode which means that I can removed a lot of code. Eliad has a brand new feature: we reduce the Tx power when the link allows - this reduces our power consumption. The regular changes in power and scan area. One interesting thing though is the patches from Johannes, we have now GRO which allows to increase our throughput in TCP Rx. The main advantage is that it reduces the number of TCP Acks - these TCP Acks are completely useless when we are using A-MPDU since the first packet of the A-MPDU generates a TCP Ack which is made obsolete by the next packets.
> > 
> > Same footer as previous pull request, I won't be available this week, so let's hope I am not causing any problem here.
> > 
> > Thanks!
> > 
> > The following changes since commit a31267c30880ebdc73e6815f58c69a665052fab8:
> > 
> >   rtl8187: fix use after free on failure path in rtl8187_probe() (2014-03-31 13:47:41 -0400)
> > 
> > are available in the git repository at:
> > 
> >   git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next.git master
> > 
> > for you to fetch changes up to 3cd5279b021de6501a8012dd856d7a78ee58ead9:
> > 
> Apparently I can't get the rid of my tradition to fixup something after the mail goes out...
> 
> I dropped 2 patches that I queued up for 3.15 in my next pull request - new HEAD: e03bbb62cfdf539ae8110b297493c685f9d12774


Pulled today...

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2014-04-22 20:15 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-13 12:59 pull request: iwlwifi 2014-04-13 Emmanuel Grumbach
2014-04-13 13:01 ` [PATCH 01/13] iwlwifi: mvm: delay enabling smart FIFO until after beacon RX Emmanuel Grumbach
2014-04-13 13:01   ` [PATCH 02/13] iwlwifi: mvm: rs: fix mimo delimiter in LQ cmd Emmanuel Grumbach
2014-04-13 13:01   ` [PATCH 03/13] iwlwifi: mvm: BT Coex - send the new LUT upon antenna coupling change Emmanuel Grumbach
2014-04-13 13:01   ` [PATCH 04/13] iwlwifi: add new 7265 HW IDs Emmanuel Grumbach
2014-04-13 13:01   ` [PATCH 05/13] iwlwifi: 7000: bump API to 9 Emmanuel Grumbach
2014-04-13 13:01   ` [PATCH 06/13] iwlwifi: add MODULE_FIRMWARE for 7265 Emmanuel Grumbach
2014-04-13 13:01   ` [PATCH 07/13] iwlwifi: mvm: rs: use correct max expected throughput figures Emmanuel Grumbach
2014-04-13 13:01   ` [PATCH 08/13] iwlwifi: mvm: rs: fix and cleanup rs_get_rate_action Emmanuel Grumbach
2014-04-13 13:01   ` [PATCH 09/13] iwlwifi: mvm: rs: reinit rs if no tx for a long time Emmanuel Grumbach
2014-04-13 13:02   ` [PATCH 10/13] iwlwifi: mvm: rs: fallback to legacy Tx columns Emmanuel Grumbach
2014-04-13 13:02   ` [PATCH 11/13] iwlwifi: mvm: avoid searching unnecessary columns Emmanuel Grumbach
2014-04-13 13:02   ` [PATCH 12/13] iwlwifi: mvm: rs: clear per rate stats when aggregation changes Emmanuel Grumbach
2014-04-13 13:02   ` [PATCH 13/13] iwlwifi: mvm: BT Coex - fix Look Up Table Emmanuel Grumbach
2014-04-13 13:53 ` pull request: iwlwifi 2014-04-13 Emmanuel Grumbach
2014-04-14 18:22   ` John W. Linville
  -- strict thread matches above, loose matches on Subject: below --
2014-04-13 19:19 Emmanuel Grumbach
2014-04-13 19:25 ` Emmanuel Grumbach
2014-04-22 20:07   ` John W. Linville

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).