ACPI / processor: Introduce invalid_logical_cpuid()
In ACPI processor drivers, we use direct comparisons of cpu logical id with -1 which are error prone in case logical cpuid is accidentally assinged an error code and prevents us from returning an error-encoding cpuid directly in some cases. So introduce invalid_logical_cpuid() to identify cpu with invalid logical cpu num, then it will be used to replace the direct comparisons with -1. Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
030bbdbf4c
commit
25956b6612
|
@ -275,7 +275,8 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
||||||
* Handle UP system running SMP kernel, with no CPU
|
* Handle UP system running SMP kernel, with no CPU
|
||||||
* entry in MADT
|
* entry in MADT
|
||||||
*/
|
*/
|
||||||
if ((cpu_index == -1) && (num_online_cpus() == 1))
|
if (invalid_logical_cpuid(cpu_index)
|
||||||
|
&& (num_online_cpus() == 1))
|
||||||
cpu_index = 0;
|
cpu_index = 0;
|
||||||
}
|
}
|
||||||
pr->id = cpu_index;
|
pr->id = cpu_index;
|
||||||
|
@ -285,7 +286,7 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
||||||
* less than the max # of CPUs. They should be ignored _iff
|
* less than the max # of CPUs. They should be ignored _iff
|
||||||
* they are physically not present.
|
* they are physically not present.
|
||||||
*/
|
*/
|
||||||
if (pr->id == -1) {
|
if (invalid_logical_cpuid(pr->id)) {
|
||||||
int ret = acpi_processor_hotadd_init(pr);
|
int ret = acpi_processor_hotadd_init(pr);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -52,10 +52,7 @@ static bool __init 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)
|
return !invalid_logical_cpuid(cpuid);
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void acpi_set_pdc_bits(u32 *buf)
|
static void acpi_set_pdc_bits(u32 *buf)
|
||||||
|
|
|
@ -158,6 +158,11 @@ typedef u32 phys_cpuid_t;
|
||||||
#define PHYS_CPUID_INVALID (phys_cpuid_t)(-1)
|
#define PHYS_CPUID_INVALID (phys_cpuid_t)(-1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline bool invalid_logical_cpuid(u32 cpuid)
|
||||||
|
{
|
||||||
|
return (int)cpuid < 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI_HOTPLUG_CPU
|
#ifdef CONFIG_ACPI_HOTPLUG_CPU
|
||||||
/* Arch dependent functions for cpu hotplug support */
|
/* Arch dependent functions for cpu hotplug support */
|
||||||
int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, int *pcpu);
|
int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, int *pcpu);
|
||||||
|
|
Loading…
Reference in New Issue