Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp1245949pxa; Thu, 20 Aug 2020 06:39:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxwATDgj1Bwo6+ixqSxWA55812ql7gjlHowU2ucbA04cILXSg+nEtOOCD8AMI0a02YZJ+s+ X-Received: by 2002:a05:6402:d07:: with SMTP id eb7mr3075136edb.160.1597930763066; Thu, 20 Aug 2020 06:39:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597930763; cv=none; d=google.com; s=arc-20160816; b=N6L3noAhYtDXMNvLbZpxj7jt3EZsllA+eL5oDjLil38PSs8OM2ZcJXLrwWdxdTtxhA g6q77Q4D7/+4OVSnWx9GbqBzFVFBWK1R+pdnbC+Unn1g8zLnt/xo+B6+Y4PJQ7NMIgdn SPt6FXjat+3C9HpAw+wFcr446AGwwqhxIt3wou7b6Ajd5bQKoibTkXQm2HE+oJBXQuMK 7qynBLkSYBqq0No+qOeaunEyFeVJ5x+bwCP33H7Tqh0826YWicyOu+/uppE47rT5aTLB hoj/QW7uMHB0QweRf/X0HudDL0cQmLOpgXlqqp7ITLzPADM3p+lK/Jt/D2t/nRwFz6Bh Wv/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=7Yyscg0IgzS3tYfn9p5DuhBrze23+wuoqGiIUiUy3zc=; b=Lg5t1Hizw36E0I6KdPSkZ8ut4Xq2EPs9V+ffc2DP4D3p3ney6TxOYvF8eKs21Y/zNV CPMx3qHDFk3btBn6VBOyF7AcYTZn2HGspwCUaC+/TUNlg4xSDMQu+h2Yprp6z+ifg2S8 FsR2HHvTHJHfX8XBBNJsuR7o3x8s+k8JAVL9zpG3nsLnleJo+J/ukUAJ2aLzWf2zUugL NXnpTv4gJlxO24D5NmLqW3ugptnNknCv3rFuNIY1GzlldiXTWQb02KpdvnR2Srm6yF67 DY2sYBgAoURlQeUfta283HPkl6rRsaZOEReUZBnYOSl4RdFMCAwj4R9wj/y5NTAsFKLk Bb1w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=QObrXnat; 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 x18si1389623ejd.51.2020.08.20.06.38.56; Thu, 20 Aug 2020 06:39:23 -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=QObrXnat; 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 S1728397AbgHTNge (ORCPT + 99 others); Thu, 20 Aug 2020 09:36:34 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:20044 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729234AbgHTNeC (ORCPT ); Thu, 20 Aug 2020 09:34:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1597930441; 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: in-reply-to:in-reply-to:references:references; bh=7Yyscg0IgzS3tYfn9p5DuhBrze23+wuoqGiIUiUy3zc=; b=QObrXnatWcM7jezZo5KgOs5joQvgYYcOPgotBOeWG0evVfwABfOCNyPbYLeIoo7L556pDp YfLfuJ2+fFqhy5g/mq0V+IGvazk6rKZN9IAhWVrqSPAlL0x7+vXJ+qy78Y0p9AW7xeiqxl eF2WmzwAbwk/eZauiTrSueSCcegfWPU= 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-394-Uex2xth2OcO2QF0aSok5Nw-1; Thu, 20 Aug 2020 09:33:57 -0400 X-MC-Unique: Uex2xth2OcO2QF0aSok5Nw-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9565A800FFF; Thu, 20 Aug 2020 13:33:55 +0000 (UTC) Received: from localhost.localdomain (unknown [10.35.206.173]) by smtp.corp.redhat.com (Postfix) with ESMTP id E7D2216E21; Thu, 20 Aug 2020 13:33:51 +0000 (UTC) From: Maxim Levitsky To: kvm@vger.kernel.org Cc: x86@kernel.org (maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)), Jim Mattson , Ingo Molnar , Thomas Gleixner , linux-kernel@vger.kernel.org (open list:X86 ARCHITECTURE (32-BIT AND 64-BIT)), "H. Peter Anvin" , Sean Christopherson , Joerg Roedel , Wanpeng Li , Borislav Petkov , Vitaly Kuznetsov , Paolo Bonzini , Maxim Levitsky Subject: [PATCH v2 3/7] KVM: SVM: refactor msr permission bitmap allocation Date: Thu, 20 Aug 2020 16:33:35 +0300 Message-Id: <20200820133339.372823-4-mlevitsk@redhat.com> In-Reply-To: <20200820133339.372823-1-mlevitsk@redhat.com> References: <20200820133339.372823-1-mlevitsk@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Replace svm_vcpu_init_msrpm with svm_vcpu_alloc_msrpm, that also allocates the msr bitmap and add svm_vcpu_free_msrpm to free it. This will be used later to move the nested msr permission bitmap allocation to nested.c No functional change intended. Signed-off-by: Maxim Levitsky --- arch/x86/kvm/svm/svm.c | 45 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index d33013b9b4d7..7bb094bf6494 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -609,18 +609,29 @@ static void set_msr_interception(u32 *msrpm, unsigned msr, msrpm[offset] = tmp; } -static void svm_vcpu_init_msrpm(u32 *msrpm) +static u32 *svm_vcpu_alloc_msrpm(void) { int i; + u32 *msrpm; + struct page *pages = alloc_pages(GFP_KERNEL_ACCOUNT, MSRPM_ALLOC_ORDER); + + if (!pages) + return NULL; + msrpm = page_address(pages); memset(msrpm, 0xff, PAGE_SIZE * (1 << MSRPM_ALLOC_ORDER)); for (i = 0; direct_access_msrs[i].index != MSR_INVALID; i++) { if (!direct_access_msrs[i].always) continue; - set_msr_interception(msrpm, direct_access_msrs[i].index, 1, 1); } + return msrpm; +} + +static void svm_vcpu_free_msrpm(u32 *msrpm) +{ + __free_pages(virt_to_page(msrpm), MSRPM_ALLOC_ORDER); } static void add_msr_offset(u32 offset) @@ -1172,9 +1183,7 @@ static int svm_create_vcpu(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm; struct page *vmcb_page; - struct page *msrpm_pages; struct page *hsave_page; - struct page *nested_msrpm_pages; int err; BUILD_BUG_ON(offsetof(struct vcpu_svm, vcpu) != 0); @@ -1185,21 +1194,13 @@ static int svm_create_vcpu(struct kvm_vcpu *vcpu) if (!vmcb_page) goto out; - msrpm_pages = alloc_pages(GFP_KERNEL_ACCOUNT, MSRPM_ALLOC_ORDER); - if (!msrpm_pages) - goto free_page1; - - nested_msrpm_pages = alloc_pages(GFP_KERNEL_ACCOUNT, MSRPM_ALLOC_ORDER); - if (!nested_msrpm_pages) - goto free_page2; - hsave_page = alloc_page(GFP_KERNEL_ACCOUNT); if (!hsave_page) - goto free_page3; + goto free_page1; err = avic_init_vcpu(svm); if (err) - goto free_page4; + goto free_page2; /* We initialize this flag to true to make sure that the is_running * bit would be set the first time the vcpu is loaded. @@ -1210,11 +1211,13 @@ static int svm_create_vcpu(struct kvm_vcpu *vcpu) svm->nested.hsave = page_address(hsave_page); clear_page(svm->nested.hsave); - svm->msrpm = page_address(msrpm_pages); - svm_vcpu_init_msrpm(svm->msrpm); + svm->msrpm = svm_vcpu_alloc_msrpm(); + if (!svm->msrpm) + goto free_page2; - svm->nested.msrpm = page_address(nested_msrpm_pages); - svm_vcpu_init_msrpm(svm->nested.msrpm); + svm->nested.msrpm = svm_vcpu_alloc_msrpm(); + if (!svm->nested.msrpm) + goto free_page3; svm->vmcb = page_address(vmcb_page); clear_page(svm->vmcb); @@ -1227,12 +1230,10 @@ static int svm_create_vcpu(struct kvm_vcpu *vcpu) return 0; -free_page4: - __free_page(hsave_page); free_page3: - __free_pages(nested_msrpm_pages, MSRPM_ALLOC_ORDER); + svm_vcpu_free_msrpm(svm->msrpm); free_page2: - __free_pages(msrpm_pages, MSRPM_ALLOC_ORDER); + __free_page(hsave_page); free_page1: __free_page(vmcb_page); out: -- 2.26.2