From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012011.outbound.protection.outlook.com [52.101.53.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C1E33DFC7E for ; Thu, 19 Mar 2026 15:53:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.11 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773935599; cv=fail; b=Yr6utMY7JYM83r9Tuh3+0FlknXTegIqOyRH73BykUt2dXyzlGLG0QtMbhK/W2Gp3xhAXqw8ExowvTlL5Gd6wdwCj9mDdNtYiIHb7/hAPja0rHqzEoXCT2iu0vquvG3obx1dsrlDFPPLEydHR3Pn9kG+PeNdtCQ4tJOBbUHnuYRM= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773935599; c=relaxed/simple; bh=3dOvDkimFAffWa/fNbuLBeoq4bx+SQiXqa7Qdd4GfsI=; h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type: Content-Disposition:In-Reply-To:MIME-Version; b=BB9LwCUKm+3rL0VWlk6xS6U6p3TBw7qn0gsNK6JR408p9alPEuk0p/Gw9bFEbbJhF+G3R/R+TcW2tVcN1eqKzBnkDbwJeQUDjpR5+YglAjHnGdHd+ihOTGSwhwq9VzgZRESS+E8PwFQ54PeX/PfFcI6kFqmZ3Pd8Jn6XJXqdghY= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=x3uFel6H; arc=fail smtp.client-ip=52.101.53.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="x3uFel6H" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FKv2Ob/qcUQ651c5lZ+deDIZMBGHXG+48GVfraGPBhdl5dILYijUCp5wpIyvsdEvaVcPUxRe9gzLyLWmNXgsKWGjQeIvk4MfENLVgHjBpVOVWwD4B6kZHeIdrgqZcCNF3UxPf7TH3XmGhEuEo4iQ2HPzjcF7xHAH4Dzceq/rRVxdbGOjLkAvHdlA6R2lB0/+ds8yUtB1QO9KVRx7WY9/P50W3YAJzeIXVaET+6OkOs8uAcmgeN1E0jx+Rr7pDUiDegmOHzXmg7JKH74iFThLya9mD3nlvOHoIQDaab5fA9sZ/lUclBEeaHI7FN7/H1e045YNyaQqbrvpsjMxS2Ua7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=j+k8tai9UKxHJvfCakE/Q4fkH4glkXqMur0OecyAh3w=; b=yGDOn3mAkxu/5U7JgU/AflN3c9XCVZ4KEQBONY3kVbxNt+IFNrra4Tx4kiANUnoVHShcMKu9mmRxe6xArssSN7WvTXmEM4kym2H1EUZ/bvQ5ZgnjbskYx8gn0cJyJlz+m2UpeTCavwKLJOjTMQV/cwfX86M1a/zrcDrz8Nx/speTJRKoKJssuoe83Zl/uUscZfpanNocSaJvf/OW1QvpaD3187y/ZRLnmwtkRQALZi72dzrsPUxzMD9OQRheAan08dJ3tVtU8Jaks5LgkrY07+T/e3eS0IJmL7LsLTej3d/+zXK+ZyLBkF+QDULWAQkpkLiNghxoyUTGQxdvm3q92A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=j+k8tai9UKxHJvfCakE/Q4fkH4glkXqMur0OecyAh3w=; b=x3uFel6HZMfDVFJMc0Y/sEoS72QQM3Gg4p97MUcj5nYcBVF4YxpBx47afoRfNOzzwGKsKH5goC3Apy5MYBGerjhLKzfqAanHVNwpEG8xOpxDbDqJTsSZaqzNr7XlBV2+aZYotgUc9n6ktAcXptP4xR6d4lrAUcU1OSMV3KP6IM8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from DM4PR12MB6373.namprd12.prod.outlook.com (2603:10b6:8:a4::7) by PH7PR12MB6907.namprd12.prod.outlook.com (2603:10b6:510:1b9::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.9; Thu, 19 Mar 2026 15:53:13 +0000 Received: from DM4PR12MB6373.namprd12.prod.outlook.com ([fe80::7da:cc3:cf2e:8ebf]) by DM4PR12MB6373.namprd12.prod.outlook.com ([fe80::7da:cc3:cf2e:8ebf%4]) with mapi id 15.20.9745.007; Thu, 19 Mar 2026 15:53:13 +0000 Date: Thu, 19 Mar 2026 11:53:02 -0400 From: Yazen Ghannam To: Aichun Shi Cc: tglx@kernel.org, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH] x86/topology: Fix Hygon logical_die_id by mapping from amd_node_id Message-ID: <20260319155302.GB1666212@yaz-khff2.amd.com> References: <20260301141157.241770-1-shiaichun@open-hieco.net> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260301141157.241770-1-shiaichun@open-hieco.net> X-ClientProxiedBy: DM6PR21CA0023.namprd21.prod.outlook.com (2603:10b6:5:174::33) To DM4PR12MB6373.namprd12.prod.outlook.com (2603:10b6:8:a4::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB6373:EE_|PH7PR12MB6907:EE_ X-MS-Office365-Filtering-Correlation-Id: f06a0457-fc84-470d-297f-08de85cf9fcd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|7053199007|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: jHTbrQMxWB4qxn/arxCUj96Z3+CFpqirlcM2nKb1nEo09T0UTkQv0ZbumYKElOmR8rIoWivKnJEg5+nGN/+RPgFtMMTT5p9D+dXOVTE6MEi2731yKmddjpPLpt2BdmwPqkZeTkZaeOxbWKZyMWd+BxfvQqxxjQJrk2tH7Wvn1ZVJz1596VxsaBf5rRVCT9xtnTmLSnmD0RGaoldD8QhcvLyixvowL92DTJGBjvImmaPskEEbiwSgv/c5hjGMqWV8uSj84DQAK9G/nThlsKamCQSS3Gkh4rBedvCo/keGxWDi7PRvS12b3TY15Ftanc0Td+1ErjAz/5ZKcBjRomNepzJfhMetksF2B2Wu1BCdW3Yi8cEsDITHkyOaw0gWF/UPezbk5RNH1n7+VZ8wvu7mbuNB7vbaPwP8tdE7IAxJ99bijUTFSk9e97a5cuRpIWb4JG1gzMn0ovX5FBCyBz+p8znvNc4wrTK2Qy+5YVFtcRkjYgW28s+p8MXDGNncCkp9RcRdi5ihABaEW8CkxQi9YfeyRxwpEOjETHtlS5tVVQZy33H9Zf3F7kH2HtOrlVWUdI/MYXilyCff5D27iDeAnarBZNhYL46DtgALmJ1BL3Iwdvr2xYHRtz5tYr2T54wHbzGMQmPYa0P/kJSWDzA8AeaJK6zQ4Hmm/PMps0i0HhIKTL3C++ZBaKoluqlIFh5g1HsLxRtJKFVDUfUVDR/JVNNq6txQdc8mSm8wyRYF6OA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB6373.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7053199007)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vzN1yCueCks2D6ACnDyqSZzoPzBXi31WAjeCSgcJphRhFus3vsjaWYZ3fLOh?= =?us-ascii?Q?zHlraQW6yIQ+txVlQ1RweN+WUZ0dGvNuQ/mC3/oJ9Ep0UVslye7YvwmD3PyP?= =?us-ascii?Q?fYSgg9nWloS5wwE67OAXr3jtHFv6pzVn6Bs7Orvh5XBH0YKqn85Z5NJ/8XhU?= =?us-ascii?Q?wRDEEqXBHSm7ZSLSoXWm49SOKEN2LffoXSVjiIS76cvgpSTFJ5URC+9R+6WE?= =?us-ascii?Q?NesMiEVSgoIxrj+xibYhZW0mp+QoC1m9rZCQG/STHr/Vu3kX6c6u96iZ2Er+?= =?us-ascii?Q?vPiaHHQpp/N9O67o33oYytDHPBz2Ikx3jO2VlwKUKgmcmAWbLo/QE4MHxShQ?= =?us-ascii?Q?KUTn991Gew9llp8SxOM/eakasP1+P93jqt8zkvfUg8Ii4qqx4DDbV830j1ZF?= =?us-ascii?Q?6jg14teo5GAyto5epUImmD+s0sfFAnxvd4mqtu2fxSZW7QD/Yw6ppU8Nxydq?= =?us-ascii?Q?vTiYv58sAoobbKbjESiT03wHg9/xkpU4/NdxF1qhPYFedODp/KjjE6Ws4Xqr?= =?us-ascii?Q?z2h6lC7q1uFkEyH6zQT2teXAT+UGqnEHRnjJEl8vbIW9Lh6KwHNaTKwju898?= =?us-ascii?Q?oAFuVD2DbeZPw1XFV1ril4Td5bPp+4gpYS0/kLpbzUOZIwcnMEBRtPzlxwv6?= =?us-ascii?Q?8jBocbrH0q0B7qUXSOPs6a6Ea5v1X0LAQ1/6wM5ZnKzNmjVjZnwnf/ac0irW?= =?us-ascii?Q?mSE4CNb3CwuANizDHeR3ANAZEXPMoSmwJ+f+Otub2pXoQe+/S6R75xmDKXoW?= =?us-ascii?Q?J+PLPqkNmXt3SwAJ5iuuOxL1ssfI0h07j/HOZcW564SPr1lqT2WAOnQEuz2N?= =?us-ascii?Q?75Z/YRJg8yQ4szV6OIO4f9IXr3/Mc+i170hu+TywTvkkzdt3lKJJSJSRGsmT?= =?us-ascii?Q?0W6lEhSm70s77OnycYrsSwMVe6I9wRwFmYfpnDq2g9jYaid3jZ+cbks12WRK?= =?us-ascii?Q?4y7C6lQybDZQTmS0UeOPRWxDI7KrAC1Jr5h1djpscN31KfKWMJIgB2KiSGfQ?= =?us-ascii?Q?HDLQrj1FqqBlXFxKbD6LTg8Hj0i42foX1T6iZUcLdnp0ld35HuVmGorGWg2L?= =?us-ascii?Q?Zf1M/ayvkX6B50T6SolpflCQ1eMayWgWGT+BYCI213Cp7cnwwsdb0RgYrvzk?= =?us-ascii?Q?VCeFmIOtjXT150RAhC2X5NCaAAflOdKu4G4TXVyjCL+raowkWRDDc7ZXuF2c?= =?us-ascii?Q?zcAtvG1Ome1Xf10n9ZxyChSPBnzvCWI3fqMnYkmwx6lJd8SXkyzG4us7NCsL?= =?us-ascii?Q?Kzih3awvfr42woNrK+QhuDa767209XM1klB9ykU01aIdMzw551Gok/mRlxsT?= =?us-ascii?Q?rnObLrOzsdQR/KQeW7+f+NPKfd8RZ9L3ehhlK5IvODkK8C6L+xCv8BKKXZWk?= =?us-ascii?Q?rzfxZR9okFlPg+ke7C1pP49vasnbHH4R10/wQ+qrxozUSbLSlY04wyoy/N9c?= =?us-ascii?Q?j9NODrCMjsMxgrVJIEkatoj1MRwwndONPgnyQRlH75lp3y1mgDw1PEbpB52B?= =?us-ascii?Q?CuLwLDg36cEsOd/goxNITJp0eIMQIhI2l/HXM28UuPYxdKfSE5jW5sinp6Mk?= =?us-ascii?Q?P76ZyraLwN90n+SDJymc/N1crgcxhYA2xHraDA4fOFGOs8S56Aa1gTcZOUvM?= =?us-ascii?Q?wa0I8AChMfEueU293T0cy/YWbTyBusw1QsmkP8cRlRfL32oj0WMp/9HmL9mT?= =?us-ascii?Q?WsKelkJqfrBLyMiznkrfq3OJUFHyOmOv0iBbSzJ7Mm7UUKWSOJWkzg9tc0S9?= =?us-ascii?Q?PBkJXPqX+g=3D=3D?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: f06a0457-fc84-470d-297f-08de85cf9fcd X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB6373.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Mar 2026 15:53:12.7266 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +q5nOKobP4RsaI9sibkeB1ZVXKO/Jh7LRAzkns3HN/WoSyRGrJmciCyTu7h+hSGg731apaEcpxBldwl1XYk2pg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6907 On Sun, Mar 01, 2026 at 10:11:56PM +0800, Aichun Shi wrote: > On Hygon CPUs, for some cases such as EDAC error decoding, contiguous die > IDs are required. cpuinfo_topology.amd_node_id cannot be used directly as > it may be non-contiguous, thus cpuinfo_topology.logical_die_id can be used > in such cases. > > When CPUID leaf 0x80000026 is not available on Hygon CPUs, die (or node) > topology is not encoded in APIC ID space. logical_die_id obtained from > topology_get_logical_id(apicid, TOPO_DIE_DOMAIN) therefore does not align > with die (or node) topology and is incorrect. > > Fix this by adding a Hygon-only fixup in a new topology_hygon.c: Build a > bijective mapping from (logical_pkg_id, amd_node_id) to a contiguous > logical_die_id. Leave the original APIC-based path unchanged when CPUID > leaf 0x80000026 is available. > > Signed-off-by: Aichun Shi > --- > arch/x86/kernel/cpu/Makefile | 2 +- > arch/x86/kernel/cpu/topology.h | 5 ++ > arch/x86/kernel/cpu/topology_common.c | 3 + > arch/x86/kernel/cpu/topology_hygon.c | 86 +++++++++++++++++++++++++++ > 4 files changed, 95 insertions(+), 1 deletion(-) > create mode 100644 arch/x86/kernel/cpu/topology_hygon.c > > diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile > index 2f8a58ef690e..4e80d0a5d0c9 100644 > --- a/arch/x86/kernel/cpu/Makefile > +++ b/arch/x86/kernel/cpu/Makefile > @@ -38,10 +38,10 @@ obj-y += intel.o tsx.o > obj-$(CONFIG_PM) += intel_epb.o > endif > obj-$(CONFIG_CPU_SUP_AMD) += amd.o > +obj-$(CONFIG_CPU_SUP_HYGON) += hygon.o topology_hygon.o > ifeq ($(CONFIG_AMD_NB)$(CONFIG_SYSFS),yy) > obj-y += amd_cache_disable.o > endif > -obj-$(CONFIG_CPU_SUP_HYGON) += hygon.o > obj-$(CONFIG_CPU_SUP_CYRIX_32) += cyrix.o > obj-$(CONFIG_CPU_SUP_CENTAUR) += centaur.o > obj-$(CONFIG_CPU_SUP_TRANSMETA_32) += transmeta.o > diff --git a/arch/x86/kernel/cpu/topology.h b/arch/x86/kernel/cpu/topology.h > index 37326297f80c..7203ff0457a4 100644 > --- a/arch/x86/kernel/cpu/topology.h > +++ b/arch/x86/kernel/cpu/topology.h > @@ -22,6 +22,11 @@ void topology_set_dom(struct topo_scan *tscan, enum x86_topology_domains dom, > bool cpu_parse_topology_ext(struct topo_scan *tscan); > void cpu_parse_topology_amd(struct topo_scan *tscan); > void cpu_topology_fixup_amd(struct topo_scan *tscan); > +#ifdef CONFIG_CPU_SUP_HYGON > +void cpu_topology_fixup_hygon(struct topo_scan *tscan); > +#else > +static inline void cpu_topology_fixup_hygon(struct topo_scan *tscan) { } > +#endif > > static inline u32 topo_shift_apicid(u32 apicid, enum x86_topology_domains dom) > { > diff --git a/arch/x86/kernel/cpu/topology_common.c b/arch/x86/kernel/cpu/topology_common.c > index 71625795d711..82803744bd0e 100644 > --- a/arch/x86/kernel/cpu/topology_common.c > +++ b/arch/x86/kernel/cpu/topology_common.c > @@ -199,6 +199,9 @@ static void topo_set_ids(struct topo_scan *tscan, bool early) > > if (c->x86_vendor == X86_VENDOR_AMD) > cpu_topology_fixup_amd(tscan); > + > + if (c->x86_vendor == X86_VENDOR_HYGON && !early) > + cpu_topology_fixup_hygon(tscan); > } > > void cpu_parse_topology(struct cpuinfo_x86 *c) > diff --git a/arch/x86/kernel/cpu/topology_hygon.c b/arch/x86/kernel/cpu/topology_hygon.c > new file mode 100644 > index 000000000000..645c30524da6 > --- /dev/null > +++ b/arch/x86/kernel/cpu/topology_hygon.c > @@ -0,0 +1,86 @@ > +// SPDX-License-Identifier: GPL-2.0 > +#include > +#include > +#include > + > +#include checkpatch --strict has this: CHECK: Consider using #include instead of > + > +#include "topology.h" > + > +/* (logical_pkg_id, amd_node_id) -> logical_die_id mapping. */ > +struct hygon_die_map_entry { > + u32 logical_pkg_id; > + u32 amd_node_id; > + u32 logical_die_id; > +}; > + > +static DEFINE_SPINLOCK(hygon_die_map_lock); > +static struct hygon_die_map_entry hygon_die_map[NR_CPUS]; This is a lot of structures to statically allocate. NR_CPUS can be set up to 8192. If you must allocate statically, is there a more conservative value? For example, the max number of "AMD Nodes" per system is '8'. If the goal is to map "amd_node_id" to another value, then you will still have a limit of '8' for the other value. Also, does amd_num_nodes() still work in this case? I understand that the "ID" values are not contiguous, but is there still a discoverable "total number"? > +static u32 hygon_next_logical_die_id; > +static unsigned int hygon_die_map_nr; > + > +/* > + * Build a bijective mapping from (logical_pkg_id, amd_node_id) to a contiguous > + * logical_die_id for Hygon CPUs. > + * > + * Returns logical_die_id (>= 0) on success, or -EINVAL on error. I don't think you need a return value. You can update tscan on success or leave it on error. > + */ > +static int hygon_get_logical_die_id(struct topo_scan *tscan) > +{ > + struct cpuinfo_x86 *c = tscan->c; > + unsigned long flags; > + int logical_die_id; > + unsigned int i; > + int logical_pkg_id = c->topo.logical_pkg_id; > + > + if (c->x86_vendor != X86_VENDOR_HYGON) > + return -EINVAL; > + > + if (logical_pkg_id < 0) > + return -EINVAL; Is this possible? It is 'u32' in 'struct cpuinfo_topology'. > + > + spin_lock_irqsave(&hygon_die_map_lock, flags); > + > + /* Look up existing (logical_pkg_id, amd_node_id) -> logical_die_id. */ > + for (i = 0; i < hygon_die_map_nr; i++) { > + if (hygon_die_map[i].logical_pkg_id == logical_pkg_id && > + hygon_die_map[i].amd_node_id == tscan->amd_node_id) { > + logical_die_id = hygon_die_map[i].logical_die_id; Just update the 'tscan' data here. > + goto out_unlock; > + } > + } > + > + if (hygon_die_map_nr >= ARRAY_SIZE(hygon_die_map)) { > + pr_warn_once("CPU topo: Hygon die map exhausted\n"); > + logical_die_id = -EINVAL; > + goto out_unlock; > + } > + > + /* Allocate new contiguous logical_die_id. */ > + logical_die_id = hygon_next_logical_die_id++; > + hygon_die_map[hygon_die_map_nr++] = (struct hygon_die_map_entry) { > + .logical_pkg_id = logical_pkg_id, > + .amd_node_id = tscan->amd_node_id, > + .logical_die_id = logical_die_id, > + }; > + > +out_unlock: > + spin_unlock_irqrestore(&hygon_die_map_lock, flags); > + return logical_die_id; > +} > + > +void cpu_topology_fixup_hygon(struct topo_scan *tscan) > +{ > + /* Skip the fixup if CPUID leaf 0x80000026 is available. */ > + if (tscan->c->extended_cpuid_level >= 0x80000026) > + return; > + > + /* When CPUID leaf 0x80000026 is not available, die (node) topology is Multi-line comments should start on the next line. /* * Example * comments */ > + * not encoded in APIC ID space. logical_die_id from the DIE domain is > + * incorrect, so fix it up. > + */ > + int logical_die_id = hygon_get_logical_die_id(tscan); > + > + if (logical_die_id >= 0) > + tscan->c->topo.logical_die_id = logical_die_id; > This function could be simpler: void cpu_topology_fixup_hygon(struct topo_scan *tscan) { if (!Hygon) return; if (CPUID >= 0x80000026) return; hygon_build_logical_die_id_map(tscan); } Thanks, Yazen