vserver 1.9.3
[linux-2.6.git] / arch / ia64 / sn / io / machvec / pci_bus_cvlink.c
index ba9e42c..cb91a4d 100644 (file)
@@ -290,6 +290,7 @@ sn_pci_fixup_slot(struct pci_dev *dev)
                        addr |= __IA64_UNCACHED_OFFSET;
                        dev->resource[idx].start = addr;
                        dev->resource[idx].end = addr + size;
+                       dev->resource[idx].parent = &ioport_resource;
                }
 
                if (dev->resource[idx].flags & IORESOURCE_IO)
@@ -322,6 +323,7 @@ sn_pci_fixup_slot(struct pci_dev *dev)
                        addr |= __IA64_UNCACHED_OFFSET;
                        dev->resource[idx].start = addr;
                        dev->resource[idx].end = addr + size;
+                       dev->resource[idx].parent = &iomem_resource;
                }
 
                if (dev->resource[idx].flags & IORESOURCE_MEM)
@@ -351,10 +353,24 @@ sn_pci_fixup_slot(struct pci_dev *dev)
                         addr |= __IA64_UNCACHED_OFFSET;
                         dev->resource[PCI_ROM_RESOURCE].start = addr;
                         dev->resource[PCI_ROM_RESOURCE].end = addr + size;
+                       dev->resource[idx].parent = &iomem_resource;
                         if (dev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_MEM)
                                 cmd |= PCI_COMMAND_MEMORY;
                 }
-        }
+        } else {
+               /*
+                * Remove other ROM resources since they don't have valid
+                * CPU addresses.
+                */
+                size = dev->resource[PCI_ROM_RESOURCE].end -
+                        dev->resource[PCI_ROM_RESOURCE].start;
+
+               if (size) {
+                       dev->resource[PCI_ROM_RESOURCE].start = 0;
+                       dev->resource[PCI_ROM_RESOURCE].end = 0;
+                       dev->resource[PCI_ROM_RESOURCE].flags = 0;
+               }
+       }
 
        /*
         * Update the Command Word on the Card.