Commit eec81277 authored by Philipp Stanner's avatar Philipp Stanner Committed by Michael S. Tsirkin
Browse files

vdpa/octeon_ep: Control PCI dev enabling manually



PCI region request functions such as pci_request_region() currently have
the problem of becoming sometimes managed functions, if
pcim_enable_device() instead of pci_enable_device() was called. The PCI
subsystem wants to remove this deprecated behavior from its interfaces.

octeopn_ep enables its device with pcim_enable_device() (for VF. PF uses
manual management), but does so only to get automatic disablement. The
driver wants to manage its PCI resources for VF manually, without devres.

The easiest way not to use automatic resource management at all is by
also handling device enable- and disablement manually.

Replace pcim_enable_device() with pci_enable_device(). Add the necessary
calls to pci_disable_device().

Signed-off-by: default avatarPhilipp Stanner <phasta@kernel.org>
Acked-by: default avatarVamsi Attunuru <vattunuru@marvell.com>
Message-Id: <20250508085134.24084-2-phasta@kernel.org>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Tested-by: default avatarLei Yang <leiyang@redhat.com>
Signed-off-by: default avatarPhilipp Stanner &amp;lt;&lt;a href="mailto:phasta@kernel.org" <target="_blank"&gt;phasta@kernel.org&lt;/a&gt;&amp;gt;&lt;br>
Acked-by: default avatarVamsi Attunuru &amp;lt;&lt;a href="mailto:vattunuru@marvell.com" <target="_blank"&gt;vattunuru@marvell.com&lt;/a&gt;&amp;gt;&lt;br>
parent ac9dcca2
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -454,6 +454,9 @@ static void octep_vdpa_remove_pf(struct pci_dev *pdev)
		octep_iounmap_region(pdev, octpf->base, OCTEP_HW_MBOX_BAR);

	octep_vdpa_pf_bar_expand(octpf);

	/* The pf version does not use managed PCI. */
	pci_disable_device(pdev);
}

static void octep_vdpa_vf_bar_shrink(struct pci_dev *pdev)
@@ -825,7 +828,7 @@ static int octep_vdpa_probe_pf(struct pci_dev *pdev)
	struct octep_pf *octpf;
	int ret;

	ret = pcim_enable_device(pdev);
	ret = pci_enable_device(pdev);
	if (ret) {
		dev_err(dev, "Failed to enable device\n");
		return ret;
@@ -834,15 +837,17 @@ static int octep_vdpa_probe_pf(struct pci_dev *pdev)
	ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));
	if (ret) {
		dev_err(dev, "No usable DMA configuration\n");
		return ret;
		goto disable_pci;
	}
	octpf = devm_kzalloc(dev, sizeof(*octpf), GFP_KERNEL);
	if (!octpf)
		return -ENOMEM;
	if (!octpf) {
		ret = -ENOMEM;
		goto disable_pci;
	}

	ret = octep_iomap_region(pdev, octpf->base, OCTEP_HW_MBOX_BAR);
	if (ret)
		return ret;
		goto disable_pci;

	pci_set_master(pdev);
	pci_set_drvdata(pdev, octpf);
@@ -856,6 +861,8 @@ static int octep_vdpa_probe_pf(struct pci_dev *pdev)

unmap_region:
	octep_iounmap_region(pdev, octpf->base, OCTEP_HW_MBOX_BAR);
disable_pci:
	pci_disable_device(pdev);
	return ret;
}