Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp4625187ybf; Wed, 4 Mar 2020 07:33:27 -0800 (PST) X-Google-Smtp-Source: ADFU+vuZAQhu2pgFtcCyNCadCfjIBU2R3e8mhWKpjaKJQYrTSnAhpydCYnzF+GqbBOy3KdM8jF8Z X-Received: by 2002:aca:5f09:: with SMTP id t9mr2195860oib.5.1583336007599; Wed, 04 Mar 2020 07:33:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583336007; cv=none; d=google.com; s=arc-20160816; b=N78avJO8z800lCdL5bFQgBYaqIaQA9CeqUVw7qRsnCX6e9+97GDRGM5aFk9oZNfpp0 l8hqa9ugfKLW+bGp246ddbN0LGdd9TD/Ftc3WDp69mA4YrMH+PLw4lj9LiSOZ2s3iCCJ eOuY/ZaffKofk9KGbYJyTH8ug/MHq8CH2BqEmfi+sjYJ3heXAcixBU4fT/nBNnMugP9m fk5fmLaAFRyiZpklrFBUYE5wqodPQ4RWd35r0Jmrly19RnSE95lyuO15e+SKnBSBoCP7 p7C65saaGzmIYzzQiXzuMVlmjRkLwPW+JDxXDnGIAFxlAcSvAaDtKH1lmGLnf/f/493L ZUJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=DvMXhwaYEf1u8lhU5yD2w5KVrzZ7oi00fPBDP3UuBlI=; b=T3FavQk179urbEge8lFcuy8X6aB+B9RqlRgvHl0fgkrvIPgFBFeEvCA4vdsqwXGNNV SoIa855mAQJMSdzHPYr4dV2pCA7rQ8XX2IxbzgdlHMVxU3SPaXlSotcBxoRhy++NM855 Jqj0Bpf3WALIB97qXWCwYpBieOVR4ul8PgvTV+AOR8R0qi9qM9rNik9TLONzpq9tkyN2 Lkn5r0hD+D/VFEF+3JaNdz7GwC/tGwpnhljdmeU8hfb/ZJozvCUi76M00B8GZ8a4Zm0I kTVouCleuJd9eZqkig/phDV3rNtmI+v1Rj/VFIW6TOYW1ARPOytAFXoOWV/PUCRn55nr oPTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="VPyu0sm/"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c9si1291955oto.149.2020.03.04.07.33.15; Wed, 04 Mar 2020 07:33:27 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="VPyu0sm/"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727804AbgCDPdA (ORCPT + 99 others); Wed, 4 Mar 2020 10:33:00 -0500 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:23981 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725897AbgCDPdA (ORCPT ); Wed, 4 Mar 2020 10:33:00 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1583335978; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=DvMXhwaYEf1u8lhU5yD2w5KVrzZ7oi00fPBDP3UuBlI=; b=VPyu0sm/4C/xHixNW/EflzN6H0Q2JKnG4DqmNV4IYL05nLfoPzmRvWICQ3AGfW4rhTOBCu 7/az4RtiN+l6fXMoUoPTNSRgog+zm5jtadKb96K+idXXVloNsvBt1DlvvTJyA40QzfWD5Z gKDjUTWBQHSyEpPeKXDPnEkkTLfF424= Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-158-41TH1scaNtWcs88fk-GEcw-1; Wed, 04 Mar 2020 10:32:57 -0500 X-MC-Unique: 41TH1scaNtWcs88fk-GEcw-1 Received: by mail-qt1-f197.google.com with SMTP id d2so1680841qtr.9 for ; Wed, 04 Mar 2020 07:32:56 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=DvMXhwaYEf1u8lhU5yD2w5KVrzZ7oi00fPBDP3UuBlI=; b=PBxQXxf/tSLT0gJ34vIvUZDMY1dfc47qoSu2w89wVp42Ii8s0oA2XlwUhA5PtwCZvT FSHApTQIZS9bTfd4DXlD42mPBOqeN/fUKUYhZAe/7PclTOuL9Fr+IZrNt36F/Qwn1GSh 4dk+yaahfYkestLWxcN1An3dzXVwwwtpnrt04uX3RLizaUX0JLmeA9ylhwU2++6YW+ct Pgn/notL3/W2oQBrXNUrc9nGPgFql7kVt0VrRjMiAST7+2anZOfp8GeaYx1ex4dsS6jK qa+1SPwS4WUEDoJU/QV1xRYjZZVFHSpriqUd7Gg+cbzgBrfFROkRks4NznUMkbz/BF84 7P0A== X-Gm-Message-State: ANhLgQ1/QBj1kJaWNo4x490K8Nr6lvXd61JQKG7k6qpyDMoxyD7cd7Ql O4c5uN3f7dnHpYWQQ+TiSAJN5CqnC0qks92i1n8l1jhUU3MYxxcQ7i7xKzobM1hNlGD7fcRTzDV f5XrKRleZt4jEXYR/EoNkRpTl X-Received: by 2002:a05:6214:16c3:: with SMTP id d3mr2510370qvz.244.1583335976571; Wed, 04 Mar 2020 07:32:56 -0800 (PST) X-Received: by 2002:a05:6214:16c3:: with SMTP id d3mr2510339qvz.244.1583335976173; Wed, 04 Mar 2020 07:32:56 -0800 (PST) Received: from xz-x1 ([2607:9880:19c0:32::2]) by smtp.gmail.com with ESMTPSA id c13sm8350268qtv.37.2020.03.04.07.32.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Mar 2020 07:32:55 -0800 (PST) Date: Wed, 4 Mar 2020 10:32:53 -0500 From: Peter Xu To: linmiaohe Cc: Paolo Bonzini , Sean Christopherson , Vitaly Kuznetsov , "linux-kernel@vger.kernel.org" , "kvm@vger.kernel.org" Subject: Re: [PATCH] KVM: X86: Avoid explictly fetch instruction in x86_decode_insn() Message-ID: <20200304153253.GB7146@xz-x1> References: <05ca4e7e070844dd92e4f673a1bc15d9@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <05ca4e7e070844dd92e4f673a1bc15d9@huawei.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Mar 04, 2020 at 02:37:06AM +0000, linmiaohe wrote: > Hi: > Peter Xu writes: > >insn_fetch() will always implicitly refill instruction buffer properly when the buffer is empty, so we don't need to explicitly fetch it even if insn_len==0 for x86_decode_insn(). > > > >Signed-off-by: Peter Xu > >--- > > arch/x86/kvm/emulate.c | 5 ----- > > 1 file changed, 5 deletions(-) > > > >diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index dd19fb3539e0..04f33c1ca926 100644 > >--- a/arch/x86/kvm/emulate.c > >+++ b/arch/x86/kvm/emulate.c > >@@ -5175,11 +5175,6 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len) > > ctxt->opcode_len = 1; > > if (insn_len > 0) > > memcpy(ctxt->fetch.data, insn, insn_len); > >- else { > >- rc = __do_insn_fetch_bytes(ctxt, 1); > >- if (rc != X86EMUL_CONTINUE) > >- goto done; > >- } > > > > switch (mode) { > > case X86EMUL_MODE_REAL: > > Looks good, thanks. But it seems we should also take care of the comment in __do_insn_fetch_bytes(), as we do not > load instruction at the beginning of x86_decode_insn() now, which may be misleading: > /* > * One instruction can only straddle two pages, > * and one has been loaded at the beginning of > * x86_decode_insn. So, if not enough bytes > * still, we must have hit the 15-byte boundary. > */ > if (unlikely(size < op_size)) > return emulate_gp(ctxt, 0); Right, thanks for spotting that (even if the patch to be dropped :). I guess not only the comment, but the check might even fail if we apply the patch. Because when the fetch is the 1st attempt and unluckily that acrosses one page boundary (because we'll only fetch until either 15 bytes or the page boundary), so that single fetch could be smaller than op_size provided. Thanks, -- Peter Xu