@@ -11,9 +11,11 @@
!defined(X86EMUL_NO_SIMD)
# ifdef __XEN__
# include <asm/xstate.h>
-# define FXSAVE_AREA ((void *)¤t->arch.xsave_area->fpu_sse)
+# define FXSAVE_AREA ((void *)vcpu_map_xsave_area(current))
+# define UNMAP_FXSAVE_AREA(x) vcpu_unmap_xsave_area(currt ent, x)
# else
# define FXSAVE_AREA get_fpu_save_area()
+# define UNMAP_FXSAVE_AREA(x) ((void)x)
# endif
#endif
@@ -292,6 +294,9 @@ int x86_emul_blk(
}
else
asm volatile ( "fxrstor %0" :: "m" (*fxsr) );
+
+ UNMAP_FXSAVE_AREA(fxsr);
+
break;
}
@@ -320,6 +325,9 @@ int x86_emul_blk(
if ( fxsr != ptr ) /* i.e. s->op_bytes < sizeof(*fxsr) */
memcpy(ptr, fxsr, s->op_bytes);
+
+ UNMAP_FXSAVE_AREA(fxsr);
+
break;
}
Adds an UNMAP primitive to make use of vcpu_unmap_xsave_area() when linked into xen. unmap is a no-op during tests. Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> --- xen/arch/x86/x86_emulate/blk.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)