From: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
To: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org
Cc: daniel.sneddon@linux.intel.com, tony.luck@intel.com,
linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
linux-perf-users@vger.kernel.org,
Josh Poimboeuf <jpoimboe@kernel.org>,
Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Ricardo Neri <ricardo.neri-calderon@linux.intel.com>,
"Liang, Kan" <kan.liang@linux.intel.com>,
Andrew Cooper <andrew.cooper3@citrix.com>
Subject: [PATCH PATCH 6/9] x86/cpu: Add cpu_type to struct x86_cpu_id
Date: Mon, 17 Jun 2024 02:11:56 -0700 [thread overview]
Message-ID: <20240617-add-cpu-type-v1-6-b88998c01e76@linux.intel.com> (raw)
In-Reply-To: <20240617-add-cpu-type-v1-0-b88998c01e76@linux.intel.com>
In addition to matching vendor/family/model/feature, for hybrid variants it
is required to also match cpu-type also. For example some CPU
vulnerabilities only affect a specific cpu-type. RFDS only affects Intel
Atom parts.
To be able to also match CPUs based on cpu-type add a new field cpu_type to
struct x86_cpu_id which is used by the CPU-matching tables. Introduce
X86_CPU_TYPE_ANY for the cases that don't care about the cpu-type.
Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
---
arch/x86/include/asm/cpu_device_id.h | 35 ++++++++++++++++++++++++-----------
include/linux/mod_devicetable.h | 2 ++
2 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/arch/x86/include/asm/cpu_device_id.h b/arch/x86/include/asm/cpu_device_id.h
index 6c8f4cf03cae..08c2efa6dfdf 100644
--- a/arch/x86/include/asm/cpu_device_id.h
+++ b/arch/x86/include/asm/cpu_device_id.h
@@ -75,13 +75,14 @@
* into another macro at the usage site for good reasons, then please
* start this local macro with X86_MATCH to allow easy grepping.
*/
-#define X86_MATCH_CPU(_vendor, _family, _model, _steppings, _feature, _data) { \
+#define X86_MATCH_CPU(_vendor, _family, _model, _steppings, _feature, _cpu_type, _data) { \
.vendor = _vendor, \
.family = _family, \
.model = _model, \
.steppings = _steppings, \
.feature = _feature, \
.flags = X86_CPU_ID_FLAG_ENTRY_VALID, \
+ .cpu_type = _cpu_type, \
.driver_data = (unsigned long) _data \
}
@@ -98,7 +99,7 @@
*/
#define X86_MATCH_VENDOR_FAM_MODEL_FEATURE(vendor, family, model, feature, data) \
X86_MATCH_CPU(X86_VENDOR_##vendor, family, model, X86_STEPPING_ANY, \
- feature, data)
+ feature, X86_CPU_TYPE_ANY, data)
/**
* X86_MATCH_VENDOR_FAM_FEATURE - Macro for matching vendor, family and CPU feature
@@ -112,7 +113,7 @@
*/
#define X86_MATCH_VENDOR_FAM_FEATURE(vendor, family, feature, data) \
X86_MATCH_CPU(X86_VENDOR_##vendor, family, X86_MODEL_ANY, \
- X86_STEPPING_ANY, feature, data)
+ X86_STEPPING_ANY, feature, X86_CPU_TYPE_ANY, data)
/**
* X86_MATCH_VENDOR_FEATURE - Macro for matching vendor and CPU feature
@@ -125,7 +126,7 @@
*/
#define X86_MATCH_VENDOR_FEATURE(vendor, feature, data) \
X86_MATCH_CPU(X86_VENDOR_##vendor, X86_FAMILY_ANY, X86_MODEL_ANY, \
- X86_STEPPING_ANY, feature, data)
+ X86_STEPPING_ANY, feature, X86_CPU_TYPE_ANY, data)
/**
* X86_MATCH_FEATURE - Macro for matching a CPU feature
@@ -136,7 +137,7 @@
*/
#define X86_MATCH_FEATURE(feature, data) \
X86_MATCH_CPU(X86_VENDOR_ANY, X86_FAMILY_ANY, X86_MODEL_ANY, \
- X86_STEPPING_ANY, feature, data)
+ X86_STEPPING_ANY, feature, X86_CPU_TYPE_ANY, data)
/**
* X86_MATCH_VENDOR_FAM_MODEL - Match vendor, family and model
@@ -150,7 +151,7 @@
*/
#define X86_MATCH_VENDOR_FAM_MODEL(vendor, family, model, data) \
X86_MATCH_CPU(X86_VENDOR_##vendor, family, model, X86_STEPPING_ANY, \
- X86_FEATURE_ANY, data)
+ X86_FEATURE_ANY, X86_CPU_TYPE_ANY, data)
/**
* X86_MATCH_VENDOR_FAM - Match vendor and family
@@ -163,7 +164,7 @@
*/
#define X86_MATCH_VENDOR_FAM(vendor, family, data) \
X86_MATCH_CPU(X86_VENDOR_##vendor, family, X86_MODEL_ANY, \
- X86_STEPPING_ANY, X86_FEATURE_ANY, data)
+ X86_STEPPING_ANY, X86_FEATURE_ANY, X86_CPU_TYPE_ANY, data)
/**
* X86_MATCH_INTEL_FAM6_MODEL - Match vendor INTEL, family 6 and model
@@ -183,7 +184,7 @@
#define X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(model, steppings, data) \
X86_MATCH_CPU(X86_VENDOR_INTEL, 6, INTEL_FAM6_##model, \
- steppings, X86_FEATURE_ANY, data)
+ steppings, X86_FEATURE_ANY, X86_CPU_TYPE_ANY, data)
/**
* X86_MATCH_VFM - Match encoded vendor/family/model
@@ -194,7 +195,7 @@
*/
#define X86_MATCH_VFM(vfm, data) \
X86_MATCH_CPU(VFM_VENDOR(vfm), VFM_FAMILY(vfm), VFM_MODEL(vfm), \
- X86_STEPPING_ANY, X86_FEATURE_ANY, data)
+ X86_STEPPING_ANY, X86_FEATURE_ANY, X86_CPU_TYPE_ANY, data)
/**
* X86_MATCH_VFM_STEPPINGS - Match encoded vendor/family/model/stepping
@@ -206,7 +207,7 @@
*/
#define X86_MATCH_VFM_STEPPINGS(vfm, steppings, data) \
X86_MATCH_CPU(VFM_VENDOR(vfm), VFM_FAMILY(vfm), VFM_MODEL(vfm), \
- steppings, X86_FEATURE_ANY, data)
+ steppings, X86_FEATURE_ANY, X86_CPU_TYPE_ANY, data)
/**
* X86_MATCH_VFM_FEATURE - Match encoded vendor/family/model/feature
@@ -218,7 +219,19 @@
*/
#define X86_MATCH_VFM_FEATURE(vfm, feature, data) \
X86_MATCH_CPU(VFM_VENDOR(vfm), VFM_FAMILY(vfm), VFM_MODEL(vfm), \
- X86_STEPPING_ANY, feature, data)
+ X86_STEPPING_ANY, feature, X86_CPU_TYPE_ANY, data)
+
+/**
+ * X86_MATCH_VFM_CPU_TYPE - Match encoded vendor/family/model/cpu-type
+ * @vfm: Encoded 8-bits each for vendor, family, model
+ * @cpu_type: CPU type e.g. P-core, E-core on Intel
+ * @data: Driver specific data or NULL. The internal storage
+ * format is unsigned long. The supplied value, pointer
+ * etc. is cast to unsigned long internally.
+ */
+#define X86_MATCH_VFM_CPU_TYPE(vfm, cpu_type, data) \
+ X86_MATCH_CPU(VFM_VENDOR(vfm), VFM_FAMILY(vfm), VFM_MODEL(vfm), \
+ X86_STEPPING_ANY, X86_FEATURE_ANY, cpu_type, data)
/*
* Match specific microcode revisions.
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 4338b1b4ac44..b8a2e88f966f 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -692,6 +692,7 @@ struct x86_cpu_id {
__u16 feature; /* bit index */
/* Solely for kernel-internal use: DO NOT EXPORT to userspace! */
__u16 flags;
+ __u8 cpu_type;
kernel_ulong_t driver_data;
};
@@ -701,6 +702,7 @@ struct x86_cpu_id {
#define X86_MODEL_ANY 0
#define X86_STEPPING_ANY 0
#define X86_FEATURE_ANY 0 /* Same as FPU, you can't test for that */
+#define X86_CPU_TYPE_ANY 0
/*
* Generic table type for matching CPU features.
--
2.34.1
next prev parent reply other threads:[~2024-06-17 9:11 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-17 9:11 [PATCH 0/9] Add CPU-type to topology Pawan Gupta
2024-06-17 9:11 ` [PATCH PATCH 1/9] x86/cpu/topology: Add x86_cpu_type to struct cpuinfo_topology Pawan Gupta
2024-06-17 9:35 ` Andrew Cooper
2024-06-17 17:51 ` Pawan Gupta
2024-06-17 13:24 ` kernel test robot
2024-06-17 13:45 ` kernel test robot
2024-06-18 21:28 ` Borislav Petkov
2024-06-19 3:31 ` Pawan Gupta
2024-06-20 15:51 ` Borislav Petkov
2024-06-21 6:36 ` Pawan Gupta
2024-06-18 21:33 ` Mario Limonciello
2024-06-18 22:03 ` Dave Hansen
2024-06-17 9:11 ` [PATCH PATCH 2/9] cpufreq: intel_pstate: Use topology_cpu_type() to get cpu-type Pawan Gupta
2024-06-17 9:27 ` srinivas pandruvada
2024-06-17 18:36 ` Pawan Gupta
2024-06-17 14:01 ` kernel test robot
2024-06-17 9:11 ` [PATCH PATCH 3/9] perf/x86/intel: " Pawan Gupta
2024-06-17 14:50 ` Dave Hansen
2024-06-17 18:09 ` Pawan Gupta
2024-06-17 18:17 ` Dave Hansen
2024-06-17 18:25 ` Pawan Gupta
2024-06-17 9:11 ` [PATCH PATCH 4/9] x86/cpu: Remove get_this_hybrid_cpu_type() Pawan Gupta
2024-06-17 9:11 ` [PATCH PATCH 5/9] x86/cpu: Name CPU matching macro more generically (and shorten) Pawan Gupta
2024-06-17 9:11 ` Pawan Gupta [this message]
2024-06-17 9:12 ` [PATCH PATCH 7/9] x86/cpu: Update x86_match_cpu() to also use cpu-type Pawan Gupta
2024-06-17 9:12 ` [PATCH PATCH 8/9] x86/bugs: Declutter vulnerable CPU list Pawan Gupta
2024-06-17 9:38 ` Andrew Cooper
2024-06-17 18:13 ` Pawan Gupta
2024-06-17 14:13 ` Dave Hansen
2024-06-17 18:14 ` Pawan Gupta
2024-06-17 23:52 ` Pawan Gupta
2024-06-18 0:08 ` Luck, Tony
2024-06-18 3:19 ` Pawan Gupta
2024-06-17 9:12 ` [PATCH PATCH 9/9] x86/rfds: Exclude P-only parts from the RFDS affected list Pawan Gupta
2024-06-17 9:43 ` Andrew Cooper
2024-06-17 14:34 ` Dave Hansen
2024-06-17 18:19 ` Pawan Gupta
2024-06-17 14:33 ` Dave Hansen
2024-06-17 18:24 ` Pawan Gupta
2024-06-18 12:49 ` [PATCH 0/9] Add CPU-type to topology Brice Goglin
2024-06-19 1:53 ` Pawan Gupta
2024-06-19 10:34 ` srinivas pandruvada
2024-06-19 21:25 ` Brice Goglin
2024-06-20 15:06 ` Dave Hansen
2024-06-20 15:22 ` Brice Goglin
2024-06-21 6:23 ` Pawan Gupta
2024-06-27 12:55 ` Ricardo Neri
2024-06-27 12:51 ` Ricardo Neri
2024-06-27 13:22 ` Pawan Gupta
2024-06-27 15:26 ` Ricardo Neri
2024-06-27 16:54 ` Liang, Kan
2024-06-29 11:37 ` Brice Goglin
2024-06-27 12:53 ` Ricardo Neri
2024-06-19 21:22 ` Brice Goglin
2024-06-27 15:22 ` Ricardo Neri
2024-06-27 15:22 ` Ricardo Neri
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240617-add-cpu-type-v1-6-b88998c01e76@linux.intel.com \
--to=pawan.kumar.gupta@linux.intel.com \
--cc=andrew.cooper3@citrix.com \
--cc=bp@alien8.de \
--cc=daniel.sneddon@linux.intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=jpoimboe@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=rafael@kernel.org \
--cc=ricardo.neri-calderon@linux.intel.com \
--cc=srinivas.pandruvada@linux.intel.com \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox