aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Chiang <achiang@canonical.com>2010-06-17 09:08:54 -0600
committerLen Brown <len.brown@intel.com>2010-07-12 13:28:34 -0400
commit856b185dd23da39e562983fbf28860f54e661b41 (patch)
tree9c8de900d3123bd158a0c87304f87bda30a791c8
parent589643be6693c46fbc54bae77745f336c8ed4bcc (diff)
downloadkernel_samsung_crespo-856b185dd23da39e562983fbf28860f54e661b41.zip
kernel_samsung_crespo-856b185dd23da39e562983fbf28860f54e661b41.tar.gz
kernel_samsung_crespo-856b185dd23da39e562983fbf28860f54e661b41.tar.bz2
ACPI: processor: fix processor_physically_present on UP
The commit 5d554a7bb06 (ACPI: processor: add internal processor_physically_present()) is broken on uniprocessor (UP) configurations, as acpi_get_cpuid() will always return -1. We use the value of num_possible_cpus() to tell us whether we got an invalid cpuid from acpi_get_cpuid() in the SMP case, or if instead, we are UP, in which case num_possible_cpus() is #defined as 1. We use num_possible_cpus() instead of num_online_cpus() to protect ourselves against the scenario of CPU hotplug, and we've taken down all the CPUs except one. Thanks to Jan Pogadl for initial report and analysis and Chen Gong for review. https://bugzilla.kernel.org/show_bug.cgi?id=16357 Reported-by: Jan Pogadl <pogadl.jan@googlemail.com>: Reviewed-by: Chen Gong <gong.chen@linux.intel.com> Signed-off-by: Alex Chiang <achiang@canonical.com> Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r--drivers/acpi/processor_core.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
index 5128435..e9699aa 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -223,7 +223,7 @@ static bool processor_physically_present(acpi_handle handle)
type = (acpi_type == ACPI_TYPE_DEVICE) ? 1 : 0;
cpuid = acpi_get_cpuid(handle, type, acpi_id);
- if (cpuid == -1)
+ if ((cpuid == -1) && (num_possible_cpus() > 1))
return false;
return true;