PCI: Deprecate pci_get_bus_and_slot()
authorSinan Kaya <okaya@codeaurora.org>
Tue, 19 Dec 2017 05:37:53 +0000 (00:37 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 17 Jan 2018 14:16:46 +0000 (08:16 -0600)
pci_get_bus_and_slot() is restrictive such that it assumes domain=0 as
where a PCI device is present. This restricts the device drivers to be
reused for other domain numbers.

Getting ready to remove pci_get_bus_and_slot() function in favor of
pci_get_domain_bus_and_slot().

When we have a pci_dev, extract the domain number from it.

The config access syscalls don't allow the user to supply a domain number,
so they only work on devices in domain 0, so we can just hard-code that.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
[bhelgaas: squash quirk & syscall patches together]
Signed-off-by: Bjorn Helgaas <helgaas@kernel.org>
drivers/pci/quirks.c
drivers/pci/syscall.c

index 10684b1..24e9a14 100644 (file)
@@ -2699,7 +2699,8 @@ static void __nv_msi_ht_cap_quirk(struct pci_dev *dev, int all)
         * HT MSI mapping should be disabled on devices that are below
         * a non-Hypertransport host bridge. Locate the host bridge...
         */
-       host_bridge = pci_get_bus_and_slot(0, PCI_DEVFN(0, 0));
+       host_bridge = pci_get_domain_bus_and_slot(pci_domain_nr(dev->bus), 0,
+                                                 PCI_DEVFN(0, 0));
        if (host_bridge == NULL) {
                dev_warn(&dev->dev, "nv_msi_ht_cap_quirk didn't locate host bridge\n");
                return;
index 83efa00..e725f99 100644 (file)
@@ -28,7 +28,7 @@ SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn,
                return -EPERM;
 
        err = -ENODEV;
-       dev = pci_get_bus_and_slot(bus, dfn);
+       dev = pci_get_domain_bus_and_slot(0, bus, dfn);
        if (!dev)
                goto error;
 
@@ -96,7 +96,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,
        if (!capable(CAP_SYS_ADMIN))
                return -EPERM;
 
-       dev = pci_get_bus_and_slot(bus, dfn);
+       dev = pci_get_domain_bus_and_slot(0, bus, dfn);
        if (!dev)
                return -ENODEV;