diff options
author | Johannes Berg <johannes.berg@intel.com> | 2012-12-27 16:58:21 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-01-03 09:33:00 -0500 |
commit | 0aa86df673d2122fcffc43ed0266279e1b8d8204 (patch) | |
tree | 972837dccd252e075cf945866be1dc6bf688af74 /drivers/net/wireless/iwlwifi/pcie | |
parent | a8b691e6104e6bd27070b6ed6622d0b640707fa8 (diff) |
iwlwifi: move some PCIe calls to better places
Synchronizing the IRQ is pointless when we will
then enable the RF-Kill interrupt again, but is
needed before we free it and the data needed to
handle IRQs; move it to the free function.
Simiarly, cancelling the replenish work struct
can move to the function that frees the RX data
structures.
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')
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/rx.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/trans.c | 9 |
2 files changed, 5 insertions, 6 deletions
diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c index dad4c4aad91f..02c9016d9684 100644 --- a/drivers/net/wireless/iwlwifi/pcie/rx.c +++ b/drivers/net/wireless/iwlwifi/pcie/rx.c | |||
@@ -545,6 +545,8 @@ void iwl_pcie_rx_free(struct iwl_trans *trans) | |||
545 | return; | 545 | return; |
546 | } | 546 | } |
547 | 547 | ||
548 | cancel_work_sync(&trans_pcie->rx_replenish); | ||
549 | |||
548 | spin_lock_irqsave(&rxq->lock, flags); | 550 | spin_lock_irqsave(&rxq->lock, flags); |
549 | iwl_pcie_rxq_free_rbs(trans); | 551 | iwl_pcie_rxq_free_rbs(trans); |
550 | spin_unlock_irqrestore(&rxq->lock, flags); | 552 | spin_unlock_irqrestore(&rxq->lock, flags); |
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c index 48cd65e950a1..bca620363037 100644 --- a/drivers/net/wireless/iwlwifi/pcie/trans.c +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c | |||
@@ -534,12 +534,6 @@ static void iwl_trans_pcie_stop_device(struct iwl_trans *trans) | |||
534 | 534 | ||
535 | iwl_enable_rfkill_int(trans); | 535 | iwl_enable_rfkill_int(trans); |
536 | 536 | ||
537 | /* wait to make sure we flush pending tasklet*/ | ||
538 | synchronize_irq(trans_pcie->pci_dev->irq); | ||
539 | tasklet_kill(&trans_pcie->irq_tasklet); | ||
540 | |||
541 | cancel_work_sync(&trans_pcie->rx_replenish); | ||
542 | |||
543 | /* stop and reset the on-board processor */ | 537 | /* stop and reset the on-board processor */ |
544 | iwl_write32(trans, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET); | 538 | iwl_write32(trans, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET); |
545 | 539 | ||
@@ -682,6 +676,9 @@ void iwl_trans_pcie_free(struct iwl_trans *trans) | |||
682 | { | 676 | { |
683 | struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); | 677 | struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); |
684 | 678 | ||
679 | synchronize_irq(trans_pcie->pci_dev->irq); | ||
680 | tasklet_kill(&trans_pcie->irq_tasklet); | ||
681 | |||
685 | iwl_pcie_tx_free(trans); | 682 | iwl_pcie_tx_free(trans); |
686 | iwl_pcie_rx_free(trans); | 683 | iwl_pcie_rx_free(trans); |
687 | 684 | ||