pci_map_rom bug?

From: Jesse Barnes
Date: Wed Feb 16 2005 - 19:05:35 EST


Jon, it looks like the loop at the bottom of pci_map_rom is busted?

do {
void __iomem *pds;
/* Standard PCI ROMs start out with these bytes 55 AA */
if (readb(image) != 0x55)
break;
if (readb(image + 1) != 0xAA)
break;
/* get the PCI data structure and check its signature */
pds = image + readw(image + 24);
if (readb(pds) != 'P')
break;
if (readb(pds + 1) != 'C')
break;
if (readb(pds + 2) != 'I')
break;
if (readb(pds + 3) != 'R')
break;
last_image = readb(pds + 21) & 0x80;
/* this length is reliable */
image += readw(pds + 16) * 512;
} while (!last_image);

It looks like it's trying to verify all the ROMs on a given PCI device rather
than just the one we just ioremap'd above. Should this check just be inline
and the loop deleted? In that case, all of the breaks would turn into return
NULLs (though the code should probably be refactored to make that a little
clearer) along with an iounmap?

Thanks,
Jesse
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/