summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorJohn Levon <john.levon@joyent.com>2019-01-10 17:04:14 +0000
committerDan McDonald <danmcd@joyent.com>2019-01-11 13:45:58 -0500
commitc7749d0f58752c136e82d09f71ff14b1c2ce91f7 (patch)
treee4a283ba0fc2efa5ebe0411c09821660a4c66a60 /usr/src
parent7dfe7b8b0a48ab1f37ab9fc3a51e338320621c21 (diff)
downloadillumos-joyent-c7749d0f58752c136e82d09f71ff14b1c2ce91f7.tar.gz
10208 Add x86 features for L1TF
Reviewed by: Robert Mustacchi <rm@joyent.com> Reviewed by: Toomas Soome <tsoome@me.com> Reviewed by: Gergà Doma <domag02@gmail.com> Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/i86pc/os/cpuid.c15
-rw-r--r--usr/src/uts/intel/sys/x86_archext.h21
2 files changed, 26 insertions, 10 deletions
diff --git a/usr/src/uts/i86pc/os/cpuid.c b/usr/src/uts/i86pc/os/cpuid.c
index 1e5d470e0d..7cc2d6f9d7 100644
--- a/usr/src/uts/i86pc/os/cpuid.c
+++ b/usr/src/uts/i86pc/os/cpuid.c
@@ -32,7 +32,7 @@
* Portions Copyright 2009 Advanced Micro Devices, Inc.
*/
/*
- * Copyright 2018 Joyent, Inc.
+ * Copyright (c) 2019, Joyent, Inc.
*/
/*
* Various routines to handle identification
@@ -217,7 +217,9 @@ static char *x86_feature_names[NUM_X86_FEATURES] = {
"ibrs_all",
"rsba",
"ssb_no",
- "stibp_all"
+ "stibp_all",
+ "flush_cmd",
+ "l1d_vmentry_no"
};
boolean_t
@@ -1051,6 +1053,10 @@ cpuid_scan_security(cpu_t *cpu, uchar_t *featureset)
add_x86_feature(featureset,
X86FSET_RSBA);
}
+ if (reg & IA32_ARCH_CAP_SKIP_L1DFL_VMENTRY) {
+ add_x86_feature(featureset,
+ X86FSET_L1D_VM_NO);
+ }
if (reg & IA32_ARCH_CAP_SSB_NO) {
add_x86_feature(featureset,
X86FSET_SSB_NO);
@@ -1062,6 +1068,9 @@ cpuid_scan_security(cpu_t *cpu, uchar_t *featureset)
if (ecp->cp_edx & CPUID_INTC_EDX_7_0_SSBD)
add_x86_feature(featureset, X86FSET_SSBD);
+
+ if (ecp->cp_edx & CPUID_INTC_EDX_7_0_FLUSH_CMD)
+ add_x86_feature(featureset, X86FSET_FLUSH_CMD);
}
}
@@ -4123,7 +4132,7 @@ static const char sl3_cache_str[] = "sectored-l3-cache";
static const char sh_l2_tlb4k_str[] = "shared-l2-tlb-4k";
static const struct cachetab {
- uint8_t ct_code;
+ uint8_t ct_code;
uint8_t ct_assoc;
uint16_t ct_line_size;
size_t ct_size;
diff --git a/usr/src/uts/intel/sys/x86_archext.h b/usr/src/uts/intel/sys/x86_archext.h
index 38cdf0e6f1..cf7cdd1b84 100644
--- a/usr/src/uts/intel/sys/x86_archext.h
+++ b/usr/src/uts/intel/sys/x86_archext.h
@@ -27,7 +27,7 @@
* All rights reserved.
*/
/*
- * Copyright 2018 Joyent, Inc.
+ * Copyright (c) 2019, Joyent, Inc.
* Copyright 2012 Jens Elkner <jel+illumos@cs.uni-magdeburg.de>
* Copyright 2012 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
* Copyright 2014 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
@@ -254,6 +254,7 @@ extern "C" {
#define CPUID_INTC_EDX_7_0_AVX5124FMAPS 0x00000008 /* AVX512 4FMAPS */
#define CPUID_INTC_EDX_7_0_SPEC_CTRL 0x04000000 /* Spec, IBPB, IBRS */
#define CPUID_INTC_EDX_7_0_STIBP 0x08000000 /* STIBP */
+#define CPUID_INTC_EDX_7_0_FLUSH_CMD 0x10000000 /* IA32_FLUSH_CMD */
#define CPUID_INTC_EDX_7_0_ARCH_CAPS 0x20000000 /* IA32_ARCH_CAPS */
#define CPUID_INTC_EDX_7_0_SSBD 0x80000000 /* SSBD */
@@ -362,11 +363,12 @@ extern "C" {
/*
* Intel IA32_ARCH_CAPABILITIES MSR.
*/
-#define MSR_IA32_ARCH_CAPABILITIES 0x10a
-#define IA32_ARCH_CAP_RDCL_NO 0x0001
-#define IA32_ARCH_CAP_IBRS_ALL 0x0002
-#define IA32_ARCH_CAP_RSBA 0x0004
-#define IA32_ARCH_CAP_SSB_NO 0x0010
+#define MSR_IA32_ARCH_CAPABILITIES 0x10a
+#define IA32_ARCH_CAP_RDCL_NO 0x0001
+#define IA32_ARCH_CAP_IBRS_ALL 0x0002
+#define IA32_ARCH_CAP_RSBA 0x0004
+#define IA32_ARCH_CAP_SKIP_L1DFL_VMENTRY 0x0008
+#define IA32_ARCH_CAP_SSB_NO 0x0010
/*
* Intel Speculation related MSRs
@@ -379,6 +381,9 @@ extern "C" {
#define MSR_IA32_PRED_CMD 0x49
#define IA32_PRED_CMD_IBPB 0x01
+#define MSR_IA32_FLUSH_CMD 0x10b
+#define IA32_FLUSH_CMD_L1D 0x01
+
#define MCI_CTL_VALUE 0xffffffff
#define MTRR_TYPE_UC 0
@@ -491,6 +496,8 @@ extern "C" {
#define X86FSET_RSBA 78
#define X86FSET_SSB_NO 79
#define X86FSET_STIBP_ALL 80
+#define X86FSET_FLUSH_CMD 81
+#define X86FSET_L1D_VM_NO 82
/*
* Intel Deep C-State invariant TSC in leaf 0x80000007.
@@ -773,7 +780,7 @@ extern "C" {
#if defined(_KERNEL) || defined(_KMEMUSER)
-#define NUM_X86_FEATURES 81
+#define NUM_X86_FEATURES 83
extern uchar_t x86_featureset[];
extern void free_x86_featureset(void *featureset);