[syslinux] [PATCH] pci: fix pci_scan() - do not increment pci_device pointer
Sebastian Herbszt
herbszt at gmx.de
Fri Aug 15 14:24:26 PDT 2008
Commit a56f1a4e63e9fc38294a2b96d1672d3fa532a7a8 (pci: store device address)
broke pci_scan(). It increments pci_device which then points to the wrong slot:
struct pci_device *pci_device =
&pci_device_list->pci_device[pci_device_list->count];
...
pci_device->addr = a;
...
pci_device++;
...
pci_bus_list->pci_bus[bus].
pci_device[pci_bus_list->pci_bus[bus].pci_device_count] = pci_device;
Partial revert of a56f1a4e63e9fc38294a2b96d1672d3fa532a7a8 does fix this.
- Sebastian
--- syslinux-3.71-12-ga19312b/com32/lib/pci/scan.c.orig 2008-08-15 22:13:57.000000000 +0200
+++ syslinux-3.71-12-ga19312b/com32/lib/pci/scan.c 2008-08-15 22:39:07.000000000 +0200
@@ -363,9 +363,6 @@
for (dev = 0; dev < MAX_PCI_DEVICES ; dev++) {
maxfunc = 1; /* Assume a single-function device */
for (func = 0; func < maxfunc; func++) {
- struct pci_device *pci_device =
- &pci_device_list->pci_device[pci_device_list->count];
-
a = pci_mkaddr(bus, dev, func, 0);
did = pci_readl(a);
@@ -381,7 +378,9 @@
rid = pci_readb(a + 0x08);
sid = pci_readl(a + 0x2c);
-
+ struct pci_device *pci_device =
+ &pci_device_list->
+ pci_device[pci_device_list->count];
pci_device->addr = a;
pci_device->product = did >> 16;
pci_device->sub_product = sid >> 16;
@@ -389,8 +388,6 @@
pci_device->sub_vendor = (sid << 16) >> 16;
pci_device->revision = rid;
pci_device_list->count++;
- pci_device++;
-
dprintf
("Scanning: BUS %02x DID %08x (%04x:%04x) SID %08x RID %02x\n",
bus, did, did >> 16, (did << 16) >> 16,
More information about the Syslinux
mailing list