From: Reinette Chatre <reinette.chatre@intel.com>
To: linville@tuxdriver.com
Cc: linux-wireless@vger.kernel.org,
ipw3945-devel@lists.sourceforge.net,
Wey-Yi Guy <wey-yi.w.guy@intel.com>,
Reinette Chatre <reinette.chatre@intel.com>
Subject: [PATCH 21/22] iwlwifi: change spin_lock to spin_lock_irqsave
Date: Thu, 25 Mar 2010 13:44:49 -0700 [thread overview]
Message-ID: <1269549890-19195-22-git-send-email-reinette.chatre@intel.com> (raw)
In-Reply-To: <1269549890-19195-1-git-send-email-reinette.chatre@intel.com>
From: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Use spin_lock_irqsave() in interrupt handler to disable interrupts locally
and provide the spinlock on SMP. This covers both interrupt and SMP
concurrency.
With this changes, also fix the sparse warning issues.
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Acked-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
---
drivers/net/wireless/iwlwifi/iwl-agn-ict.c | 14 ++++++++------
drivers/net/wireless/iwlwifi/iwl-core.c | 7 ++++---
2 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-ict.c b/drivers/net/wireless/iwlwifi/iwl-agn-ict.c
index 4c5395e..a273e37 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-ict.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-ict.c
@@ -141,13 +141,14 @@ static irqreturn_t iwl_isr(int irq, void *data)
{
struct iwl_priv *priv = data;
u32 inta, inta_mask;
+ unsigned long flags;
#ifdef CONFIG_IWLWIFI_DEBUG
u32 inta_fh;
#endif
if (!priv)
return IRQ_NONE;
- spin_lock(&priv->lock);
+ spin_lock_irqsave(&priv->lock, flags);
/* Disable (but don't clear!) interrupts here to avoid
* back-to-back ISRs and sporadic interrupts from our NIC.
@@ -190,7 +191,7 @@ static irqreturn_t iwl_isr(int irq, void *data)
iwl_enable_interrupts(priv);
unplugged:
- spin_unlock(&priv->lock);
+ spin_unlock_irqrestore(&priv->lock, flags);
return IRQ_HANDLED;
none:
@@ -199,7 +200,7 @@ static irqreturn_t iwl_isr(int irq, void *data)
if (test_bit(STATUS_INT_ENABLED, &priv->status) && !priv->_agn.inta)
iwl_enable_interrupts(priv);
- spin_unlock(&priv->lock);
+ spin_unlock_irqrestore(&priv->lock, flags);
return IRQ_NONE;
}
@@ -216,6 +217,7 @@ irqreturn_t iwl_isr_ict(int irq, void *data)
struct iwl_priv *priv = data;
u32 inta, inta_mask;
u32 val = 0;
+ unsigned long flags;
if (!priv)
return IRQ_NONE;
@@ -226,7 +228,7 @@ irqreturn_t iwl_isr_ict(int irq, void *data)
if (!priv->_agn.use_ict)
return iwl_isr(irq, data);
- spin_lock(&priv->lock);
+ spin_lock_irqsave(&priv->lock, flags);
/* Disable (but don't clear!) interrupts here to avoid
* back-to-back ISRs and sporadic interrupts from our NIC.
@@ -290,7 +292,7 @@ irqreturn_t iwl_isr_ict(int irq, void *data)
iwl_enable_interrupts(priv);
}
- spin_unlock(&priv->lock);
+ spin_unlock_irqrestore(&priv->lock, flags);
return IRQ_HANDLED;
none:
@@ -300,6 +302,6 @@ irqreturn_t iwl_isr_ict(int irq, void *data)
if (test_bit(STATUS_INT_ENABLED, &priv->status) && !priv->_agn.inta)
iwl_enable_interrupts(priv);
- spin_unlock(&priv->lock);
+ spin_unlock_irqrestore(&priv->lock, flags);
return IRQ_NONE;
}
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index d152198..9e48352 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -1531,10 +1531,11 @@ irqreturn_t iwl_isr_legacy(int irq, void *data)
struct iwl_priv *priv = data;
u32 inta, inta_mask;
u32 inta_fh;
+ unsigned long flags;
if (!priv)
return IRQ_NONE;
- spin_lock(&priv->lock);
+ spin_lock_irqsave(&priv->lock, flags);
/* Disable (but don't clear!) interrupts here to avoid
* back-to-back ISRs and sporadic interrupts from our NIC.
@@ -1572,7 +1573,7 @@ irqreturn_t iwl_isr_legacy(int irq, void *data)
tasklet_schedule(&priv->irq_tasklet);
unplugged:
- spin_unlock(&priv->lock);
+ spin_unlock_irqrestore(&priv->lock, flags);
return IRQ_HANDLED;
none:
@@ -1580,7 +1581,7 @@ irqreturn_t iwl_isr_legacy(int irq, void *data)
/* only Re-enable if diabled by irq */
if (test_bit(STATUS_INT_ENABLED, &priv->status))
iwl_enable_interrupts(priv);
- spin_unlock(&priv->lock);
+ spin_unlock_irqrestore(&priv->lock, flags);
return IRQ_NONE;
}
EXPORT_SYMBOL(iwl_isr_legacy);
--
1.6.3.3
next prev parent reply other threads:[~2010-03-25 20:45 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-25 20:44 [PATCH 00/22] iwlwifi updates for 2.6.35 Reinette Chatre
2010-03-25 20:44 ` [PATCH 01/22] Revert "iwlwifi: fix build error for CONFIG_IWLAGN=n" Reinette Chatre
2010-03-25 20:44 ` [PATCH 02/22] iwlwifi: iwl_good_ack_health() only apply to AGN device Reinette Chatre
2010-03-25 20:44 ` [PATCH 03/22] iwlwifi: move ucode loading related code to separated file Reinette Chatre
2010-03-25 20:44 ` [PATCH 04/22] iwlwifi: code cleanup for "load ucode" function Reinette Chatre
2010-03-25 20:44 ` [PATCH 05/22] iwlwifi: move hcmd related code to separate file Reinette Chatre
2010-03-25 20:44 ` [PATCH 06/22] iwlwifi: move tx queue " Reinette Chatre
2010-03-25 20:44 ` [PATCH 07/22] iwlwifi: move hw related defines " Reinette Chatre
2010-03-25 20:44 ` [PATCH 08/22] iwlwifi: move ucode alive related code " Reinette Chatre
2010-03-25 20:44 ` [PATCH 09/22] iwlwifi: move agn common code to iwlagn library file Reinette Chatre
2010-03-25 20:44 ` [PATCH 10/22] iwlwifi: each device has its own eeprom tx power version Reinette Chatre
2010-03-25 20:44 ` [PATCH 11/22] iwlwifi: move agn module parameter structure to common place Reinette Chatre
2010-03-25 20:44 ` [PATCH 12/22] iwlwifi: move agn only tx functions from iwlcore to iwlagn Reinette Chatre
2010-03-25 20:44 ` [PATCH 13/22] iwlwifi: move agn only rx " Reinette Chatre
2010-03-25 20:44 ` [PATCH 14/22] iwlwifi: more clean up to " Reinette Chatre
2010-03-25 20:44 ` [PATCH 15/22] iwlwifi: enable '6000 Series 2x2 AGN Gen2' adaptors Reinette Chatre
2010-03-25 20:44 ` [PATCH 16/22] iwlwifi: remove non-exist extern functions and structures Reinette Chatre
2010-03-25 20:44 ` [PATCH 17/22] iwlwifi: add missing email address information Reinette Chatre
2010-03-25 20:44 ` [PATCH 18/22] iwlwifi: remove noise reporting Reinette Chatre
2010-03-25 20:44 ` [PATCH 19/22] iwlwifi: Generic approach to measure temperature Reinette Chatre
2010-03-25 20:44 ` [PATCH 20/22] iwlwifi: remove "\n" from module parameter description Reinette Chatre
2010-03-25 20:44 ` Reinette Chatre [this message]
2010-03-25 21:10 ` [PATCH 21/22] iwlwifi: change spin_lock to spin_lock_irqsave Pavel Roskin
2010-03-26 2:49 ` [ipw3945-devel] " Zhu Yi
2010-03-26 15:04 ` Guy, Wey-Yi
2010-03-26 16:25 ` Pavel Roskin
2010-03-29 1:47 ` Zhu Yi
2010-03-25 20:44 ` [PATCH 22/22] iwlwifi: avoid device type checking in generic code Reinette Chatre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1269549890-19195-22-git-send-email-reinette.chatre@intel.com \
--to=reinette.chatre@intel.com \
--cc=ipw3945-devel@lists.sourceforge.net \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=wey-yi.w.guy@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).