]> www.infradead.org Git - linux.git/commitdiff
LoongArch: Get correct cores_per_package for SMT systems
authorHuacai Chen <chenhuacai@loongson.cn>
Mon, 21 Oct 2024 14:11:18 +0000 (22:11 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Mon, 21 Oct 2024 14:11:18 +0000 (22:11 +0800)
In loongson_sysconf, The "core" of cores_per_node and cores_per_package
stands for a logical core, which means in a SMT system it stands for a
thread indeed. This information is gotten from SMBIOS Type4 Structure,
so in order to get a correct cores_per_package for both SMT and non-SMT
systems in parse_cpu_table() we should use SMBIOS_THREAD_PACKAGE_OFFSET
instead of SMBIOS_CORE_PACKAGE_OFFSET.

Cc: stable@vger.kernel.org
Reported-by: Chao Li <lichao@loongson.cn>
Tested-by: Chao Li <lichao@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/include/asm/bootinfo.h
arch/loongarch/kernel/setup.c

index 6d5846dd075cbdde654760422fac5d9536605d4a..7657e016233fb12b04fd85f67f9a5c8ab468a629 100644 (file)
@@ -26,6 +26,10 @@ struct loongson_board_info {
 
 #define NR_WORDS DIV_ROUND_UP(NR_CPUS, BITS_PER_LONG)
 
+/*
+ * The "core" of cores_per_node and cores_per_package stands for a
+ * logical core, which means in a SMT system it stands for a thread.
+ */
 struct loongson_system_configuration {
        int nr_cpus;
        int nr_nodes;
index 00e307203ddb423316b36a041efa47ce39e96559..cbd3c09a93c14c90f4089077eaff3bc0cd203585 100644 (file)
@@ -55,6 +55,7 @@
 #define SMBIOS_FREQHIGH_OFFSET         0x17
 #define SMBIOS_FREQLOW_MASK            0xFF
 #define SMBIOS_CORE_PACKAGE_OFFSET     0x23
+#define SMBIOS_THREAD_PACKAGE_OFFSET   0x25
 #define LOONGSON_EFI_ENABLE            (1 << 3)
 
 unsigned long fw_arg0, fw_arg1, fw_arg2;
@@ -125,7 +126,7 @@ static void __init parse_cpu_table(const struct dmi_header *dm)
        cpu_clock_freq = freq_temp * 1000000;
 
        loongson_sysconf.cpuname = (void *)dmi_string_parse(dm, dmi_data[16]);
-       loongson_sysconf.cores_per_package = *(dmi_data + SMBIOS_CORE_PACKAGE_OFFSET);
+       loongson_sysconf.cores_per_package = *(dmi_data + SMBIOS_THREAD_PACKAGE_OFFSET);
 
        pr_info("CpuClock = %llu\n", cpu_clock_freq);
 }