From 1d6b7b3468e77d09221cfa23fe192cefcdb432c9 Mon Sep 17 00:00:00 2001 From: Judy Chen Date: Tue, 31 Mar 2009 06:39:29 +0800 Subject: 6821665 WARNING: kb8042: inconsistent getinfo(9E) implementation 6822266 2009-03-25 nightly bits hang x2200 m2 system 6822869 potential address conflict: used isa resources haven't been removed from available bus resources --- usr/src/uts/intel/io/pci/pci_boot.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) (limited to 'usr/src/uts/intel/io/pci') diff --git a/usr/src/uts/intel/io/pci/pci_boot.c b/usr/src/uts/intel/io/pci/pci_boot.c index fe962be16e..014614760f 100644 --- a/usr/src/uts/intel/io/pci/pci_boot.c +++ b/usr/src/uts/intel/io/pci/pci_boot.c @@ -123,6 +123,15 @@ extern int pci_slot_names_prop(int, char *, int); /* set non-zero to force PCI peer-bus renumbering */ int pci_bus_always_renumber = 0; +/* + * used to register ISA resource usage which must not be made + * "available" from other PCI node' resource maps + */ +static struct { + struct memlist *io_ports_used; + struct memlist *mem_space_used; +} isa_res; + /* * Enumerate all PCI devices */ @@ -299,21 +308,11 @@ pci_renumber_root_busses(void) } void -pci_remove_isa_resources(int type, uint32_t base, uint32_t size) +pci_register_isa_resources(int type, uint32_t base, uint32_t size) { - int bus; - struct memlist **list; - - for (bus = 0; bus <= pci_bios_nbus; bus++) { - if (type == 1) - list = &pci_bus_res[bus].io_ports; - else - list = &pci_bus_res[bus].mem_space; - /* skip if list is or has become empty */ - if (*list == NULL) - continue; - (void) memlist_remove(list, base, size); - } + (void) memlist_insert( + (type == 1) ? &isa_res.io_ports_used : &isa_res.mem_space_used, + base, size); } /* @@ -908,7 +907,7 @@ pci_reprogram(void) /* - * 2. Remove the used resource lists from the bus resources + * 2. Remove used PCI and ISA resources from bus resource map */ memlist_remove_list(&pci_bus_res[bus].io_ports, @@ -921,8 +920,15 @@ pci_reprogram(void) pci_bus_res[bus].pmem_space_used); memlist_remove_list(&pci_bus_res[bus].pmem_space, pci_bus_res[bus].mem_space_used); + + memlist_remove_list(&pci_bus_res[bus].io_ports, + isa_res.io_ports_used); + memlist_remove_list(&pci_bus_res[bus].mem_space, + isa_res.mem_space_used); } + memlist_free_all(&isa_res.io_ports_used); + memlist_free_all(&isa_res.mem_space_used); /* add bus-range property for root/peer bus nodes */ for (i = 0; i <= pci_bios_nbus; i++) { -- cgit v1.2.3