After checking, the get_apci_id is mainly map_mat_entry(), the call to
map_madt_entry() is something questinable.
For the map_madt_entry(), we have two choice: either export the map_mat_entry()
in drivers/acpi/processor_core.c, or implement it in
driver/xen/acpi_processor.c also.
I noticed this same logic (i.e. the map_mat_entry() in
drivers/acpi/processor_core.c) has been duplicated in
arch/x86/kernel/acpi/boot.c already as followed, so any idea from your side?
In arch/x86/kernel/acpi/boot.c
static int __cpuinit _acpi_map_lsapic(acpi_handle handle, int *pcpu)
{
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
union acpi_object *obj;
struct acpi_madt_local_apic *lapic;
cpumask_var_t tmp_map, new_map;
u8 physid;
int cpu;
int retval = -ENOMEM;
if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer)))
return -EINVAL;
if (!buffer.length || !buffer.pointer)
return -EINVAL;
obj = buffer.pointer;
if (obj->type != ACPI_TYPE_BUFFER ||
obj->buffer.length < sizeof(*lapic)) {
kfree(buffer.pointer);
return -EINVAL;
}
lapic = (struct acpi_madt_local_apic *)obj->buffer.pointer;
if (lapic->header.type != ACPI_MADT_TYPE_LOCAL_APIC ||
!(lapic->lapic_flags & ACPI_MADT_ENABLED)) {
kfree(buffer.pointer);
return -EINVAL;
}
physid = lapic->id;
--jyh
xen-devel-bounces@xxxxxxxxxxxxxxxxxxx wrote:
> Change the acpi code to export apic_id for the acpi_processor object
>
> From: Jiang, Yunhong <yunhong.jiang@xxxxxxxxx>
>
> Signed-off-by: Jiang, Yunhong <yunhong.jiang@xxxxxxxxx>
>
>
> ---
>
> drivers/acpi/processor_core.c | 16 ++++++++++++++++
> include/linux/acpi.h | 1 +
> 2 files changed, 17 insertions(+), 0 deletions(-)
>
>
> diff --git a/drivers/acpi/processor_core.c
> b/drivers/acpi/processor_core.c
> index 98010d5..a448ba6 100644
> --- a/drivers/acpi/processor_core.c
> +++ b/drivers/acpi/processor_core.c
> @@ -411,6 +411,11 @@ static int
> acpi_processor_remove_fs(struct acpi_device *device)
>
> #ifndef CONFIG_SMP
> static int get_cpu_id(acpi_handle handle, int type, u32
> acpi_id) { return -1; }
> +int get_apic_id(acpi_handle handle, int type, u32 acpi_id) +{
> + return -1;
> +}
> +EXPORT_SYMBOL_GPL(get_apic_id);
> #else
>
> static struct acpi_table_madt *madt;
> @@ -561,6 +566,17 @@ static int get_cpu_id(acpi_handle handle,
> int type, u32 acpi_id)
> }
> return -1;
> }
> +
> +int get_apic_id(acpi_handle handle, int type, u32 acpi_id) +{
> + int apic_id = -1;
> +
> + apic_id = map_mat_entry(handle, type, acpi_id);
> + if (apic_id == -1)
> + apic_id = map_madt_entry(type, acpi_id);
> + return apic_id;
> +}
> +EXPORT_SYMBOL_GPL(get_apic_id);
> #endif
>
> /*
> ---------------------------------------------------------------
> -----------
> diff --git a/include/linux/acpi.h b/include/linux/acpi.h
> index 34321cf..e414fcc 100644
> --- a/include/linux/acpi.h
> +++ b/include/linux/acpi.h
> @@ -85,6 +85,7 @@ int acpi_boot_init (void);
> int acpi_boot_table_init (void);
> int acpi_mps_check (void);
> int acpi_numa_init (void);
> +int get_apic_id(acpi_handle handle, int type, u32 acpi_id);
>
> int acpi_table_init (void);
> int acpi_table_parse (char *id, acpi_table_handler handler);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|