提交 f63ae01d 编写于 作者: D David S. Miller

Merge tag 'wireless-drivers-for-davem-2017-08-25' of...

Merge tag 'wireless-drivers-for-davem-2017-08-25' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers

Kalle Valo says:

====================
wireless-drivers fixes for 4.13

Only one iwlwifi patch this time.

iwlwifi

* fix multiple times reported lockdep warning found by new locking
  annotation introduced in v4.13-rc1
====================
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
...@@ -787,6 +787,8 @@ int iwl_pci_fw_enter_d0i3(struct iwl_trans *trans); ...@@ -787,6 +787,8 @@ int iwl_pci_fw_enter_d0i3(struct iwl_trans *trans);
void iwl_pcie_enable_rx_wake(struct iwl_trans *trans, bool enable); void iwl_pcie_enable_rx_wake(struct iwl_trans *trans, bool enable);
void iwl_pcie_rx_allocator_work(struct work_struct *data);
/* common functions that are used by gen2 transport */ /* common functions that are used by gen2 transport */
void iwl_pcie_apm_config(struct iwl_trans *trans); void iwl_pcie_apm_config(struct iwl_trans *trans);
int iwl_pcie_prepare_card_hw(struct iwl_trans *trans); int iwl_pcie_prepare_card_hw(struct iwl_trans *trans);
......
...@@ -597,7 +597,7 @@ static void iwl_pcie_rx_allocator_get(struct iwl_trans *trans, ...@@ -597,7 +597,7 @@ static void iwl_pcie_rx_allocator_get(struct iwl_trans *trans,
rxq->free_count += RX_CLAIM_REQ_ALLOC; rxq->free_count += RX_CLAIM_REQ_ALLOC;
} }
static void iwl_pcie_rx_allocator_work(struct work_struct *data) void iwl_pcie_rx_allocator_work(struct work_struct *data)
{ {
struct iwl_rb_allocator *rba_p = struct iwl_rb_allocator *rba_p =
container_of(data, struct iwl_rb_allocator, rx_alloc); container_of(data, struct iwl_rb_allocator, rx_alloc);
...@@ -900,10 +900,6 @@ static int _iwl_pcie_rx_init(struct iwl_trans *trans) ...@@ -900,10 +900,6 @@ static int _iwl_pcie_rx_init(struct iwl_trans *trans)
return err; return err;
} }
def_rxq = trans_pcie->rxq; def_rxq = trans_pcie->rxq;
if (!rba->alloc_wq)
rba->alloc_wq = alloc_workqueue("rb_allocator",
WQ_HIGHPRI | WQ_UNBOUND, 1);
INIT_WORK(&rba->rx_alloc, iwl_pcie_rx_allocator_work);
spin_lock(&rba->lock); spin_lock(&rba->lock);
atomic_set(&rba->req_pending, 0); atomic_set(&rba->req_pending, 0);
...@@ -1017,10 +1013,6 @@ void iwl_pcie_rx_free(struct iwl_trans *trans) ...@@ -1017,10 +1013,6 @@ void iwl_pcie_rx_free(struct iwl_trans *trans)
} }
cancel_work_sync(&rba->rx_alloc); cancel_work_sync(&rba->rx_alloc);
if (rba->alloc_wq) {
destroy_workqueue(rba->alloc_wq);
rba->alloc_wq = NULL;
}
iwl_pcie_free_rbs_pool(trans); iwl_pcie_free_rbs_pool(trans);
......
...@@ -1786,6 +1786,11 @@ void iwl_trans_pcie_free(struct iwl_trans *trans) ...@@ -1786,6 +1786,11 @@ void iwl_trans_pcie_free(struct iwl_trans *trans)
iwl_pcie_tx_free(trans); iwl_pcie_tx_free(trans);
iwl_pcie_rx_free(trans); iwl_pcie_rx_free(trans);
if (trans_pcie->rba.alloc_wq) {
destroy_workqueue(trans_pcie->rba.alloc_wq);
trans_pcie->rba.alloc_wq = NULL;
}
if (trans_pcie->msix_enabled) { if (trans_pcie->msix_enabled) {
for (i = 0; i < trans_pcie->alloc_vecs; i++) { for (i = 0; i < trans_pcie->alloc_vecs; i++) {
irq_set_affinity_hint( irq_set_affinity_hint(
...@@ -3169,6 +3174,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, ...@@ -3169,6 +3174,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
trans_pcie->inta_mask = CSR_INI_SET_MASK; trans_pcie->inta_mask = CSR_INI_SET_MASK;
} }
trans_pcie->rba.alloc_wq = alloc_workqueue("rb_allocator",
WQ_HIGHPRI | WQ_UNBOUND, 1);
INIT_WORK(&trans_pcie->rba.rx_alloc, iwl_pcie_rx_allocator_work);
#ifdef CONFIG_IWLWIFI_PCIE_RTPM #ifdef CONFIG_IWLWIFI_PCIE_RTPM
trans->runtime_pm_mode = IWL_PLAT_PM_MODE_D0I3; trans->runtime_pm_mode = IWL_PLAT_PM_MODE_D0I3;
#else #else
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册