ACK: [SRU][Zesty][PATCH 1/1] Revert "x86/acpi: Set persistent cpuid <-> nodeid mapping when booting"
Stefan Bader
stefan.bader at canonical.com
Mon Nov 13 10:25:23 UTC 2017
On 27.10.2017 21:23, Joseph Salisbury wrote:
> From: Dou Liyang <douly.fnst at cn.fujitsu.com>
>
> BugLink: http://bugs.launchpad.net/bugs/1719697
>
> Revert: dc6db24d2476 ("x86/acpi: Set persistent cpuid <-> nodeid mapping when booting")
>
> The mapping of "cpuid <-> nodeid" is established at boot time via ACPI
> tables to keep associations of workqueues and other node related items
> consistent across cpu hotplug.
>
> But, ACPI tables are unreliable and failures with that boot time mapping
> have been reported on machines where the ACPI table and the physical
> information which is retrieved at actual hotplug is inconsistent.
>
> Revert the mapping implementation so it can be replaced with a less error
> prone approach.
>
> Signed-off-by: Dou Liyang <douly.fnst at cn.fujitsu.com>
> Tested-by: Xiaolong Ye <xiaolong.ye at intel.com>
> Cc: rjw at rjwysocki.net
> Cc: linux-acpi at vger.kernel.org
> Cc: guzheng1 at huawei.com
> Cc: izumi.taku at jp.fujitsu.com
> Cc: lenb at kernel.org
> Link: http://lkml.kernel.org/r/1488528147-2279-2-git-send-email-douly.fnst@cn.fujitsu.com
> Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
>
> (cherry picked from commit c962cff17dfa11f4a8227ac16de2b28aea3312e4)
> Signed-off-by: Joseph Salisbury <joseph.salisbury at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---
Positive testing.
> arch/x86/kernel/acpi/boot.c | 2 +-
> drivers/acpi/acpi_processor.c | 5 ---
> drivers/acpi/bus.c | 1 -
> drivers/acpi/processor_core.c | 73 -------------------------------------------
> include/linux/acpi.h | 3 --
> 5 files changed, 1 insertion(+), 83 deletions(-)
>
> diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
> index 64422f8..32846a2 100644
> --- a/arch/x86/kernel/acpi/boot.c
> +++ b/arch/x86/kernel/acpi/boot.c
> @@ -709,7 +709,7 @@ static void __init acpi_set_irq_model_ioapic(void)
> #ifdef CONFIG_ACPI_HOTPLUG_CPU
> #include <acpi/processor.h>
>
> -int acpi_map_cpu2node(acpi_handle handle, int cpu, int physid)
> +static int acpi_map_cpu2node(acpi_handle handle, int cpu, int physid)
> {
> #ifdef CONFIG_ACPI_NUMA
> int nid;
> diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
> index 3de3b6b..f43a586 100644
> --- a/drivers/acpi/acpi_processor.c
> +++ b/drivers/acpi/acpi_processor.c
> @@ -182,11 +182,6 @@ int __weak arch_register_cpu(int cpu)
>
> void __weak arch_unregister_cpu(int cpu) {}
>
> -int __weak acpi_map_cpu2node(acpi_handle handle, int cpu, int physid)
> -{
> - return -ENODEV;
> -}
> -
> static int acpi_processor_hotadd_init(struct acpi_processor *pr)
> {
> unsigned long long sta;
> diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
> index 95855cb..d4455e4 100644
> --- a/drivers/acpi/bus.c
> +++ b/drivers/acpi/bus.c
> @@ -1207,7 +1207,6 @@ static int __init acpi_init(void)
> acpi_wakeup_device_init();
> acpi_debugger_init();
> acpi_setup_sb_notify_handler();
> - acpi_set_processor_mapping();
> return 0;
> }
>
> diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
> index 611a558..a843862 100644
> --- a/drivers/acpi/processor_core.c
> +++ b/drivers/acpi/processor_core.c
> @@ -278,79 +278,6 @@ int acpi_get_cpuid(acpi_handle handle, int type, u32 acpi_id)
> }
> EXPORT_SYMBOL_GPL(acpi_get_cpuid);
>
> -#ifdef CONFIG_ACPI_HOTPLUG_CPU
> -static bool __init
> -map_processor(acpi_handle handle, phys_cpuid_t *phys_id, int *cpuid)
> -{
> - int type, id;
> - u32 acpi_id;
> - acpi_status status;
> - acpi_object_type acpi_type;
> - unsigned long long tmp;
> - union acpi_object object = { 0 };
> - struct acpi_buffer buffer = { sizeof(union acpi_object), &object };
> -
> - status = acpi_get_type(handle, &acpi_type);
> - if (ACPI_FAILURE(status))
> - return false;
> -
> - switch (acpi_type) {
> - case ACPI_TYPE_PROCESSOR:
> - status = acpi_evaluate_object(handle, NULL, NULL, &buffer);
> - if (ACPI_FAILURE(status))
> - return false;
> - acpi_id = object.processor.proc_id;
> -
> - /* validate the acpi_id */
> - if(acpi_processor_validate_proc_id(acpi_id))
> - return false;
> - break;
> - case ACPI_TYPE_DEVICE:
> - status = acpi_evaluate_integer(handle, "_UID", NULL, &tmp);
> - if (ACPI_FAILURE(status))
> - return false;
> - acpi_id = tmp;
> - break;
> - default:
> - return false;
> - }
> -
> - type = (acpi_type == ACPI_TYPE_DEVICE) ? 1 : 0;
> -
> - *phys_id = __acpi_get_phys_id(handle, type, acpi_id, false);
> - id = acpi_map_cpuid(*phys_id, acpi_id);
> -
> - if (id < 0)
> - return false;
> - *cpuid = id;
> - return true;
> -}
> -
> -static acpi_status __init
> -set_processor_node_mapping(acpi_handle handle, u32 lvl, void *context,
> - void **rv)
> -{
> - phys_cpuid_t phys_id;
> - int cpu_id;
> -
> - if (!map_processor(handle, &phys_id, &cpu_id))
> - return AE_ERROR;
> -
> - acpi_map_cpu2node(handle, cpu_id, phys_id);
> - return AE_OK;
> -}
> -
> -void __init acpi_set_processor_mapping(void)
> -{
> - /* Set persistent cpu <-> node mapping for all processors. */
> - acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT,
> - ACPI_UINT32_MAX, set_processor_node_mapping,
> - NULL, NULL, NULL);
> -}
> -#else
> -void __init acpi_set_processor_mapping(void) {}
> -#endif /* CONFIG_ACPI_HOTPLUG_CPU */
> -
> #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC
> static int get_ioapic_id(struct acpi_subtable_header *entry, u32 gsi_base,
> u64 *phys_addr, int *ioapic_id)
> diff --git a/include/linux/acpi.h b/include/linux/acpi.h
> index 7479785..5cbc119 100644
> --- a/include/linux/acpi.h
> +++ b/include/linux/acpi.h
> @@ -293,11 +293,8 @@ bool acpi_processor_validate_proc_id(int proc_id);
> /* Arch dependent functions for cpu hotplug support */
> int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, int *pcpu);
> int acpi_unmap_cpu(int cpu);
> -int acpi_map_cpu2node(acpi_handle handle, int cpu, int physid);
> #endif /* CONFIG_ACPI_HOTPLUG_CPU */
>
> -void acpi_set_processor_mapping(void);
> -
> #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC
> int acpi_get_ioapic_id(acpi_handle handle, u32 gsi_base, u64 *phys_addr);
> #endif
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20171113/2ed9ee79/attachment.sig>
More information about the kernel-team
mailing list