From mboxrd@z Thu Jan 1 00:00:00 1970 From: kvm <84kvm84@gmail.com> Subject: Re: X86EMUL_PROPAGATE_FAULT Date: Mon, 16 May 2011 00:31:29 +0200 Message-ID: <4DD05441.9060106@gmail.com> References: <4DC2BCAC.8060703@gmail.com> <4DC7AAD0.1070709@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Avi Kivity To: kvm@vger.kernel.org Return-path: Received: from mail-wy0-f174.google.com ([74.125.82.174]:49383 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935512Ab1EOWbd (ORCPT ); Sun, 15 May 2011 18:31:33 -0400 Received: by wya21 with SMTP id 21so3026673wya.19 for ; Sun, 15 May 2011 15:31:31 -0700 (PDT) In-Reply-To: <4DC7AAD0.1070709@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: As regards this issue, I don't think it's a guest OS bug since running the same OS without the "RET" emulation I get no error. If this bug is related to the ret emulation code, could you please provide a fix? thanks, MS > On 05/05/2011 06:05 PM, Matteo wrote: >> Hello to everybody, >> >> I am working on KVM version 2.6.38 >> and I'm facing a new problem on an emulated instruction >> whose implementation is already in kvm. >> >> The error shows up after the emulation of the "RET" opcode (C3 Byte >> Opcode). >> When trying to emulate the instruction >> at the address loaded after the pop instruction made by the RET >> I get an X86EMUL_PROPAGATE_FAULT error due to a gpa == UNMAPPED_GVA >> as you can see in the following debug trace: >> >> ---------------8<------------------------------------------------- >> x86_decode_insn:2705 -> Starting New Instruction Decode >> >> x86_decode_insn:2709 -> c->eip = ctxt->eip = 3226138255 >> x86_decode_insn:2759 -> Opcode -> c3 >> x86_decode_insn:2928 -> Decode and fetch the source operand >> x86_decode_insn:2931 -> SrcNone >> x86_decode_insn:3015 -> Decode and fetch the second source operand >> x86_decode_insn:3018 -> Src2None >> x86_decode_insn:3044 -> Decode and fetch the destination operand >> x86_decode_insn:3089 -> ImplicitOps >> x86_decode_insn:3092 -> No Destination Operand >> x86_emulate_instruction:4458 -> Returned from x86_decode_insn with r = 0 >> >> x86_emulate_insn:3194 -> starting special_insn... >> x86_emulate_insn:3196 -> c->eip = 3226138256 >> x86_emulate_insn:3565 -> starting writeback... >> writeback:1178 -> c->eip = 2147483648 >> x86_emulate_instruction:4538 -> Return from x86_emulate_insn with >> code r = 0 >> ---------------------------8<----------------------------------------------- >> >> >> So the next instruction will be emulated reading the opcode with >> eip=2147483648 as stated before >> but the emulation fails with the following debug trace >> >> ---------------------------8<----------------------------------------------- >> >> x86_decode_insn:2705 -> Starting New Instruction Decode >> >> x86_decode_insn:2709 -> c->eip = ctxt->eip = 2147483648 >> x86_decode_insn:2757 -> Read opcode from eip >> kvm_read_guest_virt_helper:3724 -> gpa == UNMAPPED_GVA return >> X86EMUL_PROPAGATE_FAULT >> do_fetch_insn_byte:573 -> ops->fetch returns an error >> ---------------------------8<------------------------------------------------ >> > > The instruction has returned to an EIP that is outside RAM, so kvm is > unable to fetch the next instruction. This is likely due to a bug (in > kvm or the guest) that has occurred much earlier. >