Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758729AbcK3SmJ (ORCPT ); Wed, 30 Nov 2016 13:42:09 -0500 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 Date: Wed, 30 Nov 2016 19:41:57 +0100 From: Radim =?utf-8?B?S3LEjW3DocWZ?= To: Kyle Huey Cc: Paolo Bonzini , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Joerg Roedel , kvm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 0/5] KVM: VMX: Fix single stepping with emulated instructions Message-ID: <20161130184156.GF1682@potion> References: <20161129204041.8839-1-khuey@kylehuey.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161129204041.8839-1-khuey@kylehuey.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 30 Nov 2016 18:42:01 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1477 Lines: 31 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.