Received: by 2002:a05:6358:701b:b0:131:369:b2a3 with SMTP id 27csp3454714rwo; Mon, 24 Jul 2023 11:13:23 -0700 (PDT) X-Google-Smtp-Source: APBJJlEQHD0zUXBkaltDvB3qIvIS0oSOLZZnTqCnseSTTkfxg8gOa+jOZj0xJWZzDVU7yj+Oqub/ X-Received: by 2002:ac2:4a76:0:b0:4fb:52f1:9ab4 with SMTP id q22-20020ac24a76000000b004fb52f19ab4mr5688120lfp.50.1690222403391; Mon, 24 Jul 2023 11:13:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690222403; cv=none; d=google.com; s=arc-20160816; b=ihpJvrso9TJyo4ItmBSiW1fvh1G41R7gEcf6LeO42gWuJES3S6OBvdcjPOfntkgAjj QhrYpHTbLuM1gn79r4J4jq4dUvY5BXkVjHSl2U2Q9+CbyjfklCMgIv4fafx8PLOTucEO cx8bDyTtwITjzNRC6j5wHdBd1Qfev7MJcWJ/EkCb3elnJNz+tzBECnw2oGlkJqlAum7g wp+atoWC8NJteLN5b6oG2vU4rC/Jmt8+0O+27Tt2SKv9ty7NKWrm4k3hV51bKMrVfc9n iPAiExLCzkXrmgJTqvR42wWxmWkF8G7SJcEHJmeQqUja9CWo8ATWaYYeRv5TTvE30hdg 5EBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:date:mime-version:references:subject:cc:to:from :dkim-signature:dkim-signature:message-id; bh=UqiiOrV6qFVmLayEKJExgkdA2s95N7jm4m59y0h1Wug=; fh=cDlgSYzM/IiVZ/EC06yL1+GD3+pSK8bXSWGje/Xzf2k=; b=kWuJiy9jiQcVc0RAjNGzfeTMNAZNkJpitHffx6obEy/Cb/w/kIawaon3KoZPiEPTWD 5Cu1wwL0aYf1LZhi5wP7n1NpmPDizGlvp3M865trSnhDzOvcN3lV77T3NJsYsEUF7Js4 XDxu+5q28td+QvwXg9uDWhNWZ9nnjfNPqEgFzFclQkVDZ3qUbwf3YV4XXt9IU+GEDdkz 8HPoJkdU/LjtOJz2SlSwof60agZvsgyaObpAzqfbFkyN23O2gPEva55mHb4IBXF+4U8o 3yu1Ejbf5rXE2JQwRMN6eWbBd1QE8zJPBcDpwsc7I1BYlvh4MHZj1lXVpwNOPxFiemAx RZ9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=WmwjI5Aq; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bc16-20020a056402205000b0052240e8eb00si239760edb.683.2023.07.24.11.12.58; Mon, 24 Jul 2023 11:13:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=WmwjI5Aq; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231164AbjGXRqG (ORCPT + 99 others); Mon, 24 Jul 2023 13:46:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45574 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230362AbjGXRpO (ORCPT ); Mon, 24 Jul 2023 13:45:14 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6AE3F1FE1; Mon, 24 Jul 2023 10:44:17 -0700 (PDT) Message-ID: <20230724172844.515260597@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1690220653; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=UqiiOrV6qFVmLayEKJExgkdA2s95N7jm4m59y0h1Wug=; b=WmwjI5AqRyCiP4ljapblAiCjVgU3uNYxy6ZOIhMmJEKdjB2SnUpXspfXp5hOPdxUPCrIfA gLWrinidMxnJLmpcRGbk00NCc/UT5FtIopsJk0u6VUjXjBy4Nk5wUfWWHNj0EeO1pKD6fn i0jQefWSiYuAlO8gJ/b1Pc0e0sK/SaYf+hY9tiBEJo0gL835MkXo525pJITyMlL4VksduW W0vW9g+4S820zKusu6nLLorc0oV9z1+4wX6q/b94Tc36iK8qOamcVNXSNaqfeUQNGrgXHt 64HxspE+rT+OLqyx+lZ6T3IciZPwAi4PtArB6UPrcfVidIb0PjVt5aMGp6zWeQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1690220653; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=UqiiOrV6qFVmLayEKJExgkdA2s95N7jm4m59y0h1Wug=; b=d4bGMhmdm4CDZAI4LWf7SX2Q23Ztv0JYNq72wwlJ5v5umU5a8aCpqMv0pTSy6Y96H5pmJB Ee5vNZ3ZETwr/cCA== From: Thomas Gleixner To: LKML Cc: x86@kernel.org, Tom Lendacky , Andrew Cooper , Arjan van de Ven , "James E.J. Bottomley" , Dick Kennedy , James Smart , "Martin K. Petersen" , linux-scsi@vger.kernel.org, linux-hwmon@vger.kernel.org, Jean Delvare , Huang Rui , Guenter Roeck , Steve Wahl , Mike Travis , Dimitri Sivanich , Russ Anderson Subject: [patch 14/29] x86/cpu: Add legacy topology parser References: <20230724155329.474037902@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Date: Mon, 24 Jul 2023 19:44:12 +0200 (CEST) X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The legacy topology detection via CPUID leaf 4, which provides the number of cores in the package and CPUID leaf 1 which provides the number of logical CPUs in case that FEATURE_HT is enabled and the CMP_LEGACY feature is not set, is shared for Intel, Centaur amd Zhaoxin CPUs. Lift the code from common.c without the early detection hack and provide it as common fallback mechanism. Will be utilized in later changes. Signed-off-by: Thomas Gleixner --- arch/x86/kernel/cpu/common.c | 3 ++ arch/x86/kernel/cpu/topology.h | 2 + arch/x86/kernel/cpu/topology_common.c | 37 ++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -883,6 +883,9 @@ void detect_ht(struct cpuinfo_x86 *c) #ifdef CONFIG_SMP int index_msb, core_bits; + if (topo_is_converted(c)) + return; + if (detect_ht_early(c) < 0) return; --- a/arch/x86/kernel/cpu/topology.h +++ b/arch/x86/kernel/cpu/topology.h @@ -7,6 +7,8 @@ struct topo_scan { unsigned int dom_shifts[TOPO_MAX_DOMAIN]; unsigned int dom_ncpus[TOPO_MAX_DOMAIN]; + // Legacy CPUID[1]:EBX[23:16] number of logical processors + unsigned int ebx1_nproc_shift; }; bool topo_is_converted(struct cpuinfo_x86 *c); --- a/arch/x86/kernel/cpu/topology_common.c +++ b/arch/x86/kernel/cpu/topology_common.c @@ -24,6 +24,41 @@ void topology_set_dom(struct topo_scan * } } +static unsigned int parse_num_cores(struct cpuinfo_x86 *c) +{ + struct { + u32 cache_type : 5, + unused : 21, + ncores : 6; + } eax; + + if (c->cpuid_level < 4) + return 1; + + cpuid_subleaf_reg(4, 0, CPUID_EAX, &eax); + if (!eax.cache_type) + return 1; + + return eax.ncores + 1; +} + +static void __maybe_unused parse_legacy(struct topo_scan *tscan) +{ + unsigned int cores, core_shift, smt_shift = 0; + struct cpuinfo_x86 *c = tscan->c; + + cores = parse_num_cores(c); + core_shift = get_count_order(cores); + + if (cpu_has(c, X86_FEATURE_HT)) { + if (!WARN_ON_ONCE(tscan->ebx1_nproc_shift < core_shift)) + smt_shift = tscan->ebx1_nproc_shift - core_shift; + } + + topology_set_dom(tscan, TOPO_SMT_DOMAIN, smt_shift, 1U << smt_shift); + topology_set_dom(tscan, TOPO_CORE_DOMAIN, core_shift, cores >> smt_shift); +} + bool topo_is_converted(struct cpuinfo_x86 *c) { /* Temporary until everything is converted over. */ @@ -88,6 +123,8 @@ static void parse_topology(struct topo_s /* The above is sufficient for UP */ if (!IS_ENABLED(CONFIG_SMP)) return; + + tscan->ebx1_nproc_shift = get_count_order(ebx.nproc); } static void topo_set_ids(struct topo_scan *tscan)