Commit 4ec36dfe authored by Amey Narkhede's avatar Amey Narkhede Committed by Bjorn Helgaas
Browse files

PCI: Remove reset_fn field from pci_dev



"reset_fn" indicates whether the device supports any reset mechanism.
Remove the use of reset_fn in favor of the reset_methods array that tracks
supported reset mechanisms of a device and their ordering.

The octeon driver incorrectly used reset_fn to detect whether the device
supports FLR or not. Use pcie_reset_flr() to probe whether it supports FLR.

Co-developed-by: default avatarAlex Williamson <alex.williamson@redhat.com>
Link: https://lore.kernel.org/r/20210817180500.1253-5-ameynarkhede03@gmail.com


Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
Signed-off-by: default avatarAmey Narkhede <ameynarkhede03@gmail.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Reviewed-by: default avatarAlex Williamson <alex.williamson@redhat.com>
Reviewed-by: default avatarRaphael Norwitz <raphael.norwitz@nutanix.com>
parent e20afa06
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -526,7 +526,7 @@ static void octeon_destroy_resources(struct octeon_device *oct)
			oct->irq_name_storage = NULL;
		}
		/* Soft reset the octeon device before exiting */
		if (oct->pci_dev->reset_fn)
		if (!pcie_reset_flr(oct->pci_dev, 1))
			octeon_pci_flr(oct);
		else
			cn23xx_vf_ask_pf_to_do_flr(oct);
+1 −1
Original line number Diff line number Diff line
@@ -1367,7 +1367,7 @@ static umode_t pci_dev_reset_attr_is_visible(struct kobject *kobj,
{
	struct pci_dev *pdev = to_pci_dev(kobj_to_dev(kobj));

	if (!pdev->reset_fn)
	if (!pci_reset_supported(pdev))
		return 0;

	return a->mode;
+3 −3
Original line number Diff line number Diff line
@@ -5234,7 +5234,7 @@ int pci_reset_function(struct pci_dev *dev)
{
	int rc;

	if (!dev->reset_fn)
	if (!pci_reset_supported(dev))
		return -ENOTTY;

	pci_dev_lock(dev);
@@ -5270,7 +5270,7 @@ int pci_reset_function_locked(struct pci_dev *dev)
{
	int rc;

	if (!dev->reset_fn)
	if (!pci_reset_supported(dev))
		return -ENOTTY;

	pci_dev_save_and_disable(dev);
@@ -5293,7 +5293,7 @@ int pci_try_reset_function(struct pci_dev *dev)
{
	int rc;

	if (!dev->reset_fn)
	if (!pci_reset_supported(dev))
		return -ENOTTY;

	if (!pci_dev_trylock(dev))
+0 −1
Original line number Diff line number Diff line
@@ -2430,7 +2430,6 @@ static void pci_init_capabilities(struct pci_dev *dev)

	pcie_report_downtraining(dev);
	pci_init_reset_methods(dev);
	dev->reset_fn = pci_reset_supported(dev);
}

/*
+1 −1
Original line number Diff line number Diff line
@@ -5626,7 +5626,7 @@ static void quirk_reset_lenovo_thinkpad_p50_nvgpu(struct pci_dev *pdev)

	if (pdev->subsystem_vendor != PCI_VENDOR_ID_LENOVO ||
	    pdev->subsystem_device != 0x222e ||
	    !pdev->reset_fn)
	    !pci_reset_supported(pdev))
		return;

	if (pci_enable_device_mem(pdev))
Loading