From nobody Sat Nov 6 15:16:56 2021 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 704FF1846505; Sat, 6 Nov 2021 15:17:05 +0000 (UTC) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (br1.CN84in.dnsmgr.net [69.59.192.140]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4Hmgw10xmZz4X20; Sat, 6 Nov 2021 15:17:05 +0000 (UTC) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 1A6FGudA038008; Sat, 6 Nov 2021 08:16:56 -0700 (PDT) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: (from freebsd@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 1A6FGuAe038007; Sat, 6 Nov 2021 08:16:56 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <202111061516.1A6FGuAe038007@gndrsh.dnsmgr.net> Subject: Re: git: 6badb512a94d - main - Prefer CPUID leaf 1Fh for Intel CPU topology detection. In-Reply-To: <202111060454.1A64sB3B077957@gitrepo.freebsd.org> To: Alexander Motin Date: Sat, 6 Nov 2021 08:16:56 -0700 (PDT) CC: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Reply-To: rgrimes@freebsd.org X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4Hmgw10xmZz4X20 X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[] X-ThisMailContainsUnwantedMimeParts: N > The branch main has been updated by mav: > > URL: https://cgit.FreeBSD.org/src/commit/?id=6badb512a94df667f0df1484fb288ece186305bd > > commit 6badb512a94df667f0df1484fb288ece186305bd > Author: Alexander Motin > AuthorDate: 2021-11-06 04:48:37 +0000 > Commit: Alexander Motin > CommitDate: 2021-11-06 04:53:52 +0000 > > Prefer CPUID leaf 1Fh for Intel CPU topology detection. > > Leaf 1Fh is a prefered extended version of 0Bh. It is supported by > new Lader Lake CPUs, though does not report anything new so far. > > MFC after: 2 weeks > --- > sys/x86/x86/mp_x86.c | 25 +++++++++++++++++-------- > 1 file changed, 17 insertions(+), 8 deletions(-) > > diff --git a/sys/x86/x86/mp_x86.c b/sys/x86/x86/mp_x86.c > index 7a72c501ff25..3b0e25172d0d 100644 > --- a/sys/x86/x86/mp_x86.c > +++ b/sys/x86/x86/mp_x86.c > @@ -380,7 +380,7 @@ topo_probe_intel_0x4(void) > > /* > * Determine topology of processing units for Intel CPUs > - * using CPUID Leaf 11, if supported. > + * using CPUID Leaf 1Fh or 0Bh, if supported. > * See: > * - Intel 64 Architecture Processor Topology Enumeration > * - Intel 64 and IA-32 ArchitecturesSoftware Developer?s Manual, > @@ -390,13 +390,23 @@ topo_probe_intel_0x4(void) > static void > topo_probe_intel_0xb(void) > { > - u_int p[4]; > + u_int leaf; > + u_int p[4] = { 0 }; > int bits; > int type; > int i; > > - /* Fall back if CPU leaf 11 doesn't really exist. */ > - cpuid_count(0x0b, 0, p); > + /* Prefer leaf 1Fh (V2 Extended Topology Enumeration). */ > + if (cpu_high >= 0x1f) { > + leaf = 0x1f; > + cpuid_count(leaf, 0, p); > + } > + /* Fall back to leaf 0Bh (Extended Topology Enumeration). */ > + if (p[1] == 0) { > + leaf = 0x0b; > + cpuid_count(leaf, 0, p); > + } > + /* Fall back to leaf 04h (Deterministic Cache Parameters). */ > if (p[1] == 0) { > topo_probe_intel_0x4(); > return; > @@ -404,7 +414,7 @@ topo_probe_intel_0xb(void) > > /* We only support three levels for now. */ > for (i = 0; ; i++) { > - cpuid_count(0x0b, i, p); > + cpuid_count(leaf, i, p); > > bits = p[0] & 0x1f; > type = (p[2] >> 8) & 0xff; > @@ -412,13 +422,12 @@ topo_probe_intel_0xb(void) > if (type == 0) > break; > > - /* TODO: check for duplicate (re-)assignment */ > if (type == CPUID_TYPE_SMT) > core_id_shift = bits; > else if (type == CPUID_TYPE_CORE) > pkg_id_shift = bits; > - else > - printf("unknown CPU level type %d\n", type); Why do we loose this potential diagnostic message, and isnt its trailing \n needed to close the probe message? It would need to be come an else of the if (bootverbose) if I am reading things correctly. > + else if (bootverbose) > + printf("Topology level type %d shift: %d\n", type, bits); > } > > if (pkg_id_shift < core_id_shift) { > -- Rod Grimes rgrimes@freebsd.org