|
[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 |