[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86: adjust xsave structure attributes
commit b011a5bf41e3101a9f2108e6f25281f9279d9628 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Mon Feb 1 13:53:16 2016 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Mon Feb 1 13:53:16 2016 +0100 x86: adjust xsave structure attributes The packed attribute was pointlessly used here - there are no misaligned fields, and hence even if the attribute took effect, it would at best lead to the compiler generating worse code. At the same time specify the required alignment of the fpu_sse sub- structure, such that the various typeof() uses on that field obtain pointers to properly aligned memory (knowledge which a compiler may want to make use of). Also add suitable build-time checks. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/i387.c | 4 +++- xen/arch/x86/xstate.c | 3 ++- xen/include/asm-x86/xstate.h | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/i387.c b/xen/arch/x86/i387.c index 331a401..67016c9 100644 --- a/xen/arch/x86/i387.c +++ b/xen/arch/x86/i387.c @@ -277,7 +277,9 @@ int vcpu_init_fpu(struct vcpu *v) } else { - v->arch.fpu_ctxt = _xzalloc(sizeof(v->arch.xsave_area->fpu_sse), 16); + BUILD_BUG_ON(__alignof(v->arch.xsave_area->fpu_sse) < 16); + v->arch.fpu_ctxt = _xzalloc(sizeof(v->arch.xsave_area->fpu_sse), + __alignof(v->arch.xsave_area->fpu_sse)); if ( v->arch.fpu_ctxt ) { typeof(v->arch.xsave_area->fpu_sse) *fpu_sse = v->arch.fpu_ctxt; diff --git a/xen/arch/x86/xstate.c b/xen/arch/x86/xstate.c index 4e87ab3..f5d62fe 100644 --- a/xen/arch/x86/xstate.c +++ b/xen/arch/x86/xstate.c @@ -414,7 +414,8 @@ int xstate_alloc_save_area(struct vcpu *v) BUG_ON(xsave_cntxt_size < XSTATE_AREA_MIN_SIZE); /* XSAVE/XRSTOR requires the save area be 64-byte-boundary aligned. */ - save_area = _xzalloc(xsave_cntxt_size, 64); + BUILD_BUG_ON(__alignof(*save_area) < 64); + save_area = _xzalloc(xsave_cntxt_size, __alignof(*save_area)); if ( save_area == NULL ) return -ENOMEM; diff --git a/xen/include/asm-x86/xstate.h b/xen/include/asm-x86/xstate.h index 12d939b..c902bb1 100644 --- a/xen/include/asm-x86/xstate.h +++ b/xen/include/asm-x86/xstate.h @@ -48,9 +48,9 @@ extern u64 xfeature_mask; extern unsigned int *xstate_sizes; /* extended state save area */ -struct __packed __attribute__((aligned (64))) xsave_struct +struct __attribute__((aligned (64))) xsave_struct { - union { /* FPU/MMX, SSE */ + union __attribute__((aligned(16))) { /* FPU/MMX, SSE */ char x[512]; struct { uint16_t fcw; -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |