Index: linuxPci.c
================================================================================
--- linuxPci.c
+++ linuxPci.c
@@ -195,7 +195,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;
@@ -433,7 +433,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)
@@ -441,9 +440,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);
 	}