]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
PCI/VPD: Treat invalid VPD like missing VPD capability
authorHeiner Kallweit <hkallweit1@gmail.com>
Sun, 8 Aug 2021 17:23:57 +0000 (19:23 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 12 Aug 2021 17:48:51 +0000 (12:48 -0500)
Exporting sysfs files that can't be accessed doesn't make much sense.
Therefore, if either a quirk or the dynamic size calculation result in VPD
being marked as invalid, treat this as though the device has no VPD
capability.  One consequence is that the "vpd" sysfs file is not visible.

Link: https://lore.kernel.org/r/6a02b204-4ed2-4553-c3b2-eacf9554fa8d@gmail.com
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/vpd.c

index a62251a3c7a1c7a31d2bc741c369b5242d6099eb..3b0425fb49f5686ed273c1cbcb8a0b831125ba55 100644 (file)
@@ -124,9 +124,6 @@ static ssize_t pci_vpd_read(struct pci_dev *dev, loff_t pos, size_t count,
        if (pos < 0)
                return -EINVAL;
 
-       if (vpd->len == PCI_VPD_SZ_INVALID)
-               return -EIO;
-
        if (pos > vpd->len)
                return 0;
 
@@ -188,9 +185,6 @@ static ssize_t pci_vpd_write(struct pci_dev *dev, loff_t pos, size_t count,
        if (pos < 0 || (pos & 3) || (count & 3))
                return -EINVAL;
 
-       if (vpd->len == PCI_VPD_SZ_INVALID)
-               return -EIO;
-
        if (end > vpd->len)
                return -EINVAL;
 
@@ -231,6 +225,9 @@ void pci_vpd_init(struct pci_dev *dev)
 
        if (!dev->vpd.len)
                dev->vpd.len = pci_vpd_size(dev);
+
+       if (dev->vpd.len == PCI_VPD_SZ_INVALID)
+               dev->vpd.cap = 0;
 }
 
 static ssize_t vpd_read(struct file *filp, struct kobject *kobj,