diff options
Diffstat (limited to 'drivers/pci/rom.c')
-rw-r--r-- | drivers/pci/rom.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/pci/rom.c b/drivers/pci/rom.c index f955edb9bea7..eb0ad530dc43 100644 --- a/drivers/pci/rom.c +++ b/drivers/pci/rom.c | |||
@@ -71,6 +71,7 @@ size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size) | |||
71 | { | 71 | { |
72 | void __iomem *image; | 72 | void __iomem *image; |
73 | int last_image; | 73 | int last_image; |
74 | unsigned length; | ||
74 | 75 | ||
75 | image = rom; | 76 | image = rom; |
76 | do { | 77 | do { |
@@ -93,9 +94,9 @@ size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size) | |||
93 | if (readb(pds + 3) != 'R') | 94 | if (readb(pds + 3) != 'R') |
94 | break; | 95 | break; |
95 | last_image = readb(pds + 21) & 0x80; | 96 | last_image = readb(pds + 21) & 0x80; |
96 | /* this length is reliable */ | 97 | length = readw(pds + 16); |
97 | image += readw(pds + 16) * 512; | 98 | image += length * 512; |
98 | } while (!last_image); | 99 | } while (length && !last_image); |
99 | 100 | ||
100 | /* never return a size larger than the PCI resource window */ | 101 | /* never return a size larger than the PCI resource window */ |
101 | /* there are known ROMs that get the size wrong */ | 102 | /* there are known ROMs that get the size wrong */ |