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