--- linuxPci.c.orig 2009-02-19 16:50:50.169751885 +0100 +++ linuxPci.c 2009-02-19 16:55:59.991516595 +0100 @@ -291,7 +291,7 @@ struct pci_id_match bridge_match = { PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, (PCI_CLASS_BRIDGE << 16) | (PCI_SUBCLASS_BRIDGE_PCI << 8), - 0 + (PCI_CLASS_BRIDGE << 16) | (PCI_SUBCLASS_BRIDGE_PCI << 8) }; struct pci_device *bridge; struct pci_device_iterator *iter; @@ -526,7 +526,6 @@ xf86MapLegacyIO(struct pci_device *dev) { const int domain = dev->domain; - struct pci_device *bridge = get_parent_bridge(dev); int fd; if (domain >= MAX_DOMAINS) @@ -534,9 +533,11 @@ if (DomainMmappedIO[domain] == NULL) { /* Permanently map all of I/O space */ - fd = linuxOpenLegacy(bridge, "legacy_io"); + fd = linuxOpenLegacy(dev, "legacy_io"); if (fd < 0) { - DomainMmappedIO[domain] = linuxMapPci(-1, VIDMEM_MMIO, bridge, + struct pci_device *bridge = get_parent_bridge(dev); + if (bridge != NULL) + DomainMmappedIO[domain] = linuxMapPci(-1, VIDMEM_MMIO, bridge, 0, linuxGetIOSize(bridge), PCIIOC_MMAP_IS_IO); }