mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
x86/fpu: Create a typedef for the x87/SSE area inside "struct xsave_struct"
Making the union non-anonymous would cause a lot of headaches, because a lot of code relies on it being so, but it's possible to make a typedef of the anonymous union so all callsites currently relying on typeof() can stop doing so directly. This commit creates a `fpusse_t` typedef to the anonymous union at the head of the XSAVE area and uses it instead of typeof(). No functional change. Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
b1b017ffb7
commit
4fe446a429
4 files changed
+9
-8
No files matched your search
@@ -2363,8 +2363,7 @@ static int cf_check hvmemul_get_fpu(
|
||||
alternative_vcall(hvm_funcs.fpu_dirty_intercept);
|
||||
else if ( type == X86EMUL_FPU_fpu )
|
||||
{
|
||||
const typeof(curr->arch.xsave_area->fpu_sse) *fpu_ctxt =
|
||||
curr->arch.fpu_ctxt;
|
||||
const fpusse_t *fpu_ctxt = curr->arch.fpu_ctxt;
|
||||
|
||||
/*
|
||||
* Latch current register state so that we can back out changes
|
||||
@@ -2404,7 +2403,7 @@ static void cf_check hvmemul_put_fpu(
|
||||
|
||||
if ( aux )
|
||||
{
|
||||
typeof(curr->arch.xsave_area->fpu_sse) *fpu_ctxt = curr->arch.fpu_ctxt;
|
||||
fpusse_t *fpu_ctxt = curr->arch.fpu_ctxt;
|
||||
bool dval = aux->dval;
|
||||
int mode = hvm_guest_x86_mode(curr);
|
||||
|
||||
|
||||
+4
-4
@@ -39,7 +39,7 @@ static inline void fpu_xrstor(struct vcpu *v, uint64_t mask)
|
||||
/* Restore x87 FPU, MMX, SSE and SSE2 state */
|
||||
static inline void fpu_fxrstor(struct vcpu *v)
|
||||
{
|
||||
const typeof(v->arch.xsave_area->fpu_sse) *fpu_ctxt = v->arch.fpu_ctxt;
|
||||
const fpusse_t *fpu_ctxt = v->arch.fpu_ctxt;
|
||||
|
||||
/*
|
||||
* Some CPUs don't save/restore FDP/FIP/FOP unless an exception
|
||||
@@ -151,7 +151,7 @@ static inline void fpu_xsave(struct vcpu *v)
|
||||
/* Save x87 FPU, MMX, SSE and SSE2 state */
|
||||
static inline void fpu_fxsave(struct vcpu *v)
|
||||
{
|
||||
typeof(v->arch.xsave_area->fpu_sse) *fpu_ctxt = v->arch.fpu_ctxt;
|
||||
fpusse_t *fpu_ctxt = v->arch.fpu_ctxt;
|
||||
unsigned int fip_width = v->domain->arch.x87_fip_width;
|
||||
|
||||
if ( fip_width != 4 )
|
||||
@@ -315,7 +315,7 @@ int vcpu_init_fpu(struct vcpu *v)
|
||||
__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;
|
||||
fpusse_t *fpu_sse = v->arch.fpu_ctxt;
|
||||
|
||||
fpu_sse->fcw = FCW_DEFAULT;
|
||||
fpu_sse->mxcsr = MXCSR_DEFAULT;
|
||||
@@ -336,7 +336,7 @@ void vcpu_setup_fpu(struct vcpu *v, struct xsave_struct *xsave_area,
|
||||
* accesses through both pointers alias one another, and the shorter form
|
||||
* is used here.
|
||||
*/
|
||||
typeof(xsave_area->fpu_sse) *fpu_sse = v->arch.fpu_ctxt;
|
||||
fpusse_t *fpu_sse = v->arch.fpu_ctxt;
|
||||
|
||||
ASSERT(!xsave_area || xsave_area == v->arch.xsave_area);
|
||||
|
||||
|
||||
@@ -82,6 +82,8 @@ struct __attribute__((aligned (64))) xsave_struct
|
||||
char data[]; /* Variable layout states */
|
||||
};
|
||||
|
||||
typedef typeof(((struct xsave_struct){}).fpu_sse) fpusse_t;
|
||||
|
||||
struct xstate_bndcsr {
|
||||
uint64_t bndcfgu;
|
||||
uint64_t bndstatus;
|
||||
|
||||
@@ -846,7 +846,7 @@ void xstate_init(struct cpuinfo_x86 *c)
|
||||
|
||||
if ( bsp )
|
||||
{
|
||||
static typeof(current->arch.xsave_area->fpu_sse) __initdata ctxt;
|
||||
static fpusse_t __initdata ctxt;
|
||||
|
||||
asm ( "fxsave %0" : "=m" (ctxt) );
|
||||
if ( ctxt.mxcsr_mask )
|
||||
|
||||