Received: by 2002:a5d:9c59:0:0:0:0:0 with SMTP id 25csp2130021iof; Tue, 7 Jun 2022 20:44:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyilc3h1lXCy0eud2aQV7q5UAF2/WG3TNT9igebZ3Z2hLpjSLQ+bjUyIlTS9tIfybTlGzMh X-Received: by 2002:a17:903:22c6:b0:167:5991:fb63 with SMTP id y6-20020a17090322c600b001675991fb63mr21849126plg.37.1654659878170; Tue, 07 Jun 2022 20:44:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654659878; cv=none; d=google.com; s=arc-20160816; b=UJIBSJxwLoLuAnD9X5doFves2me3WhNRXB+FeoZi+nb8ljk65i6kZD3GxmwfsSFE7g M9xygx3q/KodiIAJfEeODMD+QVdkGlDrQzsslWlHm/Sx/QCDa9De+e/cXGKyB5Q1s9M8 NSAKyUw/sJPkCTO0QHnQDKnyk5pJgJnAiLyPHLQBeLipOqTE+NsbOFY5lDp0EmImvoz1 iMh94Ztkn2DEoaly7aYDD38q8DosPEhQG98h9RRzH/eDrrc9kvrjovlnReqYsF++tgpg +L4Yac8B++7fNTMJSBShKHX2xyBgZvFSVPizESY5dCuKToW3SpOHmLkcKqREsd2VfIRI PXzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:date:cc:to:from:subject :message-id:dkim-signature; bh=hPcrVbGSfC2d9bGnlJDvNet18sRYkg2g/ox43s88aXY=; b=nIo8oOE8EQFg6jEDQQEra9DYut2Mp8wM3TrjcD/vbw9Jl439Eo9hHVvn5VGcU39nel wfIIJrlBaSQaT7VAllE6aVGnFXfln5dSobiFX3VfBi21L6kSL0erC8HzjM2plfKTNUiq pKbcQCqE4aX/vyyKkKsY/a/QRDhifWE+s9E+537ai8s5A8Qmr7G7mRt/r5vnXjWFgf3k OqAVVzHz3yBNwOEpBknBIjju224GK1UufPkkDJMfQqsm0YQ2B19Wx/LneE4wwgBBAkQF 98ocOnqfqN7uXm2G667pk33iNcKwDXBebt/9BH0+EOlJOKHI+q1K3U2xPUzll/bmCAKj OcQA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=dqFhhRaY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 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 lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id q20-20020a635c14000000b003c24b633c7esi25467822pgb.668.2022.06.07.20.44.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 20:44:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=dqFhhRaY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 4A5671D5A8C; Tue, 7 Jun 2022 20:03:10 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240354AbiFGJ42 (ORCPT + 99 others); Tue, 7 Jun 2022 05:56:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39890 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240276AbiFGJ4M (ORCPT ); Tue, 7 Jun 2022 05:56:12 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D813EE733E for ; Tue, 7 Jun 2022 02:56:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1654595770; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hPcrVbGSfC2d9bGnlJDvNet18sRYkg2g/ox43s88aXY=; b=dqFhhRaY2DLlVF7XMlqXUfh3vbMzXHoa9hihcTdf/POqlsCYMSgV8CzfX76g1zIQ07LGPX 6WHs6lSi0Sf9Ykh45l+L9j7FiXgJ4gVCdJ/nculHXY+gqr5m8q4breY9poKFEVj0eR9wZw KZjfA4D1syW466Ao7ela76zwl04WFLY= Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-2-_OO9tEeGO_-jfXmT3Op4Tw-1; Tue, 07 Jun 2022 05:56:08 -0400 X-MC-Unique: _OO9tEeGO_-jfXmT3Op4Tw-1 Received: by mail-qk1-f197.google.com with SMTP id k13-20020a05620a414d00b006a6e4dc1dfcso662911qko.19 for ; Tue, 07 Jun 2022 02:56:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=hPcrVbGSfC2d9bGnlJDvNet18sRYkg2g/ox43s88aXY=; b=YSD++PZqlmjnBYUk8PsFwXM1Kmf4bVW27DSY9arUDE+0nlsqX+aWjf7xeEPAdEumbK LHoz0HwlFl3AVM1AICZmr3c+v5Pcs+MuBS+jOKh7vntgb6KQR1WXCIvVs6wJl3qyelsG jWrO9TKywZcxXFXqUw3PZZ/e2f39db3W7fev7TeGQGKPqrhiNh/9r3Y/oxy+vg8jJMHe 5dVi5hrLKUQG0rCBHhpNmnMVbi1TTu0C1pZH4fG4Xcq2dy2vSIb0aQJqr0bXQ+J8La+U KnEz6vpylh9iEtqbJVuYYiC6n77MXgaqL4+3NfDn7BIjjiuy9DMDi3H4+ukXcYamLpm6 fmRg== X-Gm-Message-State: AOAM530FLvmG4Cp8FF+MCJlc/QfD04fdKPpTc0fE2xvXwih8QtqFxksd J4BAXblNhhpu5pNOK5T18/pxrWaaFYDAbvZ/eDalR+VQAjROmz6lPA4OR+7YyRifBbh0IZXQ4bj 2B5hF5FFwANPBgY5D0yshK+q+ X-Received: by 2002:a37:917:0:b0:6a6:9a14:b542 with SMTP id 23-20020a370917000000b006a69a14b542mr14626086qkj.562.1654595767101; Tue, 07 Jun 2022 02:56:07 -0700 (PDT) X-Received: by 2002:a37:917:0:b0:6a6:9a14:b542 with SMTP id 23-20020a370917000000b006a69a14b542mr14626069qkj.562.1654595766859; Tue, 07 Jun 2022 02:56:06 -0700 (PDT) Received: from [10.35.4.238] (bzq-82-81-161-50.red.bezeqint.net. [82.81.161.50]) by smtp.gmail.com with ESMTPSA id d127-20020a37b485000000b0069fc13ce257sm12793643qkf.136.2022.06.07.02.56.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 02:56:06 -0700 (PDT) Message-ID: Subject: Re: [PATCH v6 20/38] KVM: nVMX: hyper-v: Cache VP assist page in 'struct kvm_vcpu_hv' From: Maxim Levitsky To: Vitaly Kuznetsov , kvm@vger.kernel.org, Paolo Bonzini Cc: Sean Christopherson , Wanpeng Li , Jim Mattson , Michael Kelley , Siddharth Chandrasekaran , Yuan Yao , linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org Date: Tue, 07 Jun 2022 12:56:02 +0300 In-Reply-To: <20220606083655.2014609-21-vkuznets@redhat.com> References: <20220606083655.2014609-1-vkuznets@redhat.com> <20220606083655.2014609-21-vkuznets@redhat.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.40.4 (3.40.4-2.fc34) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 2022-06-06 at 10:36 +0200, Vitaly Kuznetsov wrote: > In preparation to enabling L2 TLB flush, cache VP assist page in > 'struct kvm_vcpu_hv'. While on it, rename nested_enlightened_vmentry() > to nested_get_evmptr() and make it return eVMCS GPA directly. > > No functional change intended. > > Signed-off-by: Vitaly Kuznetsov > --- >  arch/x86/include/asm/kvm_host.h |  2 ++ >  arch/x86/kvm/hyperv.c           | 10 ++++++---- >  arch/x86/kvm/hyperv.h           |  3 +-- >  arch/x86/kvm/vmx/evmcs.c        | 21 +++++++-------------- >  arch/x86/kvm/vmx/evmcs.h        |  2 +- >  arch/x86/kvm/vmx/nested.c       |  6 +++--- >  6 files changed, 20 insertions(+), 24 deletions(-) > > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > index f9a34af0a5cc..e62db76c8d37 100644 > --- a/arch/x86/include/asm/kvm_host.h > +++ b/arch/x86/include/asm/kvm_host.h > @@ -650,6 +650,8 @@ struct kvm_vcpu_hv { >         /* Preallocated buffer for handling hypercalls passing sparse vCPU set */ >         u64 sparse_banks[HV_MAX_SPARSE_VCPU_BANKS]; >   > +       struct hv_vp_assist_page vp_assist_page; > + >         struct { >                 u64 pa_page_gpa; >                 u64 vm_id; > diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c > index 4396d75588d8..91310774c0b9 100644 > --- a/arch/x86/kvm/hyperv.c > +++ b/arch/x86/kvm/hyperv.c > @@ -903,13 +903,15 @@ bool kvm_hv_assist_page_enabled(struct kvm_vcpu *vcpu) >  } >  EXPORT_SYMBOL_GPL(kvm_hv_assist_page_enabled); >   > -bool kvm_hv_get_assist_page(struct kvm_vcpu *vcpu, > -                           struct hv_vp_assist_page *assist_page) > +bool kvm_hv_get_assist_page(struct kvm_vcpu *vcpu) >  { > -       if (!kvm_hv_assist_page_enabled(vcpu)) > +       struct kvm_vcpu_hv *hv_vcpu = to_hv_vcpu(vcpu); > + > +       if (!hv_vcpu || !kvm_hv_assist_page_enabled(vcpu)) >                 return false; > + >         return !kvm_read_guest_cached(vcpu->kvm, &vcpu->arch.pv_eoi.data, > -                                     assist_page, sizeof(*assist_page)); > +                                     &hv_vcpu->vp_assist_page, sizeof(struct hv_vp_assist_page)); >  } >  EXPORT_SYMBOL_GPL(kvm_hv_get_assist_page); >   > diff --git a/arch/x86/kvm/hyperv.h b/arch/x86/kvm/hyperv.h > index 2aa6fb7fc599..139beb55b781 100644 > --- a/arch/x86/kvm/hyperv.h > +++ b/arch/x86/kvm/hyperv.h > @@ -105,8 +105,7 @@ int kvm_hv_activate_synic(struct kvm_vcpu *vcpu, bool dont_zero_synic_pages); >  void kvm_hv_vcpu_uninit(struct kvm_vcpu *vcpu); >   >  bool kvm_hv_assist_page_enabled(struct kvm_vcpu *vcpu); > -bool kvm_hv_get_assist_page(struct kvm_vcpu *vcpu, > -                           struct hv_vp_assist_page *assist_page); > +bool kvm_hv_get_assist_page(struct kvm_vcpu *vcpu); >   >  static inline struct kvm_vcpu_hv_stimer *to_hv_stimer(struct kvm_vcpu *vcpu, >                                                       int timer_index) > diff --git a/arch/x86/kvm/vmx/evmcs.c b/arch/x86/kvm/vmx/evmcs.c > index 805afc170b5b..7cd7b16942c6 100644 > --- a/arch/x86/kvm/vmx/evmcs.c > +++ b/arch/x86/kvm/vmx/evmcs.c > @@ -307,24 +307,17 @@ __init void evmcs_sanitize_exec_ctrls(struct vmcs_config *vmcs_conf) >  } >  #endif >   > -bool nested_enlightened_vmentry(struct kvm_vcpu *vcpu, u64 *evmcs_gpa) > +u64 nested_get_evmptr(struct kvm_vcpu *vcpu) >  { > -       struct hv_vp_assist_page assist_page; > +       struct kvm_vcpu_hv *hv_vcpu = to_hv_vcpu(vcpu); >   > -       *evmcs_gpa = -1ull; > +       if (unlikely(!kvm_hv_get_assist_page(vcpu))) > +               return EVMPTR_INVALID; >   > -       if (unlikely(!kvm_hv_get_assist_page(vcpu, &assist_page))) > -               return false; > +       if (unlikely(!hv_vcpu->vp_assist_page.enlighten_vmentry)) > +               return EVMPTR_INVALID; >   > -       if (unlikely(!assist_page.enlighten_vmentry)) > -               return false; > - > -       if (unlikely(!evmptr_is_valid(assist_page.current_nested_vmcs))) > -               return false; > - > -       *evmcs_gpa = assist_page.current_nested_vmcs; > - > -       return true; > +       return hv_vcpu->vp_assist_page.current_nested_vmcs; >  } >   >  uint16_t nested_get_evmcs_version(struct kvm_vcpu *vcpu) > diff --git a/arch/x86/kvm/vmx/evmcs.h b/arch/x86/kvm/vmx/evmcs.h > index 584741b85eb6..22d238b36238 100644 > --- a/arch/x86/kvm/vmx/evmcs.h > +++ b/arch/x86/kvm/vmx/evmcs.h > @@ -239,7 +239,7 @@ enum nested_evmptrld_status { >         EVMPTRLD_ERROR, >  }; >   > -bool nested_enlightened_vmentry(struct kvm_vcpu *vcpu, u64 *evmcs_gpa); > +u64 nested_get_evmptr(struct kvm_vcpu *vcpu); >  uint16_t nested_get_evmcs_version(struct kvm_vcpu *vcpu); >  int nested_enable_evmcs(struct kvm_vcpu *vcpu, >                         uint16_t *vmcs_version); > diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c > index 4a827b3d929a..87bff81f7f3e 100644 > --- a/arch/x86/kvm/vmx/nested.c > +++ b/arch/x86/kvm/vmx/nested.c > @@ -1995,7 +1995,8 @@ static enum nested_evmptrld_status nested_vmx_handle_enlightened_vmptrld( >         if (likely(!vmx->nested.enlightened_vmcs_enabled)) >                 return EVMPTRLD_DISABLED; >   > -       if (!nested_enlightened_vmentry(vcpu, &evmcs_gpa)) { > +       evmcs_gpa = nested_get_evmptr(vcpu); > +       if (!evmptr_is_valid(evmcs_gpa)) { >                 nested_release_evmcs(vcpu); >                 return EVMPTRLD_DISABLED; >         } > @@ -5084,7 +5085,6 @@ static int handle_vmclear(struct kvm_vcpu *vcpu) >         struct vcpu_vmx *vmx = to_vmx(vcpu); >         u32 zero = 0; >         gpa_t vmptr; > -       u64 evmcs_gpa; >         int r; >   >         if (!nested_vmx_check_permission(vcpu)) > @@ -5110,7 +5110,7 @@ static int handle_vmclear(struct kvm_vcpu *vcpu) >          * vmx->nested.hv_evmcs but this shouldn't be a problem. >          */ >         if (likely(!vmx->nested.enlightened_vmcs_enabled || > -                  !nested_enlightened_vmentry(vcpu, &evmcs_gpa))) { > +                  !evmptr_is_valid(nested_get_evmptr(vcpu)))) { >                 if (vmptr == vmx->nested.current_vmptr) >                         nested_release_vmcs12(vcpu); >   Reviewed-by: Maxim Levitsky Best regards, Maxim Levitsky