[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/6] x86/cpuid: Introduce recalculate_xstate()
>>> On 16.01.17 at 12:40, <andrew.cooper3@xxxxxxxxxx> wrote: > All data in the xstate union, other than the Da1 feature word, is derived from > other state; either feature bits from other words, or layout information which > has already been collected by Xen's xstate driver. > > Recalculate the xstate information for each policy object when the feature > bits may have changed. > > The XSTATE_XSAVES_ONLY define needs extending to a 64bit value to avoid > problems when taking its converse for masking purposes. I don't understand this part - plain 0 is a signed quantity, so ~0 would be sign extended to 64 bits as needed. > --- a/xen/arch/x86/cpuid.c > +++ b/xen/arch/x86/cpuid.c > @@ -80,6 +80,103 @@ static void sanitise_featureset(uint32_t *fs) > (fs[FEATURESET_e1d] & ~CPUID_COMMON_1D_FEATURES)); > } > > +static void recalculate_xstate(struct cpuid_policy *p) > +{ > + uint64_t xstates = XSTATE_FP_SSE; > + uint32_t xstate_size = XSTATE_AREA_MIN_SIZE; > + unsigned int i, Da1 = p->xstate.Da1; > + > + /* > + * The Da1 leaf is the only piece if information preserved. Everything > + * else is derived from other feature state. > + */ Almost. > + memset(&p->xstate, 0, sizeof(p->xstate)); > + > + if ( !p->basic.xsave ) > + return; You're clobbering it here (but in all reality it should be zero in this case). > @@ -154,6 +152,13 @@ struct cpuid_policy > }; > uint32_t /* b */:32, xss_low, xss_high; > }; > + > + /* Per-component common state. Valid for i >= 2. */ > + struct { > + uint32_t size, offset; > + bool xss:1, align:1; > + uint32_t /* c */:30, /* d */:32; > + } comp[CPUID_GUEST_NR_XSTATE]; Hmm, can we rely on this functioning on varying complier variants? I think the standard doesn't exclude a uint32_t type bitfield to start on a 4-byte boundary if not following another uint32_t one. IOW I think we'd be better off giving the same type to all fields we want to share a storage unit. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |