On Sunday, January 04, 2015 06:55:02 PM Hanjun Guo wrote:
> From: Hanjun Guo <[email protected]>
> 
> apic_id in MADT table is the CPU hardware id which identify
> it self in the system for x86 and ia64, OSPM will use it for
> SMP init to map APIC ID to logical cpu number in the early
> boot, when the DSDT/SSDT (ACPI namespace) is scanned later, the
> ACPI processor driver is probed and the driver will use acpi_id
> in DSDT to get the apic_id, then map to the logical cpu number
> which is needed by the processor driver.
> 
> Before ACPI 5.0, only x86 and ia64 were supported in ACPI spec,
> so apic_id is used both in arch code and ACPI core which is
> pretty fine. Since ACPI 5.0, ARM is supported by ACPI and
> APIC is not available on ARM, this will confuse people when
> apic_id is both used by x86 and ARM in one function.
> 
> So convert apic_id to phys_id (which is the original meaning)
> in ACPI processor dirver to make it arch agnostic, but leave the
> arch dependent code unchanged, no functional change.
> 
> Signed-off-by: Hanjun Guo <[email protected]>

I've queued up this one and [2/17] for 3.19-rc4 as I promised I'd push these
two for 3.19.

> ---
>  drivers/acpi/acpi_processor.c | 21 +++++++++-------
>  drivers/acpi/processor_core.c | 56 
> +++++++++++++++++++++----------------------
>  include/acpi/processor.h      |  8 +++----
>  3 files changed, 44 insertions(+), 41 deletions(-)
> 
> diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
> index 1fdf5e0..f02b29e 100644
> --- a/drivers/acpi/acpi_processor.c
> +++ b/drivers/acpi/acpi_processor.c
> @@ -170,7 +170,7 @@ static int acpi_processor_hotadd_init(struct 
> acpi_processor *pr)
>       acpi_status status;
>       int ret;
>  
> -     if (pr->apic_id == -1)
> +     if (pr->phys_id == -1)
>               return -ENODEV;
>  
>       status = acpi_evaluate_integer(pr->handle, "_STA", NULL, &sta);
> @@ -180,7 +180,7 @@ static int acpi_processor_hotadd_init(struct 
> acpi_processor *pr)
>       cpu_maps_update_begin();
>       cpu_hotplug_begin();
>  
> -     ret = acpi_map_lsapic(pr->handle, pr->apic_id, &pr->id);
> +     ret = acpi_map_lsapic(pr->handle, pr->phys_id, &pr->id);
>       if (ret)
>               goto out;
>  
> @@ -215,7 +215,7 @@ static int acpi_processor_get_info(struct acpi_device 
> *device)
>       union acpi_object object = { 0 };
>       struct acpi_buffer buffer = { sizeof(union acpi_object), &object };
>       struct acpi_processor *pr = acpi_driver_data(device);
> -     int apic_id, cpu_index, device_declaration = 0;
> +     int phys_id, cpu_index, device_declaration = 0;
>       acpi_status status = AE_OK;
>       static int cpu0_initialized;
>       unsigned long long value;
> @@ -262,15 +262,18 @@ static int acpi_processor_get_info(struct acpi_device 
> *device)
>               pr->acpi_id = value;
>       }
>  
> -     apic_id = acpi_get_apicid(pr->handle, device_declaration, pr->acpi_id);
> -     if (apic_id < 0)
> -             acpi_handle_debug(pr->handle, "failed to get CPU APIC ID.\n");
> -     pr->apic_id = apic_id;
> +     phys_id = acpi_get_phys_id(pr->handle, device_declaration, pr->acpi_id);
> +     if (phys_id < 0)
> +             acpi_handle_debug(pr->handle, "failed to get CPU physical 
> ID.\n");
> +     pr->phys_id = phys_id;
>  
> -     cpu_index = acpi_map_cpuid(pr->apic_id, pr->acpi_id);
> +     cpu_index = acpi_map_cpuid(pr->phys_id, pr->acpi_id);
>       if (!cpu0_initialized && !acpi_has_cpu_in_madt()) {
>               cpu0_initialized = 1;
> -             /* Handle UP system running SMP kernel, with no LAPIC in MADT */
> +             /*
> +              * Handle UP system running SMP kernel, with no CPU
> +              * entry in MADT
> +              */
>               if ((cpu_index == -1) && (num_online_cpus() == 1))
>                       cpu_index = 0;
>       }
> diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
> index 342942f..02e4839 100644
> --- a/drivers/acpi/processor_core.c
> +++ b/drivers/acpi/processor_core.c
> @@ -69,7 +69,7 @@ static int map_madt_entry(int type, u32 acpi_id)
>       unsigned long madt_end, entry;
>       static struct acpi_table_madt *madt;
>       static int read_madt;
> -     int apic_id = -1;
> +     int phys_id = -1;       /* CPU hardware ID */
>  
>       if (!read_madt) {
>               if (ACPI_FAILURE(acpi_get_table(ACPI_SIG_MADT, 0,
> @@ -79,7 +79,7 @@ static int map_madt_entry(int type, u32 acpi_id)
>       }
>  
>       if (!madt)
> -             return apic_id;
> +             return phys_id;
>  
>       entry = (unsigned long)madt;
>       madt_end = entry + madt->header.length;
> @@ -91,18 +91,18 @@ static int map_madt_entry(int type, u32 acpi_id)
>               struct acpi_subtable_header *header =
>                       (struct acpi_subtable_header *)entry;
>               if (header->type == ACPI_MADT_TYPE_LOCAL_APIC) {
> -                     if (!map_lapic_id(header, acpi_id, &apic_id))
> +                     if (!map_lapic_id(header, acpi_id, &phys_id))
>                               break;
>               } else if (header->type == ACPI_MADT_TYPE_LOCAL_X2APIC) {
> -                     if (!map_x2apic_id(header, type, acpi_id, &apic_id))
> +                     if (!map_x2apic_id(header, type, acpi_id, &phys_id))
>                               break;
>               } else if (header->type == ACPI_MADT_TYPE_LOCAL_SAPIC) {
> -                     if (!map_lsapic_id(header, type, acpi_id, &apic_id))
> +                     if (!map_lsapic_id(header, type, acpi_id, &phys_id))
>                               break;
>               }
>               entry += header->length;
>       }
> -     return apic_id;
> +     return phys_id;
>  }
>  
>  static int map_mat_entry(acpi_handle handle, int type, u32 acpi_id)
> @@ -110,7 +110,7 @@ static int map_mat_entry(acpi_handle handle, int type, 
> u32 acpi_id)
>       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
>       union acpi_object *obj;
>       struct acpi_subtable_header *header;
> -     int apic_id = -1;
> +     int phys_id = -1;
>  
>       if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer)))
>               goto exit;
> @@ -126,38 +126,38 @@ static int map_mat_entry(acpi_handle handle, int type, 
> u32 acpi_id)
>  
>       header = (struct acpi_subtable_header *)obj->buffer.pointer;
>       if (header->type == ACPI_MADT_TYPE_LOCAL_APIC)
> -             map_lapic_id(header, acpi_id, &apic_id);
> +             map_lapic_id(header, acpi_id, &phys_id);
>       else if (header->type == ACPI_MADT_TYPE_LOCAL_SAPIC)
> -             map_lsapic_id(header, type, acpi_id, &apic_id);
> +             map_lsapic_id(header, type, acpi_id, &phys_id);
>       else if (header->type == ACPI_MADT_TYPE_LOCAL_X2APIC)
> -             map_x2apic_id(header, type, acpi_id, &apic_id);
> +             map_x2apic_id(header, type, acpi_id, &phys_id);
>  
>  exit:
>       kfree(buffer.pointer);
> -     return apic_id;
> +     return phys_id;
>  }
>  
> -int acpi_get_apicid(acpi_handle handle, int type, u32 acpi_id)
> +int acpi_get_phys_id(acpi_handle handle, int type, u32 acpi_id)
>  {
> -     int apic_id;
> +     int phys_id;
>  
> -     apic_id = map_mat_entry(handle, type, acpi_id);
> -     if (apic_id == -1)
> -             apic_id = map_madt_entry(type, acpi_id);
> +     phys_id = map_mat_entry(handle, type, acpi_id);
> +     if (phys_id == -1)
> +             phys_id = map_madt_entry(type, acpi_id);
>  
> -     return apic_id;
> +     return phys_id;
>  }
>  
> -int acpi_map_cpuid(int apic_id, u32 acpi_id)
> +int acpi_map_cpuid(int phys_id, u32 acpi_id)
>  {
>  #ifdef CONFIG_SMP
>       int i;
>  #endif
>  
> -     if (apic_id == -1) {
> +     if (phys_id == -1) {
>               /*
>                * On UP processor, there is no _MAT or MADT table.
> -              * So above apic_id is always set to -1.
> +              * So above phys_id is always set to -1.
>                *
>                * BIOS may define multiple CPU handles even for UP processor.
>                * For example,
> @@ -170,7 +170,7 @@ int acpi_map_cpuid(int apic_id, u32 acpi_id)
>                *     Processor (CPU3, 0x03, 0x00000410, 0x06) {}
>                * }
>                *
> -              * Ignores apic_id and always returns 0 for the processor
> +              * Ignores phys_id and always returns 0 for the processor
>                * handle with acpi id 0 if nr_cpu_ids is 1.
>                * This should be the case if SMP tables are not found.
>                * Return -1 for other CPU's handle.
> @@ -178,28 +178,28 @@ int acpi_map_cpuid(int apic_id, u32 acpi_id)
>               if (nr_cpu_ids <= 1 && acpi_id == 0)
>                       return acpi_id;
>               else
> -                     return apic_id;
> +                     return phys_id;
>       }
>  
>  #ifdef CONFIG_SMP
>       for_each_possible_cpu(i) {
> -             if (cpu_physical_id(i) == apic_id)
> +             if (cpu_physical_id(i) == phys_id)
>                       return i;
>       }
>  #else
>       /* In UP kernel, only processor 0 is valid */
> -     if (apic_id == 0)
> -             return apic_id;
> +     if (phys_id == 0)
> +             return phys_id;
>  #endif
>       return -1;
>  }
>  
>  int acpi_get_cpuid(acpi_handle handle, int type, u32 acpi_id)
>  {
> -     int apic_id;
> +     int phys_id;
>  
> -     apic_id = acpi_get_apicid(handle, type, acpi_id);
> +     phys_id = acpi_get_phys_id(handle, type, acpi_id);
>  
> -     return acpi_map_cpuid(apic_id, acpi_id);
> +     return acpi_map_cpuid(phys_id, acpi_id);
>  }
>  EXPORT_SYMBOL_GPL(acpi_get_cpuid);
> diff --git a/include/acpi/processor.h b/include/acpi/processor.h
> index 3ca9b75..b95dc32 100644
> --- a/include/acpi/processor.h
> +++ b/include/acpi/processor.h
> @@ -196,8 +196,8 @@ struct acpi_processor_flags {
>  struct acpi_processor {
>       acpi_handle handle;
>       u32 acpi_id;
> -     u32 apic_id;
> -     u32 id;
> +     u32 phys_id;    /* CPU hardware ID such as APIC ID for x86 */
> +     u32 id;         /* CPU logical ID allocated by OS */
>       u32 pblk;
>       int performance_platform_limit;
>       int throttling_platform_limit;
> @@ -310,8 +310,8 @@ static inline int acpi_processor_get_bios_limit(int cpu, 
> unsigned int *limit)
>  #endif                               /* CONFIG_CPU_FREQ */
>  
>  /* in processor_core.c */
> -int acpi_get_apicid(acpi_handle, int type, u32 acpi_id);
> -int acpi_map_cpuid(int apic_id, u32 acpi_id);
> +int acpi_get_phys_id(acpi_handle, int type, u32 acpi_id);
> +int acpi_map_cpuid(int phys_id, u32 acpi_id);
>  int acpi_get_cpuid(acpi_handle, int type, u32 acpi_id);
>  
>  /* in processor_pdc.c */
> 

-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to