mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
PCI: Fix devfn for VPD access through function 0
Commit932c435cab("PCI: Add dev_flags bit to access VPD through function 0") passes PCI_SLOT(devfn) for the devfn parameter of pci_get_slot(). Generally this works because we're fairly well guaranteed that a PCIe device is at slot address 0, but for the general case, including conventional PCI, it's incorrect. We need to get the slot and then convert it back into a devfn. Fixes:932c435cab("PCI: Add dev_flags bit to access VPD through function 0") Signed-off-by: Alex Williamson <[email protected]> Signed-off-by: Bjorn Helgaas <[email protected]> Acked-by: Myron Stowe <[email protected]> Acked-by: Mark Rustad <[email protected]> CC: [email protected]
This commit is contained in:
parent
38ea72bdb6
commit
9d9240756e
1 changed files with 6 additions and 3 deletions
|
|
@ -442,7 +442,8 @@ static const struct pci_vpd_ops pci_vpd_pci22_ops = {
|
|||
static ssize_t pci_vpd_f0_read(struct pci_dev *dev, loff_t pos, size_t count,
|
||||
void *arg)
|
||||
{
|
||||
struct pci_dev *tdev = pci_get_slot(dev->bus, PCI_SLOT(dev->devfn));
|
||||
struct pci_dev *tdev = pci_get_slot(dev->bus,
|
||||
PCI_DEVFN(PCI_SLOT(dev->devfn), 0));
|
||||
ssize_t ret;
|
||||
|
||||
if (!tdev)
|
||||
|
|
@ -456,7 +457,8 @@ static ssize_t pci_vpd_f0_read(struct pci_dev *dev, loff_t pos, size_t count,
|
|||
static ssize_t pci_vpd_f0_write(struct pci_dev *dev, loff_t pos, size_t count,
|
||||
const void *arg)
|
||||
{
|
||||
struct pci_dev *tdev = pci_get_slot(dev->bus, PCI_SLOT(dev->devfn));
|
||||
struct pci_dev *tdev = pci_get_slot(dev->bus,
|
||||
PCI_DEVFN(PCI_SLOT(dev->devfn), 0));
|
||||
ssize_t ret;
|
||||
|
||||
if (!tdev)
|
||||
|
|
@ -475,7 +477,8 @@ static const struct pci_vpd_ops pci_vpd_f0_ops = {
|
|||
|
||||
static int pci_vpd_f0_dev_check(struct pci_dev *dev)
|
||||
{
|
||||
struct pci_dev *tdev = pci_get_slot(dev->bus, PCI_SLOT(dev->devfn));
|
||||
struct pci_dev *tdev = pci_get_slot(dev->bus,
|
||||
PCI_DEVFN(PCI_SLOT(dev->devfn), 0));
|
||||
int ret = 0;
|
||||
|
||||
if (!tdev)
|
||||
|
|
|
|||
Loading…
Reference in a new issue