From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755108AbbCBQDw (ORCPT ); Mon, 2 Mar 2015 11:03:52 -0500 Received: from mx1.redhat.com ([209.132.183.28]:34842 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754655AbbCBQDt (ORCPT ); Mon, 2 Mar 2015 11:03:49 -0500 Date: Mon, 2 Mar 2015 17:03:20 +0100 From: Radim =?utf-8?B?S3LEjW3DocWZ?= To: Bandan Das Cc: Joel Schopp , Gleb Natapov , Paolo Bonzini , kvm@vger.kernel.org, David Kaplan , Joerg Roedel , Marcelo Tosatti , linux-kernel@vger.kernel.org, Borislav Petkov Subject: Re: [PATCH] x86: svm: make wbinvd faster Message-ID: <20150302160319.GA25123@potion.brq.redhat.com> References: <20150228001917.15247.41063.stgit@joelvmguard2.amd.com> <20150302135925.GA26739@potion.brq.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2015-03-02 10:25-0500, Bandan Das: > Radim Krčmář writes: > > 2015-03-01 21:29-0500, Bandan Das: > >> Joel Schopp writes: > >> > +static int wbinvd_interception(struct vcpu_svm *svm) > >> > +{ > >> > + kvm_emulate_wbinvd(&svm->vcpu); > >> > + skip_emulated_instruction(&svm->vcpu); > >> > + return 1; > >> > +} > >> Can't we merge this to kvm_emulate_wbinvd, and just call that function > >> directly for both vmx and svm ? > > > > kvm_emulate_wbinvd() lives in x86.c and skip_emulated_instruction() is > > from svm.c/vmx.c: so we'd have to create a new x86 op and change the > > emulator code as well ... it's probably better like this. > > There's already one - kvm_x86_ops->skip_emulated_instruction My bad, its usage is inconsistent and I only looked at two close interceptions where it was used ... kvm_emulate_cpuid() calls kvm_x86_ops->skip_emulated_instruction(), while kvm_emulate_halt() and kvm_emulate_hypercall() need an external skip. We do "skip" the instruction with kvm_emulate(), so automatically skipping the instruction on kvm_emulate_*() makes sense: 1. rename kvm_emulate_halt() and kvm_emulate_wbinvd() to accommodate callers that don't want to skip 2. introduce kvm_emulate_{halt,wbinvd}() and move the skip to to kvm_emulate_{halt,wbinvd,hypercall}() The alternative is to remove kvm_x86_ops->skip_emulated_instruction(): 1. remove skip from kvm_emulate_cpuid() and modify callers 2. move kvm_complete_insn_gp to a header file and use skip_emulated_instruction directly 3. remove unused kvm_x86_ops->skip_emulated_instruction() Which one do you prefer? Thanks.