Module Name: src Committed By: mlelstv Date: Sun Jan 28 16:32:43 UTC 2018
Modified Files: src/sys/arch/x86/x86: cpu_topology.c Log Message: Compute Core/SMT-IDs for AMD family 17h (Ryzen). To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/x86/x86/cpu_topology.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/x86/x86/cpu_topology.c diff -u src/sys/arch/x86/x86/cpu_topology.c:1.12 src/sys/arch/x86/x86/cpu_topology.c:1.13 --- src/sys/arch/x86/x86/cpu_topology.c:1.12 Sun Jan 28 16:15:41 2018 +++ src/sys/arch/x86/x86/cpu_topology.c Sun Jan 28 16:32:43 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu_topology.c,v 1.12 2018/01/28 16:15:41 mlelstv Exp $ */ +/* $NetBSD: cpu_topology.c,v 1.13 2018/01/28 16:32:43 mlelstv Exp $ */ /*- * Copyright (c) 2009 Mindaugas Rasiukevicius <rmind at NetBSD org>, @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cpu_topology.c,v 1.12 2018/01/28 16:15:41 mlelstv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cpu_topology.c,v 1.13 2018/01/28 16:32:43 mlelstv Exp $"); #include <sys/param.h> #include <sys/bitops.h> @@ -151,6 +151,16 @@ x86_cpu_topology(struct cpu_info *ci) } } + /* Family 0x17 supports SMT */ + if (cpu_vendor == CPUVENDOR_AMD && cpu_family == 0x17) { /* XXX */ + x86_cpuid(0x8000001e, descs); + const u_int threads = ((descs[1] >> 8) & 0xff) + 1; + + KASSERT(smt_bits == 0 && smt_bits <= core_bits); + smt_bits = ilog2(threads); + core_bits -= smt_bits; + } + if (smt_bits + core_bits) { if (smt_bits + core_bits < sizeof(apic_id) * NBBY) ci->ci_package_id = apic_id >> (smt_bits + core_bits);