diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index 9c71858..bc19c19 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -720,6 +720,7 @@ int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) { struct bin_attribute *attr = NULL; int retval; + int rom_size = 0; if (!sysfs_initialized) return -EACCES; @@ -755,12 +756,16 @@ int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) goto err_vpd_file; /* If the device has a ROM, try to expose it in sysfs. */ - if (pci_resource_len(pdev, PCI_ROM_RESOURCE) || - (pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW)) { + if (pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW) + rom_size = 0x20000; + else if (pci_resource_len(pdev, PCI_ROM_RESOURCE)) + rom_size = pci_resource_len(pdev, PCI_ROM_RESOURCE); + + if (size) attr = kzalloc(sizeof(*attr), GFP_ATOMIC); if (attr) { pdev->rom_attr = attr; - attr->size = pci_resource_len(pdev, PCI_ROM_RESOURCE); + attr->size = rom_size; attr->attr.name = "rom"; attr->attr.mode = S_IRUSR; attr->read = pci_read_rom;