diff options
author | Johannes Berg <johannes.berg@intel.com> | 2012-12-27 21:43:48 +0100 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-02-05 14:39:12 +0100 |
commit | 2bfb50924c7e92362ac937aef2ab56bc7bd3ca52 (patch) | |
tree | 26518070c19eb9cfb38ab48cda31fe16c1235433 /drivers/net/wireless/iwlwifi/pcie/internal.h | |
parent | c9f7a8ab7792b48259af6e94706a5d02dd74caef (diff) | |
download | lwn-2bfb50924c7e92362ac937aef2ab56bc7bd3ca52.tar.gz lwn-2bfb50924c7e92362ac937aef2ab56bc7bd3ca52.zip |
iwlwifi: use threaded interrupt handler
With new transports coming up, move to threaded
interrupt handling now. This has the advantage
that we can use the same locking scheme with all
different transports we may need to implement.
Note that the TX path obviously still runs in a
tasklet, so some spin_lock() calls need to change
to spin_lock_bh() calls to properly lock out the
TX path.
In my test on a Calpella platform this has no
impact on throughput or latency.
Also add lockdep annotations to avoid lockups due
to catch sending synchronous commands or using
locks that connect with them from the irq thread.
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/pcie/internal.h')
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/internal.h | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/net/wireless/iwlwifi/pcie/internal.h b/drivers/net/wireless/iwlwifi/pcie/internal.h index 5f6bb4e09d42..aa2a39a637dd 100644 --- a/drivers/net/wireless/iwlwifi/pcie/internal.h +++ b/drivers/net/wireless/iwlwifi/pcie/internal.h @@ -249,7 +249,6 @@ struct iwl_trans_pcie { int ict_index; u32 inta; bool use_ict; - struct tasklet_struct irq_tasklet; struct isr_statistics isr_stats; spinlock_t irq_lock; @@ -330,7 +329,7 @@ void iwl_trans_pcie_free(struct iwl_trans *trans); * RX ******************************************************/ int iwl_pcie_rx_init(struct iwl_trans *trans); -void iwl_pcie_tasklet(struct iwl_trans *trans); +irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id); int iwl_pcie_rx_stop(struct iwl_trans *trans); void iwl_pcie_rx_free(struct iwl_trans *trans); |