From patchwork Thu May 25 17:53:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: tip-bot2 for Thomas Gleixner X-Patchwork-Id: 99149 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp556843vqr; Thu, 25 May 2023 11:03:39 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4+BEfbAVpT7IkXU6U+TfbKfVfTBtl5WDV6D5WYiLkDPGxYjiUgHGSlIcCQs+eKFBbjws5B X-Received: by 2002:a17:903:183:b0:1af:d9d2:a234 with SMTP id z3-20020a170903018300b001afd9d2a234mr2869930plg.3.1685037818676; Thu, 25 May 2023 11:03:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685037818; cv=none; d=google.com; s=arc-20160816; b=MNT9fVoJr+aZFJ4VmiOfLWbX29CCrPUgFsBYg/Eg4FFeO9KnELYqCrlKyQfDwPisO2 fMhsGC834MNdwhYSWno+jThaioxcirKcDOFTOnDR9fk9nR/qELsQtQ15zvBkkNVLHaw+ HqyzBkLXZ2alK4DBoJ9kmsyr2O987GlU459prZo4ZEfoDTqpy7Awrc4xA2t4e54GI77Y CXMA3teKGdHqHotb6032hiBeMG2I/V6slr01ZVX1jP5pdvExvQ/BP6KTpXRsZ4+wRzmg 0nrN8QpfIgjLD79d+R3lGDyRoH20mGegm38xCvNdwJiG0LgMCX5h+9aBf8jjUCKXA5KG ImEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:robot-unsubscribe :robot-id:message-id:mime-version:cc:subject:to:reply-to:sender:from :dkim-signature:dkim-signature:date; bh=oZIJ944O+77XG1tBqABBNpbuyoFIQ90Ml03G5VCwmns=; b=wlfhoyrMhRGGtzplZbVrjqHiu6MhhdcMyq8aa5O8cTUurIJHVTuiRn9B4uecjgEaFs 2ZMDevQtjeEiU0WsVKciymqMxLtSx41Q7Q9XHyclF5kH5MHtUlPuvbA06kaWdWmvGV9K zc48FNnqvZ8fSy9nR01gEL0t97YnZwY1l+G1VW7wI9fEGzyPOIrmAcPTPIV5SCjvcuVy 6N9U2ewlq4X3yc3wmSJTEazvtEXpFy+sojsAidD8EXIxjPD+HwjLxasaMpXa8+APNSpM 03Qk12PduTBCAH99cgNa/oxvoWRnK0VGS99gqgSqwFiOERbh7Yg7XB3Yom5bYjpaJAvS A37Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=gcztliWm; dkim=neutral (no key) header.i=@linutronix.de header.b=9cOE9CF6; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t8-20020a170902b20800b001ae5fcecb49si1896445plr.25.2023.05.25.11.03.25; Thu, 25 May 2023 11:03:38 -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=gcztliWm; dkim=neutral (no key) header.i=@linutronix.de header.b=9cOE9CF6; 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 S231791AbjEYRxo (ORCPT + 99 others); Thu, 25 May 2023 13:53:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57052 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231869AbjEYRxm (ORCPT ); Thu, 25 May 2023 13:53:42 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BDCF597; Thu, 25 May 2023 10:53:40 -0700 (PDT) Date: Thu, 25 May 2023 17:53:38 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1685037218; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oZIJ944O+77XG1tBqABBNpbuyoFIQ90Ml03G5VCwmns=; b=gcztliWmrO0p2gx6UtKjkH7IoiB7JNVSeXzrBOCqz2fWCdOUY4km7OsO3SkyqaDtPvpmzo O0BEGk3Xicx2z/gaAKr/CtZiMfN2UnEtdHgrPRBrogvkBZkqDTdnkzqX1FVye10jVfUIxF j4ODaiIEhEkWSUdSpCXpaGIHwN6XhEiV37PHFdXHqcgoZIz0UsTc45mohV+le2AsMWhAr9 rfSYfNlcw100NFmhn57a68vEmXw/0FPVntNbwxVAigg9tpnajdxVF7ZJYV3ytGOSRLvA1s sZ68wZ23Bb5zrwT6D/Q6gprKh2nTuaw1fGbF+u7RR7H+NXQdSvZ03HxwOnfcbA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1685037218; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oZIJ944O+77XG1tBqABBNpbuyoFIQ90Ml03G5VCwmns=; b=9cOE9CF6lPkY7Mj+jwqaRToW+EgMt0Lvrfcn9Dj9fBo61OxdKjBLJUPQMFf/POZNpIXUT9 4eijTwSdRATS0mDQ== From: "tip-bot2 for Zhang Rui" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: x86/urgent] x86/topology: Fix erroneous smp_num_siblings on Intel Hybrid platforms Cc: Len Brown , Zhang Rui , Dave Hansen , "Peter Zijlstra (Intel)" , x86@kernel.org, linux-kernel@vger.kernel.org MIME-Version: 1.0 Message-ID: <168503721832.404.4706329081986329618.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails 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,URIBL_BLOCKED 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766887691650020447?= X-GMAIL-MSGID: =?utf-8?q?1766890215767410020?= The following commit has been merged into the x86/urgent branch of tip: Commit-ID: edc0a2b5957652f4685ef3516f519f84807087db Gitweb: https://git.kernel.org/tip/edc0a2b5957652f4685ef3516f519f84807087db Author: Zhang Rui AuthorDate: Thu, 23 Mar 2023 09:56:40 +08:00 Committer: Dave Hansen CommitterDate: Thu, 25 May 2023 10:48:42 -07:00 x86/topology: Fix erroneous smp_num_siblings on Intel Hybrid platforms Traditionally, all CPUs in a system have identical numbers of SMT siblings. That changes with hybrid processors where some logical CPUs have a sibling and others have none. Today, the CPU boot code sets the global variable smp_num_siblings when every CPU thread is brought up. The last thread to boot will overwrite it with the number of siblings of *that* thread. That last thread to boot will "win". If the thread is a Pcore, smp_num_siblings == 2. If it is an Ecore, smp_num_siblings == 1. smp_num_siblings describes if the *system* supports SMT. It should specify the maximum number of SMT threads among all cores. Ensure that smp_num_siblings represents the system-wide maximum number of siblings by always increasing its value. Never allow it to decrease. On MeteorLake-P platform, this fixes a problem that the Ecore CPUs are not updated in any cpu sibling map because the system is treated as an UP system when probing Ecore CPUs. Below shows part of the CPU topology information before and after the fix, for both Pcore and Ecore CPU (cpu0 is Pcore, cpu 12 is Ecore). ... -/sys/devices/system/cpu/cpu0/topology/package_cpus:000fff -/sys/devices/system/cpu/cpu0/topology/package_cpus_list:0-11 +/sys/devices/system/cpu/cpu0/topology/package_cpus:3fffff +/sys/devices/system/cpu/cpu0/topology/package_cpus_list:0-21 ... -/sys/devices/system/cpu/cpu12/topology/package_cpus:001000 -/sys/devices/system/cpu/cpu12/topology/package_cpus_list:12 +/sys/devices/system/cpu/cpu12/topology/package_cpus:3fffff +/sys/devices/system/cpu/cpu12/topology/package_cpus_list:0-21 Notice that the "before" 'package_cpus_list' has only one CPU. This means that userspace tools like lscpu will see a little laptop like an 11-socket system: -Core(s) per socket: 1 -Socket(s): 11 +Core(s) per socket: 16 +Socket(s): 1 This is also expected to make the scheduler do rather wonky things too. [ dhansen: remove CPUID detail from changelog, add end user effects ] CC: stable@kernel.org Fixes: bbb65d2d365e ("x86: use cpuid vector 0xb when available for detecting cpu topology") Fixes: 95f3d39ccf7a ("x86/cpu/topology: Provide detect_extended_topology_early()") Suggested-by: Len Brown Signed-off-by: Zhang Rui Signed-off-by: Dave Hansen Acked-by: Peter Zijlstra (Intel) Link: https://lore.kernel.org/all/20230323015640.27906-1-rui.zhang%40intel.com --- arch/x86/kernel/cpu/topology.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/cpu/topology.c b/arch/x86/kernel/cpu/topology.c index 5e868b6..0270925 100644 --- a/arch/x86/kernel/cpu/topology.c +++ b/arch/x86/kernel/cpu/topology.c @@ -79,7 +79,7 @@ int detect_extended_topology_early(struct cpuinfo_x86 *c) * initial apic id, which also represents 32-bit extended x2apic id. */ c->initial_apicid = edx; - smp_num_siblings = LEVEL_MAX_SIBLINGS(ebx); + smp_num_siblings = max_t(int, smp_num_siblings, LEVEL_MAX_SIBLINGS(ebx)); #endif return 0; } @@ -109,7 +109,8 @@ int detect_extended_topology(struct cpuinfo_x86 *c) */ cpuid_count(leaf, SMT_LEVEL, &eax, &ebx, &ecx, &edx); c->initial_apicid = edx; - core_level_siblings = smp_num_siblings = LEVEL_MAX_SIBLINGS(ebx); + core_level_siblings = LEVEL_MAX_SIBLINGS(ebx); + smp_num_siblings = max_t(int, smp_num_siblings, LEVEL_MAX_SIBLINGS(ebx)); core_plus_mask_width = ht_mask_width = BITS_SHIFT_NEXT_LEVEL(eax); die_level_siblings = LEVEL_MAX_SIBLINGS(ebx); pkg_mask_width = die_plus_mask_width = BITS_SHIFT_NEXT_LEVEL(eax);