Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp3233874pxb; Tue, 20 Apr 2021 03:50:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxNyrpNZwzX8eQvd5wmbpxP13FpzwPL2loW99szi6oPHxdc7ZsnBnDUXN21g7KrWKCahwTW X-Received: by 2002:a05:6402:c8:: with SMTP id i8mr32183568edu.57.1618915830424; Tue, 20 Apr 2021 03:50:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618915830; cv=none; d=google.com; s=arc-20160816; b=Gi99TZGMiVEwUF8z7rwQFY609iYElvbtgPZkYaxa+TJejquNTZzsJM72sI7waO7ho5 YwdZiEi8QdPlrgjBFpeCsX7Hhq3DIofZBvY+NQbt3pqkAxglHy60BuGMFL69LCZe136K p4DdFyqOazmlLw2HUVnlxquhr6Lh44L+a5I1kvZGrjf1bDFXpLjXj/3aQuQwc5coscLe 73XfuvWTS3A486ERO+0RDtSSi3za1iltKNsbZf+P20eKFRZdvmaggjQrjdv8Hffbh/Ms PZ3ykSnk5UWo7TLxHYCjXb/YkTNZDeL93OgVM2iIzxQTYLFtw1ja5SVMqQCZrngAK7Rd et/w== 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:references:in-reply-to:cc:subject :to:reply-to:sender:from:dkim-signature:dkim-signature:date; bh=JpJ7/wcH9ZqAF27R9awa1mYM2q2vmr+TnLqlhpiVPhg=; b=VdYS6+xExvmuCdJkDh9kOterohQob59FFOORK1Fgl2IxwNpMVZozJkCoIJSgw1S9Pq USaOicrSOE+IsR7fDsBW5Expaeu+z0KJCuBLXqDboJwfcOeMbdPBo6KnZDQqXc8FCDoW ZXlFi4L6lDGRufcPqqy4vn6rq3HQIMeC6EjxQA6ncFAbrHosuYGLG1/kX1So62bgJSaZ UDmJFePZYz+/LtnoWBM3h9mVV6BYySghBPmyV4SlyVpwtcwp3zi0bFfzR5HXX/7DItMH a+ietcaLANkMOi3yCmzItkZf/d3eXAZ8c9ONsWzXkzCawxepqqO1jmND2uCGqxpQvczh vHdg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=GCqDvzsX; dkim=neutral (no key) header.i=@linutronix.de header.b=xJLUrXnz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ao17si14974125ejc.205.2021.04.20.03.50.05; Tue, 20 Apr 2021 03:50:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=GCqDvzsX; dkim=neutral (no key) header.i=@linutronix.de header.b=xJLUrXnz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S232366AbhDTKse (ORCPT + 99 others); Tue, 20 Apr 2021 06:48:34 -0400 Received: from Galois.linutronix.de ([193.142.43.55]:51694 "EHLO galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231856AbhDTKrW (ORCPT ); Tue, 20 Apr 2021 06:47:22 -0400 Date: Tue, 20 Apr 2021 10:46:49 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1618915610; 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: in-reply-to:in-reply-to:references:references; bh=JpJ7/wcH9ZqAF27R9awa1mYM2q2vmr+TnLqlhpiVPhg=; b=GCqDvzsXz1XC5AT8Iq3DaPhxhrF2prmlI3sdJ7NIWKcQxRw8ydMbRVAtH16Epf4rStzD8v /5SVAilS/uL1JWmJqFmBrNitoNaVBDQddKDe914YFx5vz4hSJzvZ5uxV+XcGL0ODX2hGNS KQMyQEM2fBHODDqWwj9GNaMrijP1dVbEkwBePE3I/JAiq6Cd8tSk61PYw3bsojm5vtkgCG yk/77eywq/X/mOgkC1T8hoypwsycA01jqpoI79LNhCdLEjv/ntJlcEll+EFt+ZtGvvlqdh /kR0uw+WVeiV6VLF5fEYV4ijuhylQp2aZm6xY1RwjSMe+cT+vUamzdfc4KF6eA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1618915610; 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: in-reply-to:in-reply-to:references:references; bh=JpJ7/wcH9ZqAF27R9awa1mYM2q2vmr+TnLqlhpiVPhg=; b=xJLUrXnzhrpu2lnSOGCfmj+WxtzqV+lpqBHfF1tF9UPtLkERcRU4QaKCltITZSy428EQlr P70+2vRkWqb0c3Dg== From: "tip-bot2 for Ricardo Neri" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: perf/core] x86/cpu: Add helper function to get the type of the current hybrid CPU Cc: Ricardo Neri , "Peter Zijlstra (Intel)" , Tony Luck , Len Brown , Borislav Petkov , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <1618237865-33448-3-git-send-email-kan.liang@linux.intel.com> References: <1618237865-33448-3-git-send-email-kan.liang@linux.intel.com> MIME-Version: 1.0 Message-ID: <161891560955.29796.10811256921836669612.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the perf/core branch of tip: Commit-ID: 250b3c0d79d1f4a55e54d8a9ef48058660483fef Gitweb: https://git.kernel.org/tip/250b3c0d79d1f4a55e54d8a9ef48058660483fef Author: Ricardo Neri AuthorDate: Mon, 12 Apr 2021 07:30:42 -07:00 Committer: Peter Zijlstra CommitterDate: Mon, 19 Apr 2021 20:03:23 +02:00 x86/cpu: Add helper function to get the type of the current hybrid CPU On processors with Intel Hybrid Technology (i.e., one having more than one type of CPU in the same package), all CPUs support the same instruction set and enumerate the same features on CPUID. Thus, all software can run on any CPU without restrictions. However, there may be model-specific differences among types of CPUs. For instance, each type of CPU may support a different number of performance counters. Also, machine check error banks may be wired differently. Even though most software will not care about these differences, kernel subsystems dealing with these differences must know. Add and expose a new helper function get_this_hybrid_cpu_type() to query the type of the current hybrid CPU. The function will be used later in the perf subsystem. The Intel Software Developer's Manual defines the CPU type as 8-bit identifier. Signed-off-by: Ricardo Neri Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Tony Luck Reviewed-by: Len Brown Acked-by: Borislav Petkov Link: https://lkml.kernel.org/r/1618237865-33448-3-git-send-email-kan.liang@linux.intel.com --- arch/x86/include/asm/cpu.h | 6 ++++++ arch/x86/kernel/cpu/intel.c | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h index da78ccb..610905d 100644 --- a/arch/x86/include/asm/cpu.h +++ b/arch/x86/include/asm/cpu.h @@ -45,6 +45,7 @@ extern void __init cpu_set_core_cap_bits(struct cpuinfo_x86 *c); extern void switch_to_sld(unsigned long tifn); extern bool handle_user_split_lock(struct pt_regs *regs, long error_code); extern bool handle_guest_split_lock(unsigned long ip); +u8 get_this_hybrid_cpu_type(void); #else static inline void __init cpu_set_core_cap_bits(struct cpuinfo_x86 *c) {} static inline void switch_to_sld(unsigned long tifn) {} @@ -57,6 +58,11 @@ static inline bool handle_guest_split_lock(unsigned long ip) { return false; } + +static inline u8 get_this_hybrid_cpu_type(void) +{ + return 0; +} #endif #ifdef CONFIG_IA32_FEAT_CTL void init_ia32_feat_ctl(struct cpuinfo_x86 *c); diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index 0e422a5..26fb626 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -1195,3 +1195,19 @@ void __init cpu_set_core_cap_bits(struct cpuinfo_x86 *c) cpu_model_supports_sld = true; split_lock_setup(); } + +#define X86_HYBRID_CPU_TYPE_ID_SHIFT 24 + +/** + * get_this_hybrid_cpu_type() - Get the type of this hybrid CPU + * + * Returns the CPU type [31:24] (i.e., Atom or Core) of a CPU in + * a hybrid processor. If the processor is not hybrid, returns 0. + */ +u8 get_this_hybrid_cpu_type(void) +{ + if (!cpu_feature_enabled(X86_FEATURE_HYBRID_CPU)) + return 0; + + return cpuid_eax(0x0000001a) >> X86_HYBRID_CPU_TYPE_ID_SHIFT; +}