On Mon, Jan 23, 2017 at 01:10:20PM -0800, Dave Hansen wrote: > The code is: > > > void fpstate_init(union fpregs_state *state) > > { > > if (!static_cpu_has(X86_FEATURE_FPU)) { > > fpstate_init_soft(&state->soft); > > return; > > } > > > > memset(state, 0, fpu_kernel_xstate_size); > > > > /* > > * XRSTORS requires that this bit is set in xcomp_bv, or > > * it will #GP. Make sure it is replaced after the memset(). > > */ > > if (static_cpu_has(X86_FEATURE_XSAVES)) > > state->xsave.header.xcomp_bv = XCOMP_BV_COMPACTED_FORMAT; > > That seems to set it unconditionally. What am I missing?
The fix I am proposing is... state->xsave.header.xcomp_bv = XCOMP_BV_COMPACTED_FORMAT | xfeatures_mask;