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(-)
diff --git a/xen/arch/x86/x86_emulate/blk.c b/xen/arch/x86/x86_emulate/blk.c
index 08a05f8453f7..d5b59333823f 100644
--- a/xen/arch/x86/x86_emulate/blk.c
+++ b/xen/arch/x86/x86_emulate/blk.c
@@ -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;
}
--
2.47.0