Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp653819pxb; Wed, 3 Nov 2021 10:06:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx6p5/MT7/QbyMh4R7SapsrH3JztvcUhxVIsj6P4v+oSdgyyJL5B+hSdjpyTkkri9+V4hUq X-Received: by 2002:adf:d4c2:: with SMTP id w2mr40605831wrk.225.1635959187167; Wed, 03 Nov 2021 10:06:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635959187; cv=none; d=google.com; s=arc-20160816; b=dXnTsUMmx3NSK7Gv4v9+6h6FvaEcSQTj8A2fc1E0OBWU7Idm2Zv9nj7t/KdvORm29x 1KQRUF37EgN+E/wR6nQmWnuwV15+7K/V2+wuYygYZLNCh7EChXxuUw55AxWrxHo20MnS rXneqdNvqWB3eTet9au+I8OAEQ2y1dRYJS/km2gKHxOqN9qGtCWCxP6Yt+s7HHxQ+Nqi sLua/X/Q0J6MmyceogJJvqHxBkXT5+DDkOyS1JUodUiONnMN15GjJgBWxWLLObT6V6DW FyIGZQYhFWKBnN4dcM8OudBGOfUK48NQQsk+j6QW6mvCiiMm/p3B82hZuyK0qXUdwnFp i//A== 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=iALKWz7fDkZsU62EssTnquti0Gvmi5hHXmrOsumThGI=; b=gW+S9+pFkQbMQLcyxOfF3JlQ5tOW908Idxa8DwtlskVoSy8KS9kydOGobfX/VMQocd mMf67Fnv85Ctc45uPwdCLpd2wjji9ioWQnywzMSXzuH43L3kghLeD7EEkQPJ4JrYYs7s mpt7/v3vUE0gcTJpEDBteawAy0qA30NRLyhk327gmPi1CZIolhHxMHl47EOAUaunjTPS Zxsw6JoO+3WGhy4eouNz/x9bOMh9fB6HLuJMsZpA/iViMTBJYy+vR+wQ+tixpRVC4S8r I3h1wawrahE+Emx/Vrbbfd59HjMhep4AUb/nf7uxL4cimSykwQcLuS2aVXl5lSzS85kx dGbQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=K77NKgyq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z5si6588646edc.323.2021.11.03.10.05.40; Wed, 03 Nov 2021 10:06:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=K77NKgyq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.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: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233051AbhKCRGZ (ORCPT + 99 others); Wed, 3 Nov 2021 13:06:25 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:31467 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232993AbhKCRGW (ORCPT ); Wed, 3 Nov 2021 13:06:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1635959025; 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=iALKWz7fDkZsU62EssTnquti0Gvmi5hHXmrOsumThGI=; b=K77NKgyq5X9yk31m3a+JT9UY1jUnZk0ivBSTTv29k39vliLji87DRHGp7OZYsnxuEOWBdI WH32rrHmWC8DlInUE+S0/S6UmlUC7E4x+NgGUsf5JBM9992RgM4Ei7CorKSdQjHo9j7DJ1 r3MmaJLOP82Kg45du7ecxuv7YJ0AW1k= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-339-92m5k-6BMo6Q7tz5_18yeQ-1; Wed, 03 Nov 2021 13:03:42 -0400 X-MC-Unique: 92m5k-6BMo6Q7tz5_18yeQ-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 47B43EC1A2; Wed, 3 Nov 2021 17:03:40 +0000 (UTC) Received: from starship (unknown [10.40.194.243]) by smtp.corp.redhat.com (Postfix) with ESMTP id 89A5776608; Wed, 3 Nov 2021 17:03:34 +0000 (UTC) Message-ID: <8b5300db2a95cad42116dc5bbd05637271f31a38.camel@redhat.com> Subject: Re: [PATCH v5 3/7] nSVM: rename nested_load_control_from_vmcb12 in nested_copy_vmcb_control_to_cache From: Maxim Levitsky To: Emanuele Giuseppe Esposito , kvm@vger.kernel.org Cc: Paolo Bonzini , Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , linux-kernel@vger.kernel.org Date: Wed, 03 Nov 2021 19:03:33 +0200 In-Reply-To: <20211103140527.752797-4-eesposit@redhat.com> References: <20211103140527.752797-1-eesposit@redhat.com> <20211103140527.752797-4-eesposit@redhat.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.5 (3.36.5-2.fc32) MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 2021-11-03 at 10:05 -0400, Emanuele Giuseppe Esposito wrote: > Following the same naming convention of the previous patch, > rename nested_load_control_from_vmcb12. > In addition, inline copy_vmcb_control_area as it is only called > by this function. > > _nested_copy_vmcb_control_to_cache() works with vmcb_control_area > parameters and it will be useful in next patches, when we use > local variables instead of svm cached state. Tiny nitpick: usually when we have a patch which intends to just move/rename things around, and should generate exact same machine code other that some inlining/optimizations/etc, we usually mark this with 'No functional change intended', so that it is easier to spot a mistake which only slighlty changes something. The patch itself looks good. Reviewed-by: Maxim Levitsky > > Signed-off-by: Emanuele Giuseppe Esposito > --- > arch/x86/kvm/svm/nested.c | 80 +++++++++++++++++++-------------------- > arch/x86/kvm/svm/svm.c | 2 +- > arch/x86/kvm/svm/svm.h | 4 +- > 3 files changed, 43 insertions(+), 43 deletions(-) > > diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c > index ea64fea371c8..162b338a6c74 100644 > --- a/arch/x86/kvm/svm/nested.c > +++ b/arch/x86/kvm/svm/nested.c > @@ -163,37 +163,6 @@ void recalc_intercepts(struct vcpu_svm *svm) > vmcb_set_intercept(c, INTERCEPT_VMSAVE); > } > > -static void copy_vmcb_control_area(struct vmcb_control_area *dst, > - struct vmcb_control_area *from) > -{ > - unsigned int i; > - > - for (i = 0; i < MAX_INTERCEPT; i++) > - dst->intercepts[i] = from->intercepts[i]; > - > - dst->iopm_base_pa = from->iopm_base_pa; > - dst->msrpm_base_pa = from->msrpm_base_pa; > - dst->tsc_offset = from->tsc_offset; > - /* asid not copied, it is handled manually for svm->vmcb. */ > - dst->tlb_ctl = from->tlb_ctl; > - dst->int_ctl = from->int_ctl; > - dst->int_vector = from->int_vector; > - dst->int_state = from->int_state; > - dst->exit_code = from->exit_code; > - dst->exit_code_hi = from->exit_code_hi; > - dst->exit_info_1 = from->exit_info_1; > - dst->exit_info_2 = from->exit_info_2; > - dst->exit_int_info = from->exit_int_info; > - dst->exit_int_info_err = from->exit_int_info_err; > - dst->nested_ctl = from->nested_ctl; > - dst->event_inj = from->event_inj; > - dst->event_inj_err = from->event_inj_err; > - dst->nested_cr3 = from->nested_cr3; > - dst->virt_ext = from->virt_ext; > - dst->pause_filter_count = from->pause_filter_count; > - dst->pause_filter_thresh = from->pause_filter_thresh; > -} > - > static bool nested_svm_vmrun_msrpm(struct vcpu_svm *svm) > { > /* > @@ -317,15 +286,46 @@ static bool nested_vmcb_valid_sregs(struct kvm_vcpu *vcpu, > return true; > } > > -void nested_load_control_from_vmcb12(struct vcpu_svm *svm, > - struct vmcb_control_area *control) > +static > +void _nested_copy_vmcb_control_to_cache(struct vmcb_control_area *to, > + struct vmcb_control_area *from) > { > - copy_vmcb_control_area(&svm->nested.ctl, control); > + unsigned int i; > + > + for (i = 0; i < MAX_INTERCEPT; i++) > + to->intercepts[i] = from->intercepts[i]; > + > + to->iopm_base_pa = from->iopm_base_pa; > + to->msrpm_base_pa = from->msrpm_base_pa; > + to->tsc_offset = from->tsc_offset; > + to->tlb_ctl = from->tlb_ctl; > + to->int_ctl = from->int_ctl; > + to->int_vector = from->int_vector; > + to->int_state = from->int_state; > + to->exit_code = from->exit_code; > + to->exit_code_hi = from->exit_code_hi; > + to->exit_info_1 = from->exit_info_1; > + to->exit_info_2 = from->exit_info_2; > + to->exit_int_info = from->exit_int_info; > + to->exit_int_info_err = from->exit_int_info_err; > + to->nested_ctl = from->nested_ctl; > + to->event_inj = from->event_inj; > + to->event_inj_err = from->event_inj_err; > + to->nested_cr3 = from->nested_cr3; > + to->virt_ext = from->virt_ext; > + to->pause_filter_count = from->pause_filter_count; > + to->pause_filter_thresh = from->pause_filter_thresh; > + > + /* Copy asid here because nested_vmcb_check_controls will check it. */ > + to->asid = from->asid; > + to->msrpm_base_pa &= ~0x0fffULL; > + to->iopm_base_pa &= ~0x0fffULL; > +} > > - /* Copy it here because nested_svm_check_controls will check it. */ > - svm->nested.ctl.asid = control->asid; > - svm->nested.ctl.msrpm_base_pa &= ~0x0fffULL; > - svm->nested.ctl.iopm_base_pa &= ~0x0fffULL; > +void nested_copy_vmcb_control_to_cache(struct vcpu_svm *svm, > + struct vmcb_control_area *control) > +{ > + _nested_copy_vmcb_control_to_cache(&svm->nested.ctl, control); > } > > static void _nested_copy_vmcb_save_to_cache(struct vmcb_save_area_cached *to, > @@ -691,7 +691,7 @@ int nested_svm_vmrun(struct kvm_vcpu *vcpu) > if (WARN_ON_ONCE(!svm->nested.initialized)) > return -EINVAL; > > - nested_load_control_from_vmcb12(svm, &vmcb12->control); > + nested_copy_vmcb_control_to_cache(svm, &vmcb12->control); > nested_copy_vmcb_save_to_cache(svm, &vmcb12->save); > > if (!nested_vmcb_valid_sregs(vcpu, &vmcb12->save) || > @@ -1438,7 +1438,7 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu, > svm->nested.vmcb12_gpa = kvm_state->hdr.svm.vmcb_pa; > > svm_copy_vmrun_state(&svm->vmcb01.ptr->save, save); > - nested_load_control_from_vmcb12(svm, ctl); > + nested_copy_vmcb_control_to_cache(svm, ctl); > > svm_switch_vmcb(svm, &svm->nested.vmcb02); > nested_vmcb02_prepare_control(svm); > diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c > index 6e5c2671e823..74d6db9017ea 100644 > --- a/arch/x86/kvm/svm/svm.c > +++ b/arch/x86/kvm/svm/svm.c > @@ -4437,7 +4437,7 @@ static int svm_leave_smm(struct kvm_vcpu *vcpu, const char *smstate) > */ > > vmcb12 = map.hva; > - nested_load_control_from_vmcb12(svm, &vmcb12->control); > + nested_copy_vmcb_control_to_cache(svm, &vmcb12->control); > nested_copy_vmcb_save_to_cache(svm, &vmcb12->save); > ret = enter_svm_guest_mode(vcpu, vmcb12_gpa, vmcb12, false); > > diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h > index 0897551d8868..a0609fe2e68c 100644 > --- a/arch/x86/kvm/svm/svm.h > +++ b/arch/x86/kvm/svm/svm.h > @@ -502,8 +502,8 @@ int nested_svm_check_exception(struct vcpu_svm *svm, unsigned nr, > int nested_svm_exit_special(struct vcpu_svm *svm); > void nested_svm_update_tsc_ratio_msr(struct kvm_vcpu *vcpu); > void svm_write_tsc_multiplier(struct kvm_vcpu *vcpu, u64 multiplier); > -void nested_load_control_from_vmcb12(struct vcpu_svm *svm, > - struct vmcb_control_area *control); > +void nested_copy_vmcb_control_to_cache(struct vcpu_svm *svm, > + struct vmcb_control_area *control); > void nested_copy_vmcb_save_to_cache(struct vcpu_svm *svm, > struct vmcb_save_area *save); > void nested_sync_control_from_vmcb02(struct vcpu_svm *svm);