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@lists.xenproject.org
Subject: Re: [PATCH v2 02/13] x86/xstate: Create map/unmap primitives for xsave areas
Date: Mon, 16 Dec 2024 11:00:33 +0000 [thread overview]
Message-ID: <D6D2N3YP3VOA.3CIMMVI7YINPD@cloud.com> (raw)
In-Reply-To: <2948b6c9-eb8b-400f-be0a-274cbf7ffde6@suse.com>
On Mon Dec 9, 2024 at 4:11 PM GMT, Jan Beulich wrote:
> On 05.11.2024 15:32, Alejandro Vallejo wrote:
> > --- a/xen/arch/x86/include/asm/xstate.h
> > +++ b/xen/arch/x86/include/asm/xstate.h
> > @@ -143,4 +143,46 @@ static inline bool xstate_all(const struct vcpu *v)
> > (v->arch.xcr0_accum & XSTATE_LAZY & ~XSTATE_FP_SSE);
> > }
> >
> > +/*
> > + * Fetch a pointer to a vCPU's XSAVE area
> > + *
> > + * TL;DR: If v == current, the mapping is guaranteed to already exist.
> > + *
> > + * Despite the name, this macro might not actually map anything. The only case
> > + * in which a mutation of page tables is strictly required is when ASI==on &&
> > + * v!=current. For everything else the mapping already exists and needs not
> > + * be created nor destroyed.
> > + *
> > + * +-----------------+--------------+
> > + * | v == current | v != current |
> > + * +--------------+-----------------+--------------+
> > + * | ASI enabled | per-vCPU fixmap | actual map |
> > + * +--------------+-----------------+--------------+
> > + * | ASI disabled | directmap |
> > + * +--------------+--------------------------------+
> > + *
> > + * There MUST NOT be outstanding maps of XSAVE areas of the non-current vCPU
> > + * at the point of context switch. Otherwise, the unmap operation will
> > + * misbehave.
> > + *
> > + * TODO: Expand the macro to the ASI cases after infra to do so is in place.
> > + *
> > + * @param v Owner of the XSAVE area
> > + */
> > +#define VCPU_MAP_XSAVE_AREA(v) ((v)->arch.xsave_area)
>
> When this is fleshed out, I expect (hope) type safety (type of "return
> value") will remain to be there. I think it would be nice ...
The return type will always be a pointer to `struct xsave_struct`, so that's
definitely type-safe.
>
> > +/*
> > + * Drops the mapping of a vCPU's XSAVE area and nullifies its pointer on exit
> > + *
> > + * See VCPU_MAP_XSAVE_AREA() for additional information on the persistence of
> > + * these mappings. This macro only tears down the mappings in the ASI=on &&
> > + * v!=current case.
> > + *
> > + * TODO: Expand the macro to the ASI cases after infra to do so is in place.
> > + *
> > + * @param v Owner of the XSAVE area
> > + * @param x XSAVE blob of v
> > + */
> > +#define VCPU_UNMAP_XSAVE_AREA(v, x) ({ (x) = NULL; })
>
> ... if this was typesafe (at least on x) from the very beginning as
> well. Thoughts?
I tentatively intend for both macros to involve a call to static inline
functions when the real infrastructure is in place. By the time everything is
fleshed out both will be definitely type-safe. Const-ness might suffer though,
as there's a tension between clarity of static inlines and flexible qualifiers
(i.e: having const outputs iff inputs are const).
>
> Jan
Cheers,
Alejandro
next prev parent reply other threads:[~2024-12-16 11:00 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-05 14:32 [PATCH v2 00/13] x86: Address Space Isolation FPU preparations Alejandro Vallejo
2024-11-05 14:32 ` [PATCH v2 01/13] x86/xstate: Remove stale assertions in fpu_x{rstor,save}() Alejandro Vallejo
2024-11-07 10:29 ` Jan Beulich
2024-11-05 14:32 ` [PATCH v2 02/13] x86/xstate: Create map/unmap primitives for xsave areas Alejandro Vallejo
2024-12-09 16:11 ` Jan Beulich
2024-12-16 11:00 ` Alejandro Vallejo [this message]
2024-11-05 14:33 ` [PATCH v2 03/13] x86/hvm: Map/unmap xsave area in hvm_save_cpu_ctxt() Alejandro Vallejo
2024-12-09 16:13 ` Jan Beulich
2024-11-05 14:33 ` [PATCH v2 04/13] x86/fpu: Map/umap xsave area in vcpu_{reset,setup}_fpu() Alejandro Vallejo
2024-12-09 16:14 ` Jan Beulich
2024-11-05 14:33 ` [PATCH v2 05/13] x86/xstate: Map/unmap xsave area in xstate_set_init() and handle_setbv() Alejandro Vallejo
2024-12-09 16:16 ` Jan Beulich
2024-12-16 11:02 ` Alejandro Vallejo
2024-11-05 14:33 ` [PATCH v2 06/13] x86/hvm: Map/unmap xsave area in hvmemul_{get,put}_fpu() Alejandro Vallejo
2024-12-09 16:18 ` Jan Beulich
2024-11-05 14:33 ` [PATCH v2 07/13] x86/domctl: Map/unmap xsave area in arch_get_info_guest() Alejandro Vallejo
2024-12-09 16:19 ` Jan Beulich
2024-11-05 14:33 ` [PATCH v2 08/13] x86/xstate: Map/unmap xsave area in {compress,expand}_xsave_states() Alejandro Vallejo
2024-12-09 16:20 ` Jan Beulich
2024-12-16 11:36 ` Alejandro Vallejo
2024-11-05 14:33 ` [PATCH v2 09/13] x86/emulator: Refactor FXSAVE_AREA to use wrappers Alejandro Vallejo
2024-12-09 16:26 ` Jan Beulich
2024-12-16 11:58 ` Alejandro Vallejo
2024-12-16 12:01 ` Jan Beulich
2024-12-16 14:37 ` Alejandro Vallejo
2024-11-05 14:33 ` [PATCH v2 10/13] x86/mpx: Map/unmap xsave area in in read_bndcfgu() Alejandro Vallejo
2024-12-09 16:30 ` Jan Beulich
2024-12-16 12:00 ` Alejandro Vallejo
2024-12-16 12:03 ` Jan Beulich
2024-12-16 14:02 ` Alejandro Vallejo
2025-01-10 11:40 ` Alejandro Vallejo
2024-11-05 14:33 ` [PATCH v2 11/13] x86/fpu: Pass explicit xsave areas to fpu_(f)xsave() Alejandro Vallejo
2024-12-09 16:37 ` Jan Beulich
2024-11-05 14:33 ` [PATCH v2 12/13] x86/fpu: Pass explicit xsave areas to fpu_(f)xrstor() Alejandro Vallejo
2024-12-09 16:39 ` Jan Beulich
2024-11-05 14:33 ` [PATCH v2 13/13] x86/xstate: Make xstate_all() and vcpu_xsave_mask() take explicit xstate Alejandro Vallejo
2024-12-09 16:41 ` 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=D6D2N3YP3VOA.3CIMMVI7YINPD@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.