[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] libxc: create an initial FPU state for HVM guests
On 13/10/15 14:32, Roger Pau Monne wrote: > 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@xxxxxxxxxx> > Cc: Jan Beulich <jbeulich@xxxxxxxx> > Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > Cc: Ian Campbell <ian.campbell@xxxxxxxxxx> > Cc: Wei Liu <wei.liu2@xxxxxxxxxx> It should be noted that this is the root cause for the current issue OSSTest has identified while booting windows. Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> This will do until we fix the hvm save/load code properly. > --- > 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; > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |