The VPD on all devices may not be 32K. Unfortunately, there is no generic way to find the size, so this adds a simple API hook to reset it. Signed-off-by: Stephen Hemminger <shemminger@xxxxxxxxxx> --- a/drivers/pci/access.c 2008-09-08 09:36:25.000000000 -0700 +++ b/drivers/pci/access.c 2008-09-08 09:37:08.000000000 -0700 @@ -341,6 +341,25 @@ int pci_vpd_pci22_init(struct pci_dev *d } /** + * pci_vpd_size - Set available Vital Product Data size + * @dev: pci device struct + * @size: available memory in bytes + * + * Adjust size of available VPD area. + */ +int pci_vpd_size(struct pci_dev *dev, size_t size) +{ + if (!dev->vpd) + return -EINVAL; + + dev->vpd->len = size; + dev->vpd->attr->size = size; /* maybe sysfs should implement truncate? */ + + return 0; +} +EXPORT_SYMBOL(pci_vpd_size); + +/** * pci_block_user_cfg_access - Block userspace PCI config reads/writes * @dev: pci device struct * --- a/include/linux/pci.h 2008-09-08 09:36:25.000000000 -0700 +++ b/include/linux/pci.h 2008-09-08 09:36:25.000000000 -0700 @@ -653,6 +653,7 @@ int pci_bus_find_capability(struct pci_b /* Vital product data routines */ int pci_read_vpd(struct pci_dev *dev, loff_t pos, size_t count, void *buf); int pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf); +int pci_vpd_size(struct pci_dev *dev, size_t size); /* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */ void pci_bus_assign_resources(struct pci_bus *bus); -- -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html