From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 767F6C433DB for ; Wed, 17 Mar 2021 16:30:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1CB1E64F40 for ; Wed, 17 Mar 2021 16:30:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232348AbhCQQ3o (ORCPT ); Wed, 17 Mar 2021 12:29:44 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:28940 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232167AbhCQQ3f (ORCPT ); Wed, 17 Mar 2021 12:29:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1615998574; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Ec77b3T6zhXo/PBg8ex/iLP72N94UqDgNwEoG/Vb6t8=; b=Ot2LoCzESGn4BXAfZekgkvm94LoSm7K3Miff86CtWrPXaVZ0rgtq+ATLGoypIbLWYQD5AD x8upLNSPgcgmFGNHGf+0P/U9/EDAYQqQP/0sxMNaB/OJJPh/XxBT5CJxSs56erw6iR8XKO X6DhuQO5PqIuJt89qD/t0yiTh/gpKbQ= 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-268-nxFpyJPkO1eddoAvyEObOw-1; Wed, 17 Mar 2021 12:29:32 -0400 X-MC-Unique: nxFpyJPkO1eddoAvyEObOw-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 505EA107B7CC; Wed, 17 Mar 2021 16:29:31 +0000 (UTC) Received: from virtlab710.virt.lab.eng.bos.redhat.com (virtlab710.virt.lab.eng.bos.redhat.com [10.19.152.252]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8CACA607CB; Wed, 17 Mar 2021 16:29:30 +0000 (UTC) From: Cathy Avery To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, pbonzini@redhat.com Cc: vkuznets@redhat.com, wei.huang2@amd.com, seanjc@google.com Subject: [PATCH] KVM: nSVM: Additions to optimizing L12 to L2 vmcb.save copies Date: Wed, 17 Mar 2021 12:29:30 -0400 Message-Id: <20210317162930.28135-1-cavery@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Extend using the vmcb12 control clean field to determine which vmcb12.save registers were marked dirty in order to minimize register copies by including the CR bit. This patch also fixes the init of last_vmcb12_gpa by using an invalid physical address instead of 0. Tested: kvm-unit-tests kvm selftests Fedora L1 L2 Signed-off-by: Cathy Avery --- arch/x86/kvm/svm/nested.c | 9 ++++++--- arch/x86/kvm/svm/svm.c | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c index 8523f60adb92..6f9a40e002bc 100644 --- a/arch/x86/kvm/svm/nested.c +++ b/arch/x86/kvm/svm/nested.c @@ -449,9 +449,12 @@ static void nested_vmcb02_prepare_save(struct vcpu_svm *svm, struct vmcb *vmcb12 } kvm_set_rflags(&svm->vcpu, vmcb12->save.rflags | X86_EFLAGS_FIXED); - svm_set_efer(&svm->vcpu, vmcb12->save.efer); - svm_set_cr0(&svm->vcpu, vmcb12->save.cr0); - svm_set_cr4(&svm->vcpu, vmcb12->save.cr4); + + if (unlikely(new_vmcb12 || vmcb_is_dirty(vmcb12, VMCB_CR))) { + svm_set_efer(&svm->vcpu, vmcb12->save.efer); + svm_set_cr0(&svm->vcpu, vmcb12->save.cr0); + svm_set_cr4(&svm->vcpu, vmcb12->save.cr4); + } svm->vcpu.arch.cr2 = vmcb12->save.cr2; diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 271196400495..41f5cd1009ca 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -1234,7 +1234,7 @@ static void init_vmcb(struct kvm_vcpu *vcpu) svm->asid = 0; svm->nested.vmcb12_gpa = 0; - svm->nested.last_vmcb12_gpa = 0; + svm->nested.last_vmcb12_gpa = -1; vcpu->arch.hflags = 0; if (!kvm_pause_in_guest(vcpu->kvm)) { -- 2.26.2