Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ struct iwl_trans *iwl_trans_alloc(unsigned int priv_size,
	static struct lock_class_key __key;
#endif

	trans = kzalloc(sizeof(*trans) + priv_size, GFP_KERNEL);
	trans = devm_kzalloc(dev, sizeof(*trans) + priv_size, GFP_KERNEL);
	if (!trans)
		return NULL;

@@ -103,18 +103,14 @@ struct iwl_trans *iwl_trans_alloc(unsigned int priv_size,
				  SLAB_HWCACHE_ALIGN,
				  NULL);
	if (!trans->dev_cmd_pool)
		goto free;
		return NULL;

	return trans;
 free:
	kfree(trans);
	return NULL;
}

void iwl_trans_free(struct iwl_trans *trans)
{
	kmem_cache_destroy(trans->dev_cmd_pool);
	kfree(trans);
}

int iwl_trans_send_cmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd)
+32 −49
Original line number Diff line number Diff line
@@ -1605,24 +1605,22 @@ static int iwl_pcie_init_msix_handler(struct pci_dev *pdev,

	for (i = 0; i < trans_pcie->alloc_vecs; i++) {
		int ret;
		struct msix_entry *msix_entry;

		ret = request_threaded_irq(trans_pcie->msix_entries[i].vector,
		msix_entry = &trans_pcie->msix_entries[i];
		ret = devm_request_threaded_irq(&pdev->dev,
						msix_entry->vector,
						iwl_pcie_msix_isr,
						(i == trans_pcie->def_irq) ?
						iwl_pcie_irq_msix_handler :
						iwl_pcie_irq_rx_msix_handler,
						IRQF_SHARED,
						DRV_NAME,
					   &trans_pcie->msix_entries[i]);
						msix_entry);
		if (ret) {
			int j;

			IWL_ERR(trans_pcie->trans,
				"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;
		}
	}
@@ -1789,23 +1787,12 @@ void iwl_trans_pcie_free(struct iwl_trans *trans)
			irq_set_affinity_hint(
				trans_pcie->msix_entries[i].vector,
				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;
	} else {
		free_irq(trans_pcie->pci_dev->irq, 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);

@@ -2912,6 +2899,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
	struct iwl_trans *trans;
	int ret, addr_size;

	ret = pcim_enable_device(pdev);
	if (ret)
		return ERR_PTR(ret);

	trans = iwl_trans_alloc(sizeof(struct iwl_trans_pcie),
				&pdev->dev, cfg, &trans_ops_pcie, 0);
	if (!trans)
@@ -2930,9 +2921,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
		goto out_no_pci;
	}

	ret = pci_enable_device(pdev);
	if (ret)
		goto out_no_pci;

	if (!cfg->base_params->pcie_l1_allowed) {
		/*
@@ -2974,21 +2962,21 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
		/* both attempts failed: */
		if (ret) {
			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) {
		dev_err(&pdev->dev, "pci_request_regions failed\n");
		goto out_pci_disable_device;
		dev_err(&pdev->dev, "pcim_iomap_regions_request_all failed\n");
		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) {
		dev_err(&pdev->dev, "pci_ioremap_bar failed\n");
		dev_err(&pdev->dev, "pcim_iomap_table failed\n");
		ret = -ENODEV;
		goto out_pci_release_regions;
		goto out_no_pci;
	}

	/* We disable the RETRY_TIMEOUT register (0x41) to keep
@@ -3015,7 +3003,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
		ret = iwl_pcie_prepare_card_hw(trans);
		if (ret) {
			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,
				   25000);
		if (ret < 0) {
			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)) {
@@ -3064,13 +3052,14 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,

	if (trans_pcie->msix_enabled) {
		if (iwl_pcie_init_msix_handler(pdev, trans_pcie))
			goto out_pci_release_regions;
			goto out_no_pci;
	 } else {
		ret = iwl_pcie_alloc_ict(trans);
		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_isr,
						iwl_pcie_irq_handler,
						IRQF_SHARED, DRV_NAME, trans);
		if (ret) {
@@ -3090,12 +3079,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,

out_free_ict:
	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:
	free_percpu(trans_pcie->tso_hdr_page);
	iwl_trans_free(trans);