From nobody Mon Mar 23 21:25:53 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=quarantine dis=none) header.from=huawei.com ARC-Seal: i=1; a=rsa-sha256; t=1773368551; cv=none; d=zohomail.com; s=zohoarc; b=MNvg72jSvwOFfQmRDBh8GHVUzZ5YcK8QqqNaYvXo6KRTe400FM3VhdRQy+6fCi7iCje/GqJPEoCr7jeQlqkn4KUfLlyafvHxERBPQqSPgI58H8PTxZ3y0gbKckgq1i9YgZp2cbYymQ3xJ4TylremMwo2w4L6EKSOSqDcnEiBvNc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773368551; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=QjrGSLk+yOhOI441CfjS5P5KG0hkwXI+k0WuGTLs9Ws=; b=JHsZnBa551XqmCYSOJ9GMFXZ/fUlRpil6NPAM5N6Av8bY3OCV1fvfh60yfgkpXx+THrb7WESBzQmicobPsd7tAEzS4X48BpIcBD/q9gJAX01ocsm0AY+iCz+XLcLteJgT7iIgbnKDyKJbUQuKrqPxeZRn5J/bSi0Gs6jQ9IUvs8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1773368551442901.4824398657047; Thu, 12 Mar 2026 19:22:31 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1253179.1549505 (Exim 4.92) (envelope-from ) id 1w0sA9-0000fK-8v; Fri, 13 Mar 2026 02:22:05 +0000 Received: by outflank-mailman (output) from mailman id 1253179.1549505; Fri, 13 Mar 2026 02:22:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w0sA9-0000fD-5p; Fri, 13 Mar 2026 02:22:05 +0000 Received: by outflank-mailman (input) for mailman id 1253179; Fri, 13 Mar 2026 02:22:04 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w0sA8-0000ET-0N for xen-devel@lists.xenproject.org; Fri, 13 Mar 2026 02:22:04 +0000 Received: from canpmsgout09.his.huawei.com (canpmsgout09.his.huawei.com [113.46.200.224]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 685836ec-1e83-11f1-9ccf-f158ae23cfc8; Fri, 13 Mar 2026 03:21:58 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.163]) by canpmsgout09.his.huawei.com (SkyGuard) with ESMTPS id 4fX7Qv3vtcz1cyPF; Fri, 13 Mar 2026 10:16:55 +0800 (CST) Received: from kwepemk500009.china.huawei.com (unknown [7.202.194.94]) by mail.maildlp.com (Postfix) with ESMTPS id 9FC214048B; Fri, 13 Mar 2026 10:21:51 +0800 (CST) Received: from localhost.localdomain (10.50.163.32) by kwepemk500009.china.huawei.com (7.202.194.94) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 13 Mar 2026 10:21:50 +0800 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 685836ec-1e83-11f1-9ccf-f158ae23cfc8 dkim-signature: v=1; a=rsa-sha256; d=huawei.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=QjrGSLk+yOhOI441CfjS5P5KG0hkwXI+k0WuGTLs9Ws=; b=cHC9CGJlkw77fmcnNreSFKjdDqRfDH0LYEvCWRpuJfoHwv5cPUyubXZ7H1RRgbaveAHnEQh51 bmB5ABXpAWB4EhekKEBGenq2CEn8mTWvHAORfdx3zvZPfnbIIiabcms9YiXvd0fpBRPgTjiKSm+ WvkqhccMHQki9ryvVlEYYWw= From: Chengwen Feng To: Bjorn Helgaas , Catalin Marinas , Will Deacon , "Rafael J . Wysocki" CC: Jonathan Corbet , Shuah Khan , Huacai Chen , WANG Xuerui , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H . Peter Anvin" , Juergen Gross , Sohil Mehta , Ilkka Koskinen , Robin Murphy , James Clark , Besar Wicaksono , Ma Ke , Wei Huang , Andy Gospodarek , Somnath Kotur , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v7 1/3] ACPI: Refactor get_acpi_id_for_cpu() to acpi_get_cpu_uid() on non-x86 Date: Fri, 13 Mar 2026 10:21:42 +0800 Message-ID: <20260313022144.40942-2-fengchengwen@huawei.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260313022144.40942-1-fengchengwen@huawei.com> References: <20260313022144.40942-1-fengchengwen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.163.32] X-ClientProxiedBy: kwepems100001.china.huawei.com (7.221.188.238) To kwepemk500009.china.huawei.com (7.202.194.94) X-ZohoMail-DKIM: pass (identity @huawei.com) X-ZM-MESSAGEID: 1773368552255154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Unify CPU ACPI ID retrieval interface across architectures by refactoring get_acpi_id_for_cpu() to acpi_get_cpu_uid() on arm64/riscv/loongarch: - Add input parameter validation - Adjust interface to int acpi_get_cpu_uid(unsigned int cpu, u32 *uid) (old: u32 get_acpi_id_for_cpu(unsigned int cpu), no input check) This refactoring (not a pure rename) enhances interface robustness while preparing for consistent ACPI Processor UID retrieval across all ACPI-enabled platforms. Valid inputs retain original behavior. Note: Move the ARM64-specific get_cpu_for_acpi_id() implementation to arch/arm64/kernel/acpi_numa.c to fix compilation errors from circular header dependencies introduced by the rename. Cc: stable@vger.kernel.org Signed-off-by: Chengwen Feng Reviewed-by: Jonathan Cameron --- arch/arm64/include/asm/acpi.h | 16 +--------- arch/arm64/kernel/acpi.c | 16 ++++++++++ arch/arm64/kernel/acpi_numa.c | 14 +++++++++ arch/loongarch/include/asm/acpi.h | 5 --- arch/loongarch/kernel/acpi.c | 9 ++++++ arch/riscv/include/asm/acpi.h | 4 --- arch/riscv/kernel/acpi.c | 16 ++++++++++ arch/riscv/kernel/acpi_numa.c | 9 ++++-- drivers/acpi/pptt.c | 50 ++++++++++++++++++++++-------- drivers/acpi/riscv/rhct.c | 7 ++++- drivers/perf/arm_cspmu/arm_cspmu.c | 6 ++-- include/linux/acpi.h | 13 ++++++++ 12 files changed, 122 insertions(+), 43 deletions(-) diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h index c07a58b96329..106a08556cbf 100644 --- a/arch/arm64/include/asm/acpi.h +++ b/arch/arm64/include/asm/acpi.h @@ -114,22 +114,8 @@ static inline bool acpi_has_cpu_in_madt(void) } =20 struct acpi_madt_generic_interrupt *acpi_cpu_get_madt_gicc(int cpu); -static inline u32 get_acpi_id_for_cpu(unsigned int cpu) -{ - return acpi_cpu_get_madt_gicc(cpu)->uid; -} - -static inline int get_cpu_for_acpi_id(u32 uid) -{ - int cpu; - - for (cpu =3D 0; cpu < nr_cpu_ids; cpu++) - if (acpi_cpu_get_madt_gicc(cpu) && - uid =3D=3D get_acpi_id_for_cpu(cpu)) - return cpu; =20 - return -EINVAL; -} +int get_cpu_for_acpi_id(u32 uid); =20 static inline void arch_fix_phys_package_id(int num, u32 slot) { } void __init acpi_init_cpus(void); diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c index af90128cfed5..f3866606fc46 100644 --- a/arch/arm64/kernel/acpi.c +++ b/arch/arm64/kernel/acpi.c @@ -458,3 +458,19 @@ int acpi_unmap_cpu(int cpu) } EXPORT_SYMBOL(acpi_unmap_cpu); #endif /* CONFIG_ACPI_HOTPLUG_CPU */ + +int acpi_get_cpu_uid(unsigned int cpu, u32 *uid) +{ + struct acpi_madt_generic_interrupt *gicc; + + if (cpu >=3D nr_cpu_ids) + return -EINVAL; + + gicc =3D acpi_cpu_get_madt_gicc(cpu); + if (!gicc) + return -ENODEV; + + *uid =3D gicc->uid; + return 0; +} +EXPORT_SYMBOL_GPL(acpi_get_cpu_uid); diff --git a/arch/arm64/kernel/acpi_numa.c b/arch/arm64/kernel/acpi_numa.c index 2465f291c7e1..41d1e46a4338 100644 --- a/arch/arm64/kernel/acpi_numa.c +++ b/arch/arm64/kernel/acpi_numa.c @@ -34,6 +34,20 @@ int __init acpi_numa_get_nid(unsigned int cpu) return acpi_early_node_map[cpu]; } =20 +int get_cpu_for_acpi_id(u32 uid) +{ + u32 cpu_uid; + int ret; + + for (int cpu =3D 0; cpu < nr_cpu_ids; cpu++) { + ret =3D acpi_get_cpu_uid(cpu, &cpu_uid); + if (ret =3D=3D 0 && uid =3D=3D cpu_uid) + return cpu; + } + + return -EINVAL; +} + static int __init acpi_parse_gicc_pxm(union acpi_subtable_headers *header, const unsigned long end) { diff --git a/arch/loongarch/include/asm/acpi.h b/arch/loongarch/include/asm= /acpi.h index 7376840fa9f7..eda9d4d0a493 100644 --- a/arch/loongarch/include/asm/acpi.h +++ b/arch/loongarch/include/asm/acpi.h @@ -40,11 +40,6 @@ extern struct acpi_madt_core_pic acpi_core_pic[MAX_CORE_= PIC]; =20 extern int __init parse_acpi_topology(void); =20 -static inline u32 get_acpi_id_for_cpu(unsigned int cpu) -{ - return acpi_core_pic[cpu_logical_map(cpu)].processor_id; -} - #endif /* !CONFIG_ACPI */ =20 #define ACPI_TABLE_UPGRADE_MAX_PHYS ARCH_LOW_ADDRESS_LIMIT diff --git a/arch/loongarch/kernel/acpi.c b/arch/loongarch/kernel/acpi.c index 1367ca759468..058f0dbe8e8f 100644 --- a/arch/loongarch/kernel/acpi.c +++ b/arch/loongarch/kernel/acpi.c @@ -385,3 +385,12 @@ int acpi_unmap_cpu(int cpu) EXPORT_SYMBOL(acpi_unmap_cpu); =20 #endif /* CONFIG_ACPI_HOTPLUG_CPU */ + +int acpi_get_cpu_uid(unsigned int cpu, u32 *uid) +{ + if (cpu >=3D nr_cpu_ids) + return -EINVAL; + *uid =3D acpi_core_pic[cpu_logical_map(cpu)].processor_id; + return 0; +} +EXPORT_SYMBOL_GPL(acpi_get_cpu_uid); diff --git a/arch/riscv/include/asm/acpi.h b/arch/riscv/include/asm/acpi.h index 6e13695120bc..26ab37c171bc 100644 --- a/arch/riscv/include/asm/acpi.h +++ b/arch/riscv/include/asm/acpi.h @@ -61,10 +61,6 @@ static inline void arch_fix_phys_package_id(int num, u32= slot) { } =20 void acpi_init_rintc_map(void); struct acpi_madt_rintc *acpi_cpu_get_madt_rintc(int cpu); -static inline u32 get_acpi_id_for_cpu(int cpu) -{ - return acpi_cpu_get_madt_rintc(cpu)->uid; -} =20 int acpi_get_riscv_isa(struct acpi_table_header *table, unsigned int cpu, const char **isa); diff --git a/arch/riscv/kernel/acpi.c b/arch/riscv/kernel/acpi.c index 71698ee11621..322ea92aa39f 100644 --- a/arch/riscv/kernel/acpi.c +++ b/arch/riscv/kernel/acpi.c @@ -337,3 +337,19 @@ int raw_pci_write(unsigned int domain, unsigned int bu= s, } =20 #endif /* CONFIG_PCI */ + +int acpi_get_cpu_uid(unsigned int cpu, u32 *uid) +{ + struct acpi_madt_rintc *rintc; + + if (cpu >=3D nr_cpu_ids) + return -EINVAL; + + rintc =3D acpi_cpu_get_madt_rintc(cpu); + if (!rintc) + return -ENODEV; + + *uid =3D rintc->uid; + return 0; +} +EXPORT_SYMBOL_GPL(acpi_get_cpu_uid); diff --git a/arch/riscv/kernel/acpi_numa.c b/arch/riscv/kernel/acpi_numa.c index 130769e3a99c..6a2d4289f806 100644 --- a/arch/riscv/kernel/acpi_numa.c +++ b/arch/riscv/kernel/acpi_numa.c @@ -37,11 +37,14 @@ static int __init acpi_numa_get_nid(unsigned int cpu) =20 static inline int get_cpu_for_acpi_id(u32 uid) { - int cpu; + u32 cpu_uid; + int ret; =20 - for (cpu =3D 0; cpu < nr_cpu_ids; cpu++) - if (uid =3D=3D get_acpi_id_for_cpu(cpu)) + for (int cpu =3D 0; cpu < nr_cpu_ids; cpu++) { + ret =3D acpi_get_cpu_uid(cpu, &cpu_uid); + if (ret =3D=3D 0 && uid =3D=3D cpu_uid) return cpu; + } =20 return -EINVAL; } diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c index de5f8c018333..7bd5bc1f225a 100644 --- a/drivers/acpi/pptt.c +++ b/drivers/acpi/pptt.c @@ -459,11 +459,14 @@ static void cache_setup_acpi_cpu(struct acpi_table_he= ader *table, { struct acpi_pptt_cache *found_cache; struct cpu_cacheinfo *this_cpu_ci =3D get_cpu_cacheinfo(cpu); - u32 acpi_cpu_id =3D get_acpi_id_for_cpu(cpu); + u32 acpi_cpu_id; struct cacheinfo *this_leaf; unsigned int index =3D 0; struct acpi_pptt_processor *cpu_node =3D NULL; =20 + if (acpi_get_cpu_uid(cpu, &acpi_cpu_id) !=3D 0) + return; + while (index < get_cpu_cacheinfo(cpu)->num_leaves) { this_leaf =3D this_cpu_ci->info_list + index; found_cache =3D acpi_find_cache_node(table, acpi_cpu_id, @@ -546,7 +549,10 @@ static int topology_get_acpi_cpu_tag(struct acpi_table= _header *table, unsigned int cpu, int level, int flag) { struct acpi_pptt_processor *cpu_node; - u32 acpi_cpu_id =3D get_acpi_id_for_cpu(cpu); + u32 acpi_cpu_id; + + if (acpi_get_cpu_uid(cpu, &acpi_cpu_id) !=3D 0) + return -ENOENT; =20 cpu_node =3D acpi_find_processor_node(table, acpi_cpu_id); if (cpu_node) { @@ -614,18 +620,22 @@ static int find_acpi_cpu_topology_tag(unsigned int cp= u, int level, int flag) * * Check the node representing a CPU for a given flag. * - * Return: -ENOENT if the PPTT doesn't exist, the CPU cannot be found or - * the table revision isn't new enough. + * Return: -ENOENT if can't get CPU's ACPI Processor UID, the PPTT doesn't + * exist, the CPU cannot be found or the table revision isn't new + * enough. * 1, any passed flag set * 0, flag unset */ static int check_acpi_cpu_flag(unsigned int cpu, int rev, u32 flag) { struct acpi_table_header *table; - u32 acpi_cpu_id =3D get_acpi_id_for_cpu(cpu); + u32 acpi_cpu_id; struct acpi_pptt_processor *cpu_node =3D NULL; int ret =3D -ENOENT; =20 + if (acpi_get_cpu_uid(cpu, &acpi_cpu_id) !=3D 0) + return -ENOENT; + table =3D acpi_get_pptt(); if (!table) return -ENOENT; @@ -651,7 +661,8 @@ static int check_acpi_cpu_flag(unsigned int cpu, int re= v, u32 flag) * in the PPTT. Errors caused by lack of a PPTT table, or otherwise, retur= n 0 * indicating we didn't find any cache levels. * - * Return: -ENOENT if no PPTT table or no PPTT processor struct found. + * Return: -ENOENT if no PPTT table, can't get CPU's ACPI Process UID or n= o PPTT + * processor struct found. * 0 on success. */ int acpi_get_cache_info(unsigned int cpu, unsigned int *levels, @@ -671,7 +682,9 @@ int acpi_get_cache_info(unsigned int cpu, unsigned int = *levels, =20 pr_debug("Cache Setup: find cache levels for CPU=3D%d\n", cpu); =20 - acpi_cpu_id =3D get_acpi_id_for_cpu(cpu); + if (acpi_get_cpu_uid(cpu, &acpi_cpu_id)) + return -ENOENT; + cpu_node =3D acpi_find_processor_node(table, acpi_cpu_id); if (!cpu_node) return -ENOENT; @@ -780,8 +793,9 @@ int find_acpi_cpu_topology_package(unsigned int cpu) * It may not exist in single CPU systems. In simple multi-CPU systems, * it may be equal to the package topology level. * - * Return: -ENOENT if the PPTT doesn't exist, the CPU cannot be found - * or there is no toplogy level above the CPU.. + * Return: -ENOENT if the PPTT doesn't exist, can't get CPU's ACPI + * Processor UID, the CPU cannot be found or there is no toplogy level + * above the CPU. * Otherwise returns a value which represents the package for this CPU. */ =20 @@ -797,7 +811,9 @@ int find_acpi_cpu_topology_cluster(unsigned int cpu) if (!table) return -ENOENT; =20 - acpi_cpu_id =3D get_acpi_id_for_cpu(cpu); + if (acpi_get_cpu_uid(cpu, &acpi_cpu_id) !=3D 0) + return -ENOENT; + cpu_node =3D acpi_find_processor_node(table, acpi_cpu_id); if (!cpu_node || !cpu_node->parent) return -ENOENT; @@ -872,7 +888,9 @@ static void acpi_pptt_get_child_cpus(struct acpi_table_= header *table_hdr, cpumask_clear(cpus); =20 for_each_possible_cpu(cpu) { - acpi_id =3D get_acpi_id_for_cpu(cpu); + if (acpi_get_cpu_uid(cpu, &acpi_id) !=3D 0) + continue; + cpu_node =3D acpi_find_processor_node(table_hdr, acpi_id); =20 while (cpu_node) { @@ -966,10 +984,13 @@ int find_acpi_cache_level_from_id(u32 cache_id) for_each_possible_cpu(cpu) { bool empty; int level =3D 1; - u32 acpi_cpu_id =3D get_acpi_id_for_cpu(cpu); + u32 acpi_cpu_id; struct acpi_pptt_cache *cache; struct acpi_pptt_processor *cpu_node; =20 + if (acpi_get_cpu_uid(cpu, &acpi_cpu_id) !=3D 0) + continue; + cpu_node =3D acpi_find_processor_node(table, acpi_cpu_id); if (!cpu_node) continue; @@ -1030,10 +1051,13 @@ int acpi_pptt_get_cpumask_from_cache_id(u32 cache_i= d, cpumask_t *cpus) for_each_possible_cpu(cpu) { bool empty; int level =3D 1; - u32 acpi_cpu_id =3D get_acpi_id_for_cpu(cpu); + u32 acpi_cpu_id; struct acpi_pptt_cache *cache; struct acpi_pptt_processor *cpu_node; =20 + if (acpi_get_cpu_uid(cpu, &acpi_cpu_id) !=3D 0) + continue; + cpu_node =3D acpi_find_processor_node(table, acpi_cpu_id); if (!cpu_node) continue; diff --git a/drivers/acpi/riscv/rhct.c b/drivers/acpi/riscv/rhct.c index caa2c16e1697..8f3f38c64a88 100644 --- a/drivers/acpi/riscv/rhct.c +++ b/drivers/acpi/riscv/rhct.c @@ -44,10 +44,15 @@ int acpi_get_riscv_isa(struct acpi_table_header *table,= unsigned int cpu, const struct acpi_rhct_isa_string *isa_node; struct acpi_table_rhct *rhct; u32 *hart_info_node_offset; - u32 acpi_cpu_id =3D get_acpi_id_for_cpu(cpu); + u32 acpi_cpu_id; + int ret; =20 BUG_ON(acpi_disabled); =20 + ret =3D acpi_get_cpu_uid(cpu, &acpi_cpu_id); + if (ret !=3D 0) + return ret; + if (!table) { rhct =3D acpi_get_rhct(); if (!rhct) diff --git a/drivers/perf/arm_cspmu/arm_cspmu.c b/drivers/perf/arm_cspmu/ar= m_cspmu.c index 34430b68f602..ed72c3d1f796 100644 --- a/drivers/perf/arm_cspmu/arm_cspmu.c +++ b/drivers/perf/arm_cspmu/arm_cspmu.c @@ -1107,15 +1107,17 @@ static int arm_cspmu_acpi_get_cpus(struct arm_cspmu= *cspmu) { struct acpi_apmt_node *apmt_node; int affinity_flag; + u32 cpu_uid; int cpu; + int ret; =20 apmt_node =3D arm_cspmu_apmt_node(cspmu->dev); affinity_flag =3D apmt_node->flags & ACPI_APMT_FLAGS_AFFINITY; =20 if (affinity_flag =3D=3D ACPI_APMT_FLAGS_AFFINITY_PROC) { for_each_possible_cpu(cpu) { - if (apmt_node->proc_affinity =3D=3D - get_acpi_id_for_cpu(cpu)) { + ret =3D acpi_get_cpu_uid(cpu, &cpu_uid); + if (ret =3D=3D 0 && apmt_node->proc_affinity =3D=3D cpu_uid) { cpumask_set_cpu(cpu, &cspmu->associated_cpus); break; } diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 4d2f0bed7a06..035094a55f18 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -324,6 +324,19 @@ int acpi_unmap_cpu(int cpu); =20 acpi_handle acpi_get_processor_handle(int cpu); =20 +#ifndef CONFIG_X86 +/* + * acpi_get_cpu_uid() - Get ACPI Processor UID of a specified CPU from MAD= T table + * @cpu: Logical CPU number (0-based) + * @uid: Pointer to store the ACPI Processor UID (valid only on successful= return) + * + * Return: 0 on successful retrieval (the ACPI Processor ID is stored in *= uid); + * -EINVAL if the CPU number is invalid or out of range; + * -ENODEV if the ACPI Processor UID for the specified CPU is not = found. + */ +int acpi_get_cpu_uid(unsigned int cpu, u32 *uid); +#endif + #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC int acpi_get_ioapic_id(acpi_handle handle, u32 gsi_base, u64 *phys_addr); #endif --=20 2.17.1