On 28/11/2016 05:18, Kyle Huey wrote: > + > + if (unlikely(vmx_get_rflags(vcpu) & X86_EFLAGS_TF)) { > + if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) { > + vcpu->run->debug.arch.dr6 = DR6_BS | DR6_FIXED_1 | > + DR6_RTM; > + vcpu->run->debug.arch.pc = vcpu->arch.singlestep_rip; > + vcpu->run->debug.arch.exception = DB_VECTOR; > + vcpu->run->exit_reason = KVM_EXIT_DEBUG; > + return 0; > + } > + > + /* > + * "Certain debug exceptions may clear bit 0-3. The > + * remaining contents of the DR6 register are never > + * cleared by the processor". > + */ > + vcpu->arch.dr6 &= ~15; > + vcpu->arch.dr6 |= DR6_BS | DR6_RTM; > + kvm_queue_exception(vcpu, DB_VECTOR); > + } This code is pretty much the same as kvm_vcpu_check_singlestep. Let's not duplicate the code and implement skip_emulated_instruction can be implemented in x86.c, like unsigned long rflags = kvm_x86_ops->get_rflags(vcpu); int r = EMULATE_DONE; /* This would be the no_trap variant */ kvm_x86_ops->skip_emulated_instruction(vcpu); kvm_vcpu_check_singlestep(vcpu, rflags, &r); return r == EMULATE_DONE; (because x86.c/vmx.c/svm.c are separate modules, when moving the function to x86.c you should rename it to kvm_skip_emulated_instruction). Paolo -- 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