ACPI: Fix references to impossible processors. ACPI uses NR_CPUS in various loops and in some it accesses per cpu data of processors that are not present and that will never be present. Make ACPI use nr_cpu_ids instead. That stops at the end of the possible processors. However, it would be better to use the cpu_possible_map. The problem may still occur if processor are that are possible occur after some that are impossible. nr_cpu_ids just deals with the common case that only the first N processors are populated. Signed-off-by: Christoph Lameter --- drivers/acpi/processor_core.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) Index: linux-2.6/drivers/acpi/processor_core.c =================================================================== --- linux-2.6.orig/drivers/acpi/processor_core.c 2007-11-17 18:00:41.626522978 -0800 +++ linux-2.6/drivers/acpi/processor_core.c 2007-11-17 18:01:32.425522630 -0800 @@ -494,7 +494,7 @@ static int get_cpu_id(acpi_handle handle if (apic_id == -1) return apic_id; - for (i = 0; i < NR_CPUS; ++i) { + for (i = 0; i < nr_cpu_ids; ++i) { if (cpu_physical_id(i) == apic_id) return i; } @@ -638,7 +638,7 @@ static int __cpuinit acpi_processor_star return 0; } - BUG_ON((pr->id >= NR_CPUS) || (pr->id < 0)); + BUG_ON((pr->id >= nr_cpu_ids) || (pr->id < 0)); /* * Buggy BIOS check @@ -771,7 +771,7 @@ static int acpi_processor_remove(struct pr = acpi_driver_data(device); - if (pr->id >= NR_CPUS) { + if (pr->id >= nr_cpu_ids) { kfree(pr); return 0; } @@ -842,7 +842,7 @@ int acpi_processor_device_add(acpi_handl if (!pr) return -ENODEV; - if ((pr->id >= 0) && (pr->id < NR_CPUS)) { + if ((pr->id >= 0) && (pr->id < nr_cpu_ids)) { kobject_uevent(&(*device)->dev.kobj, KOBJ_ONLINE); } return 0; @@ -880,13 +880,13 @@ acpi_processor_hotplug_notify(acpi_handl break; } - if (pr->id >= 0 && (pr->id < NR_CPUS)) { + if (pr->id >= 0 && (pr->id < nr_cpu_ids)) { kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE); break; } result = acpi_processor_start(device); - if ((!result) && ((pr->id >= 0) && (pr->id < NR_CPUS))) { + if ((!result) && ((pr->id >= 0) && (pr->id < nr_cpu_ids))) { kobject_uevent(&device->dev.kobj, KOBJ_ONLINE); } else { printk(KERN_ERR PREFIX "Device [%s] failed to start\n", @@ -909,7 +909,7 @@ acpi_processor_hotplug_notify(acpi_handl return; } - if ((pr->id < NR_CPUS) && (cpu_present(pr->id))) + if ((pr->id < nr_cpu_ids) && (cpu_present(pr->id))) kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE); break; default: