From mboxrd@z Thu Jan 1 00:00:00 1970 From: Radim =?utf-8?B?S3LEjW3DocWZ?= Subject: Re: [PATCH v2 0/5] KVM: VMX: Fix single stepping with emulated instructions Date: Wed, 30 Nov 2016 19:41:57 +0100 Message-ID: <20161130184156.GF1682@potion> References: <20161129204041.8839-1-khuey@kylehuey.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Joerg Roedel , kvm@vger.kernel.org, linux-kernel@vger.kernel.org To: Kyle Huey Return-path: Received: from mx1.redhat.com ([209.132.183.28]:40222 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756097AbcK3SmB (ORCPT ); Wed, 30 Nov 2016 13:42:01 -0500 Content-Disposition: inline In-Reply-To: <20161129204041.8839-1-khuey@kylehuey.com> Sender: kvm-owner@vger.kernel.org List-ID: 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.