From: "Doru Blânzeanu" <dblanzeanu@linux.microsoft.com>
To: Magnus Kulke <magnuskulke@linux.microsoft.com>
Cc: qemu-devel@nongnu.org, "Magnus Kulke" <magnuskulke@microsoft.com>,
"Zhao Liu" <zhao1.liu@intel.com>,
"Doru Blânzeanu" <doru.blanzeanu@microsoft.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Wei Liu" <liuwe@microsoft.com>, "Wei Liu" <wei.liu@kernel.org>,
"Mohamed Mediouni" <mohamed@unpredictable.fr>
Subject: Re: [PATCH] target/i386: Skip supervisor in xsave decompaction
Date: Thu, 2 Jul 2026 16:55:43 +0300 [thread overview]
Message-ID: <akZt35qP1EUSczOp@linux.microsoft.com> (raw)
In-Reply-To: <20260702124746.450228-1-magnuskulke@linux.microsoft.com>
On Thu, Jul 02, 2026 at 02:47:46PM +0200, Magnus Kulke wrote:
> Supervisor state should be skipped b/c there is no slot in standard
> format XSAVE buffer for it. CET State is being migrated via MSRs and
> other supervisor state isn't currently migrated.
>
> Fixes: 8612deb3f4
> Signed-off-by: Magnus Kulke <magnuskulke@linux.microsoft.com>
> ---
> target/i386/cpu.h | 2 ++
> target/i386/xsave_helper.c | 13 ++++++++++---
> 2 files changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/target/i386/cpu.h b/target/i386/cpu.h
> index e6a197602d..fff701c6c4 100644
> --- a/target/i386/cpu.h
> +++ b/target/i386/cpu.h
> @@ -655,9 +655,11 @@ typedef enum X86Seg {
>
> #define XSTATE_DYNAMIC_MASK (XSTATE_XTILE_DATA_MASK)
>
> +#define ESA_FEATURE_XSS_BIT 0
> #define ESA_FEATURE_ALIGN64_BIT 1
> #define ESA_FEATURE_XFD_BIT 2
>
> +#define ESA_FEATURE_XSS_MASK (1U << ESA_FEATURE_XSS_BIT)
> #define ESA_FEATURE_ALIGN64_MASK (1U << ESA_FEATURE_ALIGN64_BIT)
> #define ESA_FEATURE_XFD_MASK (1U << ESA_FEATURE_XFD_BIT)
>
> diff --git a/target/i386/xsave_helper.c b/target/i386/xsave_helper.c
> index 625bae103a..1fa3133b1a 100644
> --- a/target/i386/xsave_helper.c
> +++ b/target/i386/xsave_helper.c
> @@ -332,7 +332,7 @@ int decompact_xsave_area(const void *buf, size_t buflen, CPUX86State *env)
> size_t i;
> uint32_t eax, ebx, ecx, edx;
> uint32_t size, dst_off;
> - bool align64;
> + bool align64, supervisor;
> uint64_t guest_xcr0, *xstate_bv;
>
> compacted_xstate_bv = *(uint64_t *)(buf + XSAVE_XSTATE_BV_OFFSET);
> @@ -383,6 +383,7 @@ int decompact_xsave_area(const void *buf, size_t buflen, CPUX86State *env)
> size = eax;
> dst_off = ebx;
> align64 = (ecx & (1u << 1)) != 0;
> + supervisor = (ecx & ESA_FEATURE_XSS_MASK) != 0;
>
> /* Component is in the layout but unknown to the guest CPUID model */
> if (size == 0) {
> @@ -433,8 +434,14 @@ int decompact_xsave_area(const void *buf, size_t buflen, CPUX86State *env)
> return -E2BIG;
> }
>
> - /* Copy components marked present in XSTATE_BV to guest model */
> - if (((compacted_xstate_bv >> i) & 1) != 0) {
> + /*
> + * Copy components marked present in XSTATE_BV to guest model.
> + *
> + * NB: Supervisor state is skipped b/c there is no slot in the
> + * standard format XSAVE buffer (CET state is migrated via MSRs,
> + * others supervisor state isn't migrated).
> + */
> + if (((compacted_xstate_bv >> i) & 1) != 0 && !supervisor) {
> memcpy(env->xsave_buf + dst_off, buf + xsave_offset, size);
> }
>
> --
> 2.34.1
Reviewed-by: Doru Blânzeanu <dblanzeanu@linux.microsoft.com>
prev parent reply other threads:[~2026-07-02 13:57 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-02 12:47 [PATCH] target/i386: Skip supervisor in xsave decompaction Magnus Kulke
2026-07-02 13:55 ` Doru Blânzeanu [this message]
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=akZt35qP1EUSczOp@linux.microsoft.com \
--to=dblanzeanu@linux.microsoft.com \
--cc=doru.blanzeanu@microsoft.com \
--cc=liuwe@microsoft.com \
--cc=magnuskulke@linux.microsoft.com \
--cc=magnuskulke@microsoft.com \
--cc=mohamed@unpredictable.fr \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=wei.liu@kernel.org \
--cc=zhao1.liu@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.