[kernel/f16] iwlwifi: do not set the sequence control bit is not needed ath9k: fix max phy rate at rate control i

John W. Linville linville at fedoraproject.org
Thu Dec 22 14:35:14 UTC 2011


commit 2e7bab382217ef947c8016501132091da337baeb
Author: John W. Linville <linville at tuxdriver.com>
Date:   Thu Dec 22 09:34:47 2011 -0500

    iwlwifi: do not set the sequence control bit is not needed
    ath9k: fix max phy rate at rate control init
    mwifiex: avoid double list_del in command cancel path
    iwlwifi: update SCD BC table for all SCD queues

 ath9k-fix-max-phy-rate-at-rate-control-init.patch  |   37 ++++++++++++
 ...not-set-the-sequence-control-bit-is-not-n.patch |   37 ++++++++++++
 ...fi-update-SCD-BC-table-for-all-SCD-queues.patch |   36 ++++++++++++
 kernel.spec                                        |   14 +++++
 ...id-double-list_del-in-command-cancel-path.patch |   59 ++++++++++++++++++++
 5 files changed, 183 insertions(+), 0 deletions(-)
---
diff --git a/ath9k-fix-max-phy-rate-at-rate-control-init.patch b/ath9k-fix-max-phy-rate-at-rate-control-init.patch
new file mode 100644
index 0000000..cb0719b
--- /dev/null
+++ b/ath9k-fix-max-phy-rate-at-rate-control-init.patch
@@ -0,0 +1,37 @@
+From 10636bc2d60942254bda149827b922c41f4cb4af Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar at qca.qualcomm.com>
+Date: Sat, 10 Dec 2011 18:59:43 +0530
+Subject: [PATCH 03/10] ath9k: fix max phy rate at rate control init
+
+The stations always chooses 1Mbps for all trasmitting frames,
+whenever the AP is configured to lock the supported rates.
+As the max phy rate is always set with the 4th from highest phy rate,
+this assumption might be wrong if we have less than that. Fix that.
+
+Cc: stable at kernel.org
+Cc: Paul Stewart <pstew at google.com>
+Reported-by: Ajay Gummalla <agummalla at google.com>
+Signed-off-by: Rajkumar Manoharan <rmanohar at qca.qualcomm.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+ drivers/net/wireless/ath/ath9k/rc.c |    4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
+index 8448281..cc5703b 100644
+--- a/drivers/net/wireless/ath/ath9k/rc.c
++++ b/drivers/net/wireless/ath/ath9k/rc.c
+@@ -1270,7 +1270,9 @@ static void ath_rc_init(struct ath_softc *sc,
+ 
+ 	ath_rc_priv->max_valid_rate = k;
+ 	ath_rc_sort_validrates(rate_table, ath_rc_priv);
+-	ath_rc_priv->rate_max_phy = ath_rc_priv->valid_rate_index[k-4];
++	ath_rc_priv->rate_max_phy = (k > 4) ?
++					ath_rc_priv->valid_rate_index[k-4] :
++					ath_rc_priv->valid_rate_index[k-1];
+ 	ath_rc_priv->rate_table = rate_table;
+ 
+ 	ath_dbg(common, ATH_DBG_CONFIG,
+-- 
+1.7.4.4
+
diff --git a/iwlwifi-do-not-set-the-sequence-control-bit-is-not-n.patch b/iwlwifi-do-not-set-the-sequence-control-bit-is-not-n.patch
new file mode 100644
index 0000000..d65d1a7
--- /dev/null
+++ b/iwlwifi-do-not-set-the-sequence-control-bit-is-not-n.patch
@@ -0,0 +1,37 @@
+From 123877b80ed62c3b897c53357b622574c023b642 Mon Sep 17 00:00:00 2001
+From: Wey-Yi Guy <wey-yi.w.guy at intel.com>
+Date: Thu, 8 Dec 2011 15:52:00 -0800
+Subject: [PATCH 01/10] iwlwifi: do not set the sequence control bit is not
+ needed
+
+Check the IEEE80211_TX_CTL_ASSIGN_SEQ flag from mac80211, then decide how to
+set the TX_CMD_FLG_SEQ_CTL_MSK bit. Setting the wrong bit in BAR frame whill
+make the firmware to increment the sequence number which is incorrect and
+cause unknown behavior.
+
+CC: stable at vger.kernel.org #3.0+
+Signed-off-by: Wey-Yi Guy <wey-yi.w.guy at intel.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+ drivers/net/wireless/iwlwifi/iwl-agn-tx.c |    5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+index 35a6b71..df1540c 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+@@ -91,7 +91,10 @@ static void iwlagn_tx_cmd_build_basic(struct iwl_priv *priv,
+ 		tx_cmd->tid_tspec = qc[0] & 0xf;
+ 		tx_flags &= ~TX_CMD_FLG_SEQ_CTL_MSK;
+ 	} else {
+-		tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
++		if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)
++			tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
++		else
++			tx_flags &= ~TX_CMD_FLG_SEQ_CTL_MSK;
+ 	}
+ 
+ 	iwlagn_tx_cmd_protection(priv, info, fc, &tx_flags);
+-- 
+1.7.4.4
+
diff --git a/iwlwifi-update-SCD-BC-table-for-all-SCD-queues.patch b/iwlwifi-update-SCD-BC-table-for-all-SCD-queues.patch
new file mode 100644
index 0000000..f25d6e0
--- /dev/null
+++ b/iwlwifi-update-SCD-BC-table-for-all-SCD-queues.patch
@@ -0,0 +1,36 @@
+From 96f1f05af76b601ab21a7dc603ae0a1cea4efc3d Mon Sep 17 00:00:00 2001
+From: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
+Date: Fri, 16 Dec 2011 07:53:18 -0800
+Subject: [PATCH 10/10] iwlwifi: update SCD BC table for all SCD queues
+
+Since we configure all the queues as CHAINABLE, we need to update the
+byte count for all the queues, not only the AGGREGATABLE ones.
+
+Not doing so can confuse the SCD and make the fw assert.
+
+Cc: stable at vger.kernel.org
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
+Signed-off-by: Wey-Yi Guy <wey-yi.w.guy at intel.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+ drivers/net/wireless/iwlwifi/iwl-trans-pcie.c |    4 +---
+ 1 files changed, 1 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+index ce91898..5f17ab8 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
++++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+@@ -1197,9 +1197,7 @@ static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
+ 	iwl_print_hex_dump(trans, IWL_DL_TX, (u8 *)tx_cmd->hdr, hdr_len);
+ 
+ 	/* Set up entry for this TFD in Tx byte-count array */
+-	if (is_agg)
+-		iwl_trans_txq_update_byte_cnt_tbl(trans, txq,
+-					       le16_to_cpu(tx_cmd->len));
++	iwl_trans_txq_update_byte_cnt_tbl(trans, txq, le16_to_cpu(tx_cmd->len));
+ 
+ 	dma_sync_single_for_device(bus(trans)->dev, txcmd_phys, firstlen,
+ 			DMA_BIDIRECTIONAL);
+-- 
+1.7.4.4
+
diff --git a/kernel.spec b/kernel.spec
index bb92a13..167c876 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -832,6 +832,10 @@ Patch21049: tpm_tis-delay-after-aborting-cmd.patch
 Patch50000: compat-wireless-config-fixups.patch
 Patch50001: compat-wireless-change-CONFIG_IWLAGN-CONFIG_IWLWIFI.patch
 Patch50100: iwlwifi-tx_sync-only-on-PAN-context.patch
+Patch50101: ath9k-fix-max-phy-rate-at-rate-control-init.patch
+Patch50102: iwlwifi-do-not-set-the-sequence-control-bit-is-not-n.patch
+Patch50103: iwlwifi-update-SCD-BC-table-for-all-SCD-queues.patch
+Patch50104: mwifiex-avoid-double-list_del-in-command-cancel-path.patch
 
 Patch22000: route-cache-garbage-collector.patch
 
@@ -1608,8 +1612,12 @@ ApplyPatch compat-wireless-change-CONFIG_IWLAGN-CONFIG_IWLWIFI.patch
 ApplyPatch bcma-brcmsmac-compat.patch
 
 # Apply some iwlwifi regression fixes not in the 3.2-rc6 wireless snapshot
+ApplyPatch iwlwifi-do-not-set-the-sequence-control-bit-is-not-n.patch
+ApplyPatch ath9k-fix-max-phy-rate-at-rate-control-init.patch
+ApplyPatch mwifiex-avoid-double-list_del-in-command-cancel-path.patch
 ApplyPatch iwlwifi-tx_sync-only-on-PAN-context.patch
 ApplyPatch iwlwifi-allow-to-switch-to-HT40-if-not-associated.patch
+ApplyPatch iwlwifi-update-SCD-BC-table-for-all-SCD-queues.patch
 
 cd ..
 
@@ -2283,6 +2291,12 @@ fi
 # and build.
 
 %changelog
+* Thu Dec 22 2011 John W. Linville <linville at redhat.com> 
+- iwlwifi: do not set the sequence control bit is not needed
+- ath9k: fix max phy rate at rate control init
+- mwifiex: avoid double list_del in command cancel path
+- iwlwifi: update SCD BC table for all SCD queues
+
 * Wed Dec 21 2011 Dave Jones <davej at redhat.com> 3.1.6-1
 - Linux 3.1.6
 
diff --git a/mwifiex-avoid-double-list_del-in-command-cancel-path.patch b/mwifiex-avoid-double-list_del-in-command-cancel-path.patch
new file mode 100644
index 0000000..90b6957
--- /dev/null
+++ b/mwifiex-avoid-double-list_del-in-command-cancel-path.patch
@@ -0,0 +1,59 @@
+From 51e708c1049e721b9c5c48d026bc97ca8497d39a Mon Sep 17 00:00:00 2001
+From: Yogesh Ashok Powar <yogeshp at marvell.com>
+Date: Tue, 13 Dec 2011 20:43:16 -0800
+Subject: [PATCH 04/10] mwifiex: avoid double list_del in command cancel path
+
+Command cancel path cancels the current command and moves
+it to free command queue. While doing that it deletes the
+command entry from the pending list. This is not correct
+as the entry has been already deleted from the pending
+list at 'mwifiex_exec_next_cmd'. Fixing it.
+
+Also making sure the stale command pointer is cleaned and
+unaccessible for later use.
+
+Signed-off-by: Yogesh Ashok Powar <yogeshp at marvell.com>
+Signed-off-by: Bing Zhao <bzhao at marvell.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+ drivers/net/wireless/mwifiex/cmdevt.c |    9 ++-------
+ 1 files changed, 2 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/net/wireless/mwifiex/cmdevt.c b/drivers/net/wireless/mwifiex/cmdevt.c
+index ac27815..6e0a3ea 100644
+--- a/drivers/net/wireless/mwifiex/cmdevt.c
++++ b/drivers/net/wireless/mwifiex/cmdevt.c
+@@ -939,7 +939,6 @@ mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter)
+ {
+ 	struct cmd_ctrl_node *cmd_node = NULL, *tmp_node = NULL;
+ 	unsigned long cmd_flags;
+-	unsigned long cmd_pending_q_flags;
+ 	unsigned long scan_pending_q_flags;
+ 	uint16_t cancel_scan_cmd = false;
+ 
+@@ -949,12 +948,9 @@ mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter)
+ 		cmd_node = adapter->curr_cmd;
+ 		cmd_node->wait_q_enabled = false;
+ 		cmd_node->cmd_flag |= CMD_F_CANCELED;
+-		spin_lock_irqsave(&adapter->cmd_pending_q_lock,
+-				  cmd_pending_q_flags);
+-		list_del(&cmd_node->list);
+-		spin_unlock_irqrestore(&adapter->cmd_pending_q_lock,
+-				       cmd_pending_q_flags);
+ 		mwifiex_insert_cmd_to_free_q(adapter, cmd_node);
++		mwifiex_complete_cmd(adapter, adapter->curr_cmd);
++		adapter->curr_cmd = NULL;
+ 		spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags);
+ 	}
+ 
+@@ -981,7 +977,6 @@ mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter)
+ 		spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags);
+ 	}
+ 	adapter->cmd_wait_q.status = -1;
+-	mwifiex_complete_cmd(adapter, adapter->curr_cmd);
+ }
+ 
+ /*
+-- 
+1.7.4.4
+


More information about the scm-commits mailing list