2016-11-29 12:40-0800, Kyle Huey: > KVM does not currently honor the trap flag when emulating instructions that > cause VM exits. This is observable from guest userspace, try stepping on a > CPUID instruction in gdb in a KVM guest. The program will stop two > instructions after CPUID. > > To fix this, add kvm_skip_emulated_instruction that calls > kvm_x86_ops->skip_emulated_instruction and then kvm_vcpu_check_singlestep to > check for RFLAGS.TF. Patch 4 does this. To handle both the guest setting TF > and the KVM_GUESTDBG_SINGLESTEP cases we need to be able to indicate to > callees that an exit to userspace is required. Patches 1-3 are largely > plumbing to make this possible. > > Traps triggered by task switch instructions require some additional handling > and are not implemented. KVM_GUESTDBG_SINGLESTEP traps can be squashed by > certain instructions which also trigger userspace exits, such as HALT, > MOV CR8, and IO instructions. I believe (although I have not tested) that > KVM will simply generate another trap on the next instruction, so this is > no worse than the current behavior. > > Patch 5 fixes an existing bug where kvm_vcpu_check_singlestep clears > RFLAGS.TF when generating a singlestep trap. Bare silicon does not do this. Looks good, applied to kvm/queue. > These patches only fix this issue for VMX, and the handful of SVM cases that > call the shared kvm_complete_insn_gp. I don't have AMD silicon to test on. Added to TODO, Thanks. -- 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