All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] libxc: create an initial FPU state for HVM guests
@ 2015-10-13 13:32 Roger Pau Monne
  2015-10-13 13:36 ` Andrew Cooper
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Roger Pau Monne @ 2015-10-13 13:32 UTC (permalink / raw)
  To: xen-devel
  Cc: Wei Liu, Ian Campbell, Stefano Stabellini, Andrew Cooper,
	Ian Jackson, Jan Beulich, Roger Pau Monne

Xen always set the FPU as initialized when loading a HVM context, so libxc
has to provide a valid FPU context when setting the CPU registers.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
---
 tools/libxc/xc_dom_x86.c | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
index dd331bf..f8d580c 100644
--- a/tools/libxc/xc_dom_x86.c
+++ b/tools/libxc/xc_dom_x86.c
@@ -841,6 +841,23 @@ static int vcpu_hvm(struct xc_dom_image *dom)
         struct hvm_save_descriptor end_d;
         HVM_SAVE_TYPE(END) end;
     } bsp_ctx;
+    struct {
+        uint16_t fcw;
+        uint16_t fsw;
+        uint8_t ftw;
+        uint8_t rsvd1;
+        uint16_t fop;
+        union {
+            uint64_t addr;
+            struct {
+                uint32_t offs;
+                uint16_t sel;
+                uint16_t rsvd;
+            };
+        } fip, fdp;
+        uint32_t mxcsr;
+        uint32_t mxcsr_mask;
+    } *fpu_ctxt;
     uint8_t *full_ctx = NULL;
     int rc;
 
@@ -908,6 +925,23 @@ static int vcpu_hvm(struct xc_dom_image *dom)
     /* Set the control registers. */
     bsp_ctx.cpu.cr0 = X86_CR0_PE | X86_CR0_ET;
 
+    /*
+     * XXX: Set initial FPU state.
+     *
+     * This should be removed once Xen is able to know if the
+     * FPU state saved is valid or not, now Xen always sets
+     * fpu_initialised to true regardless of the FPU state.
+     *
+     * The code below mimics the FPU sate after executing
+     * fninit
+     * ldmxcsr 0x1f80
+     */
+    fpu_ctxt = (typeof(fpu_ctxt))bsp_ctx.cpu.fpu_regs;
+
+    fpu_ctxt->fcw = 0x37f;
+    fpu_ctxt->ftw = 0xff;
+    fpu_ctxt->mxcsr = 0x1f80;
+
     /* Set the IP. */
     bsp_ctx.cpu.rip = dom->parms.phys_entry;
 
-- 
1.9.5 (Apple Git-50.3)


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-10-14  9:52 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-13 13:32 [PATCH] libxc: create an initial FPU state for HVM guests Roger Pau Monne
2015-10-13 13:36 ` Andrew Cooper
2015-10-13 13:42 ` Ian Campbell
2015-10-13 16:17   ` Roger Pau Monné
2015-10-13 14:43 ` Jan Beulich
2015-10-13 16:18   ` Roger Pau Monné
2015-10-14  9:52     ` Jan Beulich

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.