Commit 5a41a86c authored by Sharon Dvir's avatar Sharon Dvir Committed by Luca Coelho

iwlwifi: migrate to devm_* API

Change PCIE and trans resource allocations to managed resources.
Signed-off-by: default avatarSharon Dvir <sharon.dvir@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 341d7eb8
...@@ -78,7 +78,7 @@ struct iwl_trans *iwl_trans_alloc(unsigned int priv_size, ...@@ -78,7 +78,7 @@ struct iwl_trans *iwl_trans_alloc(unsigned int priv_size,
static struct lock_class_key __key; static struct lock_class_key __key;
#endif #endif
trans = kzalloc(sizeof(*trans) + priv_size, GFP_KERNEL); trans = devm_kzalloc(dev, sizeof(*trans) + priv_size, GFP_KERNEL);
if (!trans) if (!trans)
return NULL; return NULL;
...@@ -103,18 +103,14 @@ struct iwl_trans *iwl_trans_alloc(unsigned int priv_size, ...@@ -103,18 +103,14 @@ struct iwl_trans *iwl_trans_alloc(unsigned int priv_size,
SLAB_HWCACHE_ALIGN, SLAB_HWCACHE_ALIGN,
NULL); NULL);
if (!trans->dev_cmd_pool) if (!trans->dev_cmd_pool)
goto free; return NULL;
return trans; return trans;
free:
kfree(trans);
return NULL;
} }
void iwl_trans_free(struct iwl_trans *trans) void iwl_trans_free(struct iwl_trans *trans)
{ {
kmem_cache_destroy(trans->dev_cmd_pool); kmem_cache_destroy(trans->dev_cmd_pool);
kfree(trans);
} }
int iwl_trans_send_cmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd) int iwl_trans_send_cmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd)
......
...@@ -1605,24 +1605,22 @@ static int iwl_pcie_init_msix_handler(struct pci_dev *pdev, ...@@ -1605,24 +1605,22 @@ static int iwl_pcie_init_msix_handler(struct pci_dev *pdev,
for (i = 0; i < trans_pcie->alloc_vecs; i++) { for (i = 0; i < trans_pcie->alloc_vecs; i++) {
int ret; int ret;
struct msix_entry *msix_entry;
ret = request_threaded_irq(trans_pcie->msix_entries[i].vector,
iwl_pcie_msix_isr, msix_entry = &trans_pcie->msix_entries[i];
(i == trans_pcie->def_irq) ? ret = devm_request_threaded_irq(&pdev->dev,
iwl_pcie_irq_msix_handler : msix_entry->vector,
iwl_pcie_irq_rx_msix_handler, iwl_pcie_msix_isr,
IRQF_SHARED, (i == trans_pcie->def_irq) ?
DRV_NAME, iwl_pcie_irq_msix_handler :
&trans_pcie->msix_entries[i]); iwl_pcie_irq_rx_msix_handler,
IRQF_SHARED,
DRV_NAME,
msix_entry);
if (ret) { if (ret) {
int j;
IWL_ERR(trans_pcie->trans, IWL_ERR(trans_pcie->trans,
"Error allocating IRQ %d\n", i); "Error allocating IRQ %d\n", i);
for (j = 0; j < i; j++)
free_irq(trans_pcie->msix_entries[j].vector,
&trans_pcie->msix_entries[j]);
pci_disable_msix(pdev);
return ret; return ret;
} }
} }
...@@ -1789,23 +1787,12 @@ void iwl_trans_pcie_free(struct iwl_trans *trans) ...@@ -1789,23 +1787,12 @@ void iwl_trans_pcie_free(struct iwl_trans *trans)
irq_set_affinity_hint( irq_set_affinity_hint(
trans_pcie->msix_entries[i].vector, trans_pcie->msix_entries[i].vector,
NULL); NULL);
free_irq(trans_pcie->msix_entries[i].vector,
&trans_pcie->msix_entries[i]);
} }
pci_disable_msix(trans_pcie->pci_dev);
trans_pcie->msix_enabled = false; trans_pcie->msix_enabled = false;
} else { } else {
free_irq(trans_pcie->pci_dev->irq, trans);
iwl_pcie_free_ict(trans); iwl_pcie_free_ict(trans);
pci_disable_msi(trans_pcie->pci_dev);
} }
iounmap(trans_pcie->hw_base);
pci_release_regions(trans_pcie->pci_dev);
pci_disable_device(trans_pcie->pci_dev);
iwl_pcie_free_fw_monitor(trans); iwl_pcie_free_fw_monitor(trans);
...@@ -2912,6 +2899,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, ...@@ -2912,6 +2899,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
struct iwl_trans *trans; struct iwl_trans *trans;
int ret, addr_size; int ret, addr_size;
ret = pcim_enable_device(pdev);
if (ret)
return ERR_PTR(ret);
trans = iwl_trans_alloc(sizeof(struct iwl_trans_pcie), trans = iwl_trans_alloc(sizeof(struct iwl_trans_pcie),
&pdev->dev, cfg, &trans_ops_pcie, 0); &pdev->dev, cfg, &trans_ops_pcie, 0);
if (!trans) if (!trans)
...@@ -2930,9 +2921,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, ...@@ -2930,9 +2921,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
goto out_no_pci; goto out_no_pci;
} }
ret = pci_enable_device(pdev);
if (ret)
goto out_no_pci;
if (!cfg->base_params->pcie_l1_allowed) { if (!cfg->base_params->pcie_l1_allowed) {
/* /*
...@@ -2974,21 +2962,21 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, ...@@ -2974,21 +2962,21 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
/* both attempts failed: */ /* both attempts failed: */
if (ret) { if (ret) {
dev_err(&pdev->dev, "No suitable DMA available\n"); dev_err(&pdev->dev, "No suitable DMA available\n");
goto out_pci_disable_device; goto out_no_pci;
} }
} }
ret = pci_request_regions(pdev, DRV_NAME); ret = pcim_iomap_regions_request_all(pdev, BIT(0), DRV_NAME);
if (ret) { if (ret) {
dev_err(&pdev->dev, "pci_request_regions failed\n"); dev_err(&pdev->dev, "pcim_iomap_regions_request_all failed\n");
goto out_pci_disable_device; goto out_no_pci;
} }
trans_pcie->hw_base = pci_ioremap_bar(pdev, 0); trans_pcie->hw_base = pcim_iomap_table(pdev)[0];
if (!trans_pcie->hw_base) { if (!trans_pcie->hw_base) {
dev_err(&pdev->dev, "pci_ioremap_bar failed\n"); dev_err(&pdev->dev, "pcim_iomap_table failed\n");
ret = -ENODEV; ret = -ENODEV;
goto out_pci_release_regions; goto out_no_pci;
} }
/* We disable the RETRY_TIMEOUT register (0x41) to keep /* We disable the RETRY_TIMEOUT register (0x41) to keep
...@@ -3015,7 +3003,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, ...@@ -3015,7 +3003,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
ret = iwl_pcie_prepare_card_hw(trans); ret = iwl_pcie_prepare_card_hw(trans);
if (ret) { if (ret) {
IWL_WARN(trans, "Exit HW not ready\n"); IWL_WARN(trans, "Exit HW not ready\n");
goto out_pci_disable_msi; goto out_no_pci;
} }
/* /*
...@@ -3032,7 +3020,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, ...@@ -3032,7 +3020,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
25000); 25000);
if (ret < 0) { if (ret < 0) {
IWL_DEBUG_INFO(trans, "Failed to wake up the nic\n"); IWL_DEBUG_INFO(trans, "Failed to wake up the nic\n");
goto out_pci_disable_msi; goto out_no_pci;
} }
if (iwl_trans_grab_nic_access(trans, &flags)) { if (iwl_trans_grab_nic_access(trans, &flags)) {
...@@ -3064,15 +3052,16 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, ...@@ -3064,15 +3052,16 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
if (trans_pcie->msix_enabled) { if (trans_pcie->msix_enabled) {
if (iwl_pcie_init_msix_handler(pdev, trans_pcie)) if (iwl_pcie_init_msix_handler(pdev, trans_pcie))
goto out_pci_release_regions; goto out_no_pci;
} else { } else {
ret = iwl_pcie_alloc_ict(trans); ret = iwl_pcie_alloc_ict(trans);
if (ret) if (ret)
goto out_pci_disable_msi; goto out_no_pci;
ret = request_threaded_irq(pdev->irq, iwl_pcie_isr, ret = devm_request_threaded_irq(&pdev->dev, pdev->irq,
iwl_pcie_irq_handler, iwl_pcie_isr,
IRQF_SHARED, DRV_NAME, trans); iwl_pcie_irq_handler,
IRQF_SHARED, DRV_NAME, trans);
if (ret) { if (ret) {
IWL_ERR(trans, "Error allocating IRQ %d\n", pdev->irq); IWL_ERR(trans, "Error allocating IRQ %d\n", pdev->irq);
goto out_free_ict; goto out_free_ict;
...@@ -3090,12 +3079,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, ...@@ -3090,12 +3079,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
out_free_ict: out_free_ict:
iwl_pcie_free_ict(trans); iwl_pcie_free_ict(trans);
out_pci_disable_msi:
pci_disable_msi(pdev);
out_pci_release_regions:
pci_release_regions(pdev);
out_pci_disable_device:
pci_disable_device(pdev);
out_no_pci: out_no_pci:
free_percpu(trans_pcie->tso_hdr_page); free_percpu(trans_pcie->tso_hdr_page);
iwl_trans_free(trans); iwl_trans_free(trans);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment