From: "Alejandro Vallejo" <alejandro.vallejo@cloud.com>
To: "Jan Beulich" <jbeulich@suse.com>
Cc: "Andrew Cooper" <andrew.cooper3@citrix.com>,
"Roger Pau Monné" <roger.pau@citrix.com>,
Xen-devel <xen-devel@lists.xenproject.org>
Subject: Re: [PATCH v2 2/2] x86/fpu: Split fpu_setup_fpu() in two
Date: Tue, 13 Aug 2024 13:40:21 +0100 [thread overview]
Message-ID: <D3ESHFJW8P2L.1YUEIVC4C77KJ@cloud.com> (raw)
In-Reply-To: <7f001aa8-ee42-4617-8fc4-e4a45d4228e2@suse.com>
On Mon Aug 12, 2024 at 4:23 PM BST, Jan Beulich wrote:
> On 08.08.2024 15:41, Alejandro Vallejo wrote:
> > --- a/xen/arch/x86/hvm/hvm.c
> > +++ b/xen/arch/x86/hvm/hvm.c
> > @@ -1164,10 +1164,25 @@ static int cf_check hvm_load_cpu_ctxt(struct domain *d, hvm_domain_context_t *h)
> > seg.attr = ctxt.ldtr_arbytes;
> > hvm_set_segment_register(v, x86_seg_ldtr, &seg);
> >
> > - /* Cover xsave-absent save file restoration on xsave-capable host. */
> > - vcpu_setup_fpu(v, xsave_enabled(v) ? NULL : v->arch.xsave_area,
> > - ctxt.flags & XEN_X86_FPU_INITIALISED ? ctxt.fpu_regs : NULL,
> > - FCW_RESET);
> > + /*
> > + * On Xen 4.1 and later the FPU state is restored on later HVM context in
> > + * the migrate stream, so what we're doing here is initialising the FPU
> > + * state for guests from even older versions of Xen.
> > + *
> > + * In particular:
> > + * 1. If there's an XSAVE context later in the stream what we do here for
> > + * the FPU doesn't matter because it'll be overriden later.
> > + * 2. If there isn't and the guest didn't use extended states it's still
> > + * fine because we have all the information we need here.
> > + * 3. If there isn't and the guest DID use extended states (could've
> > + * happened prior to Xen 4.1) then we're in a pickle because we have
> > + * to make up non-existing state. For this case we initialise the FPU
> > + * as using x87/SSE only because the rest of the state is gone.
>
> Was this really possible to happen? Guests wouldn't have been able to
> turn on CR4.OSXSAVE, would they?
>
> Jan
You may be right, but my reading of the comment and the code was that
xsave_enabled(v) might be set and the XSAVE hvm context might be missing in the
stream. The archives didn't shed a lot more light than what the code already
gives away.
Otherwise it would've been far simpler to unconditionally pass
v->arch.xsave_area to the second parameter and let the xsave area to be
overriden by the follow-up HVM context with its actual state.
If my understanding is wrong, I'm happy to remove (3), as I don't think it
affects the code anyway. I thought however that it was a relevant data point
to leave paper trail for.
Cheers,
Alejandro
next prev parent reply other threads:[~2024-08-13 12:40 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-08 13:41 [PATCH v2 0/2] x86: FPU handling cleanup Alejandro Vallejo
2024-08-08 13:41 ` [PATCH v2 1/2] x86/fpu: Combine fpu_ctxt and xsave_area in arch_vcpu Alejandro Vallejo
2024-08-12 15:16 ` Jan Beulich
2024-08-13 12:31 ` Alejandro Vallejo
2024-08-08 13:41 ` [PATCH v2 2/2] x86/fpu: Split fpu_setup_fpu() in two Alejandro Vallejo
2024-08-12 15:23 ` Jan Beulich
2024-08-13 12:40 ` Alejandro Vallejo [this message]
2024-08-13 12:47 ` Jan Beulich
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=D3ESHFJW8P2L.1YUEIVC4C77KJ@cloud.com \
--to=alejandro.vallejo@cloud.com \
--cc=andrew.cooper3@citrix.com \
--cc=jbeulich@suse.com \
--cc=roger.pau@citrix.com \
--cc=xen-devel@lists.xenproject.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 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.