On 04/18/2010 09:33 AM, Manish Regmi wrote:
Hi, The following patch makes sure all code path of failed emulation runs trace_kvm_emulate_insn_failed(). Please let me know if there is anything missing or wrong. Thank you. Signed-off-by: Manish Regmi<regmi.manish@xxxxxxxxx> -------- diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index b6e7535..fd1e875 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3784,36 +3784,35 @@ int emulate_instruction(struct kvm_vcpu *vcpu, c =&vcpu->arch.emulate_ctxt.decode; if (emulation_type& EMULTYPE_TRAP_UD) { if (!c->twobyte) - return EMULATE_FAIL; + goto emulate_failed; switch (c->b) { case 0x01: /* VMMCALL */ if (c->modrm_mod != 3 || c->modrm_rm != 1) - return EMULATE_FAIL; + goto emulate_failed; break; case 0x34: /* sysenter */ case 0x35: /* sysexit */ if (c->modrm_mod != 0 || c->modrm_rm != 0) - return EMULATE_FAIL; + goto emulate_failed; break; case 0x05: /* syscall */ if (c->modrm_mod != 0 || c->modrm_rm != 0) - return EMULATE_FAIL; + goto emulate_failed;; break; default: - return EMULATE_FAIL; + goto emulate_failed; } if (!(c->modrm_reg == 0 || c->modrm_reg == 3)) - return EMULATE_FAIL; + goto emulate_failed; } ++vcpu->stat.insn_emulation; if (r) { ++vcpu->stat.insn_emulation_fail; - trace_kvm_emulate_insn_failed(vcpu); if (kvm_mmu_unprotect_page_virt(vcpu, cr2)) return EMULATE_DONE; - return EMULATE_FAIL; + goto emulate_failed; } }
It's better not to trace #UD triggered emulations, since we except these to fail, for example if the guest executes the UD2 instruction.
-- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html