From: Chao Gao <chao.gao@intel.com>
To: x86@kernel.org, linux-kernel@vger.kernel.org,
kvm@vger.kernel.org, tglx@linutronix.de, dave.hansen@intel.com,
seanjc@google.com, pbonzini@redhat.com
Cc: peterz@infradead.org, rick.p.edgecombe@intel.com,
weijiang.yang@intel.com, john.allen@amd.com, bp@alien8.de,
chang.seok.bae@intel.com, xin3.li@intel.com,
Chao Gao <chao.gao@intel.com>, Ingo Molnar <mingo@redhat.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Maxim Levitsky <mlevitsk@redhat.com>,
Samuel Holland <samuel.holland@sifive.com>,
Mitchell Levy <levymitchell0@gmail.com>,
Li RongQing <lirongqing@baidu.com>,
Vignesh Balasubramanian <vigbalas@amd.com>,
Aruna Ramakrishna <aruna.ramakrishna@oracle.com>
Subject: [PATCH v4 7/8] x86/fpu/xstate: Introduce "guest-only" supervisor xfeature set
Date: Tue, 18 Mar 2025 23:31:57 +0800 [thread overview]
Message-ID: <20250318153316.1970147-8-chao.gao@intel.com> (raw)
In-Reply-To: <20250318153316.1970147-1-chao.gao@intel.com>
From: Yang Weijiang <weijiang.yang@intel.com>
Define a new XFEATURE_MASK_SUPERVISOR_GUEST mask to specify the features
that are enabled by default in guest FPUs but not in host FPUs.
Add CET_KERNEL as the first guest-only feature to save host FPUs from
allocating XSAVE buffer space for all threads on CET-capable parts.
Co-developed-by: Chao Gao <chao.gao@intel.com>
Signed-off-by: Chao Gao <chao.gao@intel.com>
Signed-off-by: Yang Weijiang <weijiang.yang@intel.com>
---
Dropped Dave's Suggested-by as the patch has been changed significantly
---
arch/x86/include/asm/fpu/types.h | 9 +++++----
arch/x86/include/asm/fpu/xstate.h | 3 +++
arch/x86/kernel/fpu/xstate.c | 5 ++++-
3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/arch/x86/include/asm/fpu/types.h b/arch/x86/include/asm/fpu/types.h
index 80647c060b32..079f3241e25b 100644
--- a/arch/x86/include/asm/fpu/types.h
+++ b/arch/x86/include/asm/fpu/types.h
@@ -568,8 +568,9 @@ struct fpu_state_config {
* @default_size:
*
* The default size of the register state buffer. Includes all
- * supported features except independent managed features and
- * features which have to be requested by user space before usage.
+ * supported features except independent managed features,
+ * guest-only features and features which have to be requested by
+ * user space before usage.
*/
unsigned int default_size;
@@ -595,8 +596,8 @@ struct fpu_state_config {
* @default_features:
*
* The default supported features bitmap. Does not include
- * independent managed features and features which have to
- * be requested by user space before usage.
+ * independent managed features, guest-only features and features
+ * which have to be requested by user space before usage.
*/
u64 default_features;
diff --git a/arch/x86/include/asm/fpu/xstate.h b/arch/x86/include/asm/fpu/xstate.h
index 8990cf381bef..69db17476061 100644
--- a/arch/x86/include/asm/fpu/xstate.h
+++ b/arch/x86/include/asm/fpu/xstate.h
@@ -45,6 +45,9 @@
/* Features which are dynamically enabled for a process on request */
#define XFEATURE_MASK_USER_DYNAMIC XFEATURE_MASK_XTILE_DATA
+/* Supervisor features which are enabled only in guest FPUs */
+#define XFEATURE_MASK_SUPERVISOR_GUEST XFEATURE_MASK_CET_KERNEL
+
/* All currently supported supervisor features */
#define XFEATURE_MASK_SUPERVISOR_SUPPORTED (XFEATURE_MASK_PASID | \
XFEATURE_MASK_CET_USER | \
diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
index 1dd6ddba8723..b19960215074 100644
--- a/arch/x86/kernel/fpu/xstate.c
+++ b/arch/x86/kernel/fpu/xstate.c
@@ -55,7 +55,7 @@ static const char *xfeature_names[] =
"Protection Keys User registers",
"PASID state",
"Control-flow User registers",
- "Control-flow Kernel registers",
+ "Control-flow Kernel registers (KVM only)",
"unknown xstate feature",
"unknown xstate feature",
"unknown xstate feature",
@@ -813,6 +813,9 @@ void __init fpu__init_system_xstate(unsigned int legacy_size)
fpu_kernel_cfg.default_features &= ~XFEATURE_MASK_USER_DYNAMIC;
fpu_kernel_cfg.guest_default_features = fpu_kernel_cfg.default_features;
+ /* Clean out guest-only features from default */
+ fpu_kernel_cfg.default_features &= ~XFEATURE_MASK_SUPERVISOR_GUEST;
+
fpu_user_cfg.default_features = fpu_user_cfg.max_features;
fpu_user_cfg.default_features &= ~XFEATURE_MASK_USER_DYNAMIC;
fpu_user_cfg.guest_default_features = fpu_user_cfg.default_features;
--
2.46.1
next prev parent reply other threads:[~2025-03-18 15:31 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-18 15:31 [PATCH v4 0/8] Introduce CET supervisor state support Chao Gao
2025-03-18 15:31 ` [PATCH v4 1/8] x86/fpu/xstate: Always preserve non-user xfeatures/flags in __state_perm Chao Gao
2025-04-01 17:17 ` Chang S. Bae
2025-04-01 17:56 ` Sean Christopherson
2025-03-18 15:31 ` [PATCH v4 2/8] x86/fpu: Drop @perm from guest pseudo FPU container Chao Gao
2025-04-01 17:16 ` Chang S. Bae
2025-04-02 1:56 ` Chao Gao
2025-03-18 15:31 ` [PATCH v4 3/8] x86/fpu/xstate: Add CET supervisor xfeature support Chao Gao
2025-04-01 17:15 ` Chang S. Bae
2025-04-02 2:28 ` Chao Gao
2025-04-02 21:37 ` Dave Hansen
2025-04-03 13:26 ` Chao Gao
2025-04-03 14:04 ` Ingo Molnar
2025-03-18 15:31 ` [PATCH v4 4/8] x86/fpu/xstate: Differentiate default features for host and guest FPUs Chao Gao
2025-04-01 17:18 ` Chang S. Bae
2025-04-02 3:16 ` Chao Gao
2025-03-18 15:31 ` [PATCH v4 5/8] x86/fpu: Initialize guest FPU permissions from guest defaults Chao Gao
2025-03-18 15:31 ` [PATCH v4 6/8] x86/fpu: Initialize guest fpstate and FPU pseudo container " Chao Gao
2025-03-18 15:31 ` Chao Gao [this message]
2025-04-01 17:16 ` [PATCH v4 7/8] x86/fpu/xstate: Introduce "guest-only" supervisor xfeature set Chang S. Bae
2025-04-02 4:29 ` Chao Gao
2025-03-18 15:31 ` [PATCH v4 8/8] x86/fpu/xstate: Warn if guest-only supervisor states are detected in normal fpstate Chao Gao
2025-04-01 17:17 ` Chang S. Bae
2025-04-02 14:30 ` Chao Gao
2025-04-04 0:02 ` Chang S. Bae
2025-04-04 1:06 ` Dave Hansen
2025-04-01 17:20 ` [PATCH v4 0/8] Introduce CET supervisor state support Chang S. Bae
2025-04-02 21:12 ` Edgecombe, Rick P
2025-04-02 21:35 ` Dave Hansen
2025-04-02 21:44 ` Sean Christopherson
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=20250318153316.1970147-8-chao.gao@intel.com \
--to=chao.gao@intel.com \
--cc=aruna.ramakrishna@oracle.com \
--cc=bp@alien8.de \
--cc=chang.seok.bae@intel.com \
--cc=dave.hansen@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=john.allen@amd.com \
--cc=kvm@vger.kernel.org \
--cc=levymitchell0@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lirongqing@baidu.com \
--cc=mingo@redhat.com \
--cc=mlevitsk@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=rick.p.edgecombe@intel.com \
--cc=samuel.holland@sifive.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=vigbalas@amd.com \
--cc=weijiang.yang@intel.com \
--cc=x86@kernel.org \
--cc=xin3.li@intel.com \
/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
all inboxes | Powered by JetHome®