linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] iwlwifi fixes for 2.6.34 and stable
@ 2010-03-25 20:44 Reinette Chatre
  2010-03-25 20:44 ` [PATCH 1/3] iwlwifi: fix regulatory Reinette Chatre
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Reinette Chatre @ 2010-03-25 20:44 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, ipw3945-devel, Reinette Chatre

We include three fixes. iwlwifi's regulatory information was not handled
correctly due to a regression introduced a long time ago by "cfg80211: convert bools into
flags". A recent patch "iwlwifi: error checking for number of tfds in
queue" that was included as a fix missed some hunks, which are
corrected here. The third patch fixes an issue with high CPU utilization
due to a high number of interrupts per second that are not cleared
properly.

These patches are also available from wireless-2.6 branch on
git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git

Reinette Chatre (1):
  iwlwifi: fix regulatory

Shanyu Zhao (1):
  iwlwifi: clear unattended interrupts in tasklet

Wey-Yi Guy (1):
  iwlwifi: counting number of tfds can be free for 4965

 drivers/net/wireless/iwlwifi/iwl-4965.c     |    6 ++----
 drivers/net/wireless/iwlwifi/iwl-agn.c      |   12 ++++++++++--
 drivers/net/wireless/iwlwifi/iwl3945-base.c |    2 +-
 3 files changed, 13 insertions(+), 7 deletions(-)


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

* [PATCH 1/3] iwlwifi: fix regulatory
  2010-03-25 20:44 [PATCH 0/3] iwlwifi fixes for 2.6.34 and stable Reinette Chatre
@ 2010-03-25 20:44 ` Reinette Chatre
  2010-03-25 20:44 ` [PATCH 2/3] iwlwifi: counting number of tfds can be free for 4965 Reinette Chatre
  2010-03-25 20:44 ` [PATCH 3/3] iwlwifi: clear unattended interrupts in tasklet Reinette Chatre
  2 siblings, 0 replies; 4+ messages in thread
From: Reinette Chatre @ 2010-03-25 20:44 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, ipw3945-devel, Reinette Chatre, stable

From: Reinette Chatre <reinette.chatre@intel.com>

Commit "cfg80211: convert bools into flags" mistakenly modified iwlwifi's
regulatory settings instead of just converting it. Fix this.

This fixes http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2172

Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
CC: stable@kernel.org
---
 drivers/net/wireless/iwlwifi/iwl-agn.c      |    2 +-
 drivers/net/wireless/iwlwifi/iwl3945-base.c |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 818367b..c8e2e3a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2644,7 +2644,7 @@ static int iwl_mac_setup_register(struct iwl_priv *priv)
 		BIT(NL80211_IFTYPE_STATION) |
 		BIT(NL80211_IFTYPE_ADHOC);
 
-	hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY |
+	hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |
 			    WIPHY_FLAG_DISABLE_BEACON_HINTS;
 
 	/*
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 54daa38..f93013e 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -3921,7 +3921,7 @@ static int iwl3945_setup_mac(struct iwl_priv *priv)
 		BIT(NL80211_IFTYPE_STATION) |
 		BIT(NL80211_IFTYPE_ADHOC);
 
-	hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY |
+	hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |
 			    WIPHY_FLAG_DISABLE_BEACON_HINTS;
 
 	hw->wiphy->max_scan_ssids = PROBE_OPTION_MAX_3945;
-- 
1.6.3.3


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

* [PATCH 2/3] iwlwifi: counting number of tfds can be free for 4965
  2010-03-25 20:44 [PATCH 0/3] iwlwifi fixes for 2.6.34 and stable Reinette Chatre
  2010-03-25 20:44 ` [PATCH 1/3] iwlwifi: fix regulatory Reinette Chatre
@ 2010-03-25 20:44 ` Reinette Chatre
  2010-03-25 20:44 ` [PATCH 3/3] iwlwifi: clear unattended interrupts in tasklet Reinette Chatre
  2 siblings, 0 replies; 4+ messages in thread
From: Reinette Chatre @ 2010-03-25 20:44 UTC (permalink / raw)
  To: linville
  Cc: linux-wireless, ipw3945-devel, Wey-Yi Guy, Reinette Chatre, stable

From: Wey-Yi Guy <wey-yi.w.guy@intel.com>

Forget one hunk in 4965 during "iwlwifi: error checking for number of tfds
in queue" patch.

Reported-by: Shanyu Zhao <shanyu.zhao@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
CC: stable@kernel.org
---
 drivers/net/wireless/iwlwifi/iwl-4965.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index 1bd2cd8..83c52a6 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -2041,16 +2041,14 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,
 				   tx_resp->failure_frame);
 
 		freed = iwl_tx_queue_reclaim(priv, txq_id, index);
-		if (qc && likely(sta_id != IWL_INVALID_STATION))
-			priv->stations[sta_id].tid[tid].tfds_in_queue -= freed;
+		iwl_free_tfds_in_queue(priv, sta_id, tid, freed);
 
 		if (priv->mac80211_registered &&
 		    (iwl_queue_space(&txq->q) > txq->q.low_mark))
 			iwl_wake_queue(priv, txq_id);
 	}
 
-	if (qc && likely(sta_id != IWL_INVALID_STATION))
-		iwl_txq_check_empty(priv, sta_id, tid, txq_id);
+	iwl_txq_check_empty(priv, sta_id, tid, txq_id);
 
 	if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK))
 		IWL_ERR(priv, "TODO:  Implement Tx ABORT REQUIRED!!!\n");
-- 
1.6.3.3


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

* [PATCH 3/3] iwlwifi: clear unattended interrupts in tasklet
  2010-03-25 20:44 [PATCH 0/3] iwlwifi fixes for 2.6.34 and stable Reinette Chatre
  2010-03-25 20:44 ` [PATCH 1/3] iwlwifi: fix regulatory Reinette Chatre
  2010-03-25 20:44 ` [PATCH 2/3] iwlwifi: counting number of tfds can be free for 4965 Reinette Chatre
@ 2010-03-25 20:44 ` Reinette Chatre
  2 siblings, 0 replies; 4+ messages in thread
From: Reinette Chatre @ 2010-03-25 20:44 UTC (permalink / raw)
  To: linville
  Cc: linux-wireless, ipw3945-devel, Shanyu Zhao, Zhu Yi, Reinette Chatre

From: Shanyu Zhao <shanyu.zhao@intel.com>

Previously in interrupt handling tasklet, iwlwifi driver only clear/ack
those interrupts that are enabled by the driver through inta_mask.
If the hardware generates unattended interrupts, driver will not ack them,
defeating the interrupt coalescing feature. This results in high number
of interrupts per second and high CPU utilization.

This patch addresses this issue by acking those unattended interrupts
in the tasklet. Local test showed an order of magnitude improvement
in terms of the number of interrupts without sacrificing networking
throughput. This is a workaround for hardware issue.

Signed-off-by: Shanyu Zhao <shanyu.zhao@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-agn.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index c8e2e3a..e4c2e1e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -1258,7 +1258,15 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
 	/* Ack/clear/reset pending uCode interrupts.
 	 * Note:  Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS,
 	 */
-	iwl_write32(priv, CSR_INT, priv->inta);
+	/* There is a hardware bug in the interrupt mask function that some
+	 * interrupts (i.e. CSR_INT_BIT_SCD) can still be generated even if
+	 * they are disabled in the CSR_INT_MASK register. Furthermore the
+	 * ICT interrupt handling mechanism has another bug that might cause
+	 * these unmasked interrupts fail to be detected. We workaround the
+	 * hardware bugs here by ACKing all the possible interrupts so that
+	 * interrupt coalescing can still be achieved.
+	 */
+	iwl_write32(priv, CSR_INT, priv->inta | ~priv->inta_mask);
 
 	inta = priv->inta;
 
-- 
1.6.3.3


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

end of thread, other threads:[~2010-03-25 20:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-03-25 20:44 [PATCH 0/3] iwlwifi fixes for 2.6.34 and stable Reinette Chatre
2010-03-25 20:44 ` [PATCH 1/3] iwlwifi: fix regulatory Reinette Chatre
2010-03-25 20:44 ` [PATCH 2/3] iwlwifi: counting number of tfds can be free for 4965 Reinette Chatre
2010-03-25 20:44 ` [PATCH 3/3] iwlwifi: clear unattended interrupts in tasklet Reinette Chatre

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).