[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] Guest SIGILL when different IO is implemented
From: |
Miltiadis Hatzimihail |
Subject: |
Re: [Qemu-devel] Guest SIGILL when different IO is implemented |
Date: |
Thu, 11 May 2017 13:40:15 +0100 |
Thanks Paolo that worked!
Btw, this line
+ GP(SrcMem | DstReg | ModRM | Mov, &pfx_0f_10_0f_11),
+ GP(SrcReg | DstMem | ModRM | Mov, &pfx_0f_10_0f_11),
- N, N, N, N, N, N, N, N,
+ N, N, N, N, N, N,
I think it has 2 extra Ns (not removed from your change?).
Those instructions were not implemented for a reason or is it simply a
chance of never seeing this issue that I saw?
>> The interesting thing is that in the ram case the test is passing, but in
>> the io is failing. Also, if I try this without KVM, it passes in both
cases.
>
>Yes, in the RAM case KVM is not invoked at all.
So for my benefit, does this mean that any RAM transaction is emulated by
QEMU or does it go through KVM to the bare metal? (and hence, KVM is not
emulating this?)
Milton
On Thu, May 11, 2017 at 12:51 PM, Paolo Bonzini <address@hidden> wrote:
>
>
> On 11/05/2017 09:00, Miltiadis Hatzimihail wrote:
> >
> > The interesting thing is that in the ram case the test is passing, but in
> > the io is failing. Also, if I try this without KVM, it passes in both
> cases.
>
> Yes, in the RAM case KVM is not invoked at all.
>
> > So I ve done some reading and for the 2 cases above I get:
> >
> > - KVM_EXIT_MMIO on memory_region_init_io (KVM attempts and fails to
> > emulate MOVSS),
> > - KVM_EXIT_EXCEPTION on memory_region_init_ram(QEMU emulates MOVSS)
>
> No, you don't get any exit for memory_region_init_ram.
>
> > Is that right?
> >
> > Now the question is, if I want to use the IO instead of a RAM, what's the
> > best way to solve this?
>
> Please try this KVM patch:
>
> diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
> index c25cfaf584e7..53fbd1589d2e 100644
> --- a/arch/x86/kvm/emulate.c
> +++ b/arch/x86/kvm/emulate.c
> @@ -3534,6 +3534,22 @@ static int em_rdpmc(struct x86_emulate_ctxt *ctxt)
> return X86EMUL_CONTINUE;
> }
>
> +static int em_movss(struct x86_emulate_ctxt *ctxt)
> +{
> + memcpy(ctxt->dst.valptr, ctxt->src.valptr, 4);
> + ctxt->op_bytes = 4;
> + ctxt->dst.bytes = 4;
> + return X86EMUL_CONTINUE;
> +}
> +
> +static int em_movsd(struct x86_emulate_ctxt *ctxt)
> +{
> + memcpy(ctxt->dst.valptr, ctxt->src.valptr, 8);
> + ctxt->op_bytes = 8;
> + ctxt->dst.bytes = 8;
> + return X86EMUL_CONTINUE;
> +}
> +
> static int em_mov(struct x86_emulate_ctxt *ctxt)
> {
> memcpy(ctxt->dst.valptr, ctxt->src.valptr,
> sizeof(ctxt->src.valptr));
> @@ -4407,6 +4423,11 @@ static int check_perm_out(struct x86_emulate_ctxt
> *ctxt)
> I(Mmx, em_mov), I(Sse | Aligned, em_mov), N, I(Sse | Unaligned,
> em_mov),
> };
>
> +static const struct gprefix pfx_0f_10_0f_11 = {
> + I(Sse | Unaligned, em_mov), I(Sse | Unaligned, em_mov),
> + I(Sse, em_movsd), I(Sse, em_movss),
> +};
> +
> static const struct instr_dual instr_dual_0f_2b = {
> I(0, em_mov), N
> };
> @@ -4626,6 +4647,8 @@ static int check_perm_out(struct x86_emulate_ctxt
> *ctxt)
> DI(ImplicitOps | Priv, invd), DI(ImplicitOps | Priv, wbinvd), N, N,
> N, D(ImplicitOps | ModRM | SrcMem | NoAccess), N, N,
> /* 0x10 - 0x1F */
>
> + GP(SrcMem | DstReg | ModRM | Mov, &pfx_0f_10_0f_11),
> + GP(SrcReg | DstMem | ModRM | Mov, &pfx_0f_10_0f_11),
> N, N, N, N, N, N, N, N,
> D(ImplicitOps | ModRM | SrcMem | NoAccess),
> N, N, N, N, N, N, D(ImplicitOps | ModRM | SrcMem | NoAccess),
>
> Thanks,
>
> Paolo
>
- [Qemu-devel] Guest SIGILL when different IO is implemented, Miltiadis Hatzimihail, 2017/05/11
- Re: [Qemu-devel] Guest SIGILL when different IO is implemented, Paolo Bonzini, 2017/05/11
- Re: [Qemu-devel] Guest SIGILL when different IO is implemented,
Miltiadis Hatzimihail <=
- Re: [Qemu-devel] Guest SIGILL when different IO is implemented, Paolo Bonzini, 2017/05/11
- Re: [Qemu-devel] Guest SIGILL when different IO is implemented, Miltiadis Hatzimihail, 2017/05/11
- Re: [Qemu-devel] Guest SIGILL when different IO is implemented, Paolo Bonzini, 2017/05/11
- Re: [Qemu-devel] Guest SIGILL when different IO is implemented, Miltiadis Hatzimihail, 2017/05/11
- Re: [Qemu-devel] Guest SIGILL when different IO is implemented, Miltiadis Hatzimihail, 2017/05/12
- Re: [Qemu-devel] Guest SIGILL when different IO is implemented, Paolo Bonzini, 2017/05/12
- Message not available
- Message not available
- Message not available
- Re: [Qemu-devel] Guest SIGILL when different IO is implemented, Miltiadis Hatzimihail, 2017/05/16