diff options
author | Judy Chen <Judy.Chen@Sun.COM> | 2009-03-31 06:39:29 +0800 |
---|---|---|
committer | Judy Chen <Judy.Chen@Sun.COM> | 2009-03-31 06:39:29 +0800 |
commit | 1d6b7b3468e77d09221cfa23fe192cefcdb432c9 (patch) | |
tree | a01a8071d1df79e22248b25753931ebe811f46bb /usr/src/uts/intel/io/pci | |
parent | 73a0bd151c1115bf39cc2caa30c7cbfdd86361c1 (diff) | |
download | illumos-gate-1d6b7b3468e77d09221cfa23fe192cefcdb432c9.tar.gz |
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
Diffstat (limited to 'usr/src/uts/intel/io/pci')
-rw-r--r-- | usr/src/uts/intel/io/pci/pci_boot.c | 36 |
1 files changed, 21 insertions, 15 deletions
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 @@ -124,6 +124,15 @@ extern int pci_slot_names_prop(int, char *, int); 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 */ void @@ -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++) { |