ACPI: processor: fix processor_physically_present on UP
The commit 5d554a7bb0
(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>
This commit is contained in:
Родитель
589643be66
Коммит
856b185dd2
|
@ -223,7 +223,7 @@ static bool processor_physically_present(acpi_handle handle)
|
||||||
type = (acpi_type == ACPI_TYPE_DEVICE) ? 1 : 0;
|
type = (acpi_type == ACPI_TYPE_DEVICE) ? 1 : 0;
|
||||||
cpuid = acpi_get_cpuid(handle, type, acpi_id);
|
cpuid = acpi_get_cpuid(handle, type, acpi_id);
|
||||||
|
|
||||||
if (cpuid == -1)
|
if ((cpuid == -1) && (num_possible_cpus() > 1))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче