Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2004555imu; Fri, 14 Dec 2018 04:21:59 -0800 (PST) X-Google-Smtp-Source: AFSGD/VwGW6C5NZ6NbQtNZG6hmnqQyUOSImY+q+h/5sC7EVRMPxGGdF6i+CkROfuuJjnB1sryjbF X-Received: by 2002:a17:902:9b93:: with SMTP id y19mr2708447plp.336.1544790119386; Fri, 14 Dec 2018 04:21:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544790119; cv=none; d=google.com; s=arc-20160816; b=Wfi/Q4uc/QCW+mwHLsliZg5xoNb4GpjcRQz/6nq4vNLcjztc6elUOPamAW531fIJSy uc+orL6oBacoQLOIK1/smFMKkUoXAtZuI1HsvjCDrzf2epkJ68R0raTCdubQWMxJzVyu 1c8bbB3u49xnoxkjKjP+jw5nE6u+5B0LDVn+AWsEKtzGsIIPWIgW6lNNBzf19otL8FtV c+Juja7oahfp/j79WwzV/RStjWIbx4kI+J/C3P4GGg13Qpkc7wuymxR9uHjzVmAA0p+2 cQnFatYAq9SRLoJWR++td5Ye3NSaeKe/Dfw8X7Eh9w71HIBRWS/MHf8+w5vczxI9n/Cc XWkQ== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=qiVaiH1wOzyRtWyY88ncG6MTJ1u3xvG4v4Zp/aBZDQk=; b=a7qIu0jVlzvs+nR+1s0k3FjS/+Ty/qcMJmMBQ+BxvTyo2xUinzhCprDACOG9PoEAIc jxtpmDHg+5xo7vjo7TYSIHOQcqXxWHFJyIixsNCkbvE4cH9hFuBi5RECEDTDv40QZM4r jsmbmMnzpDnKIub5yDqoiNWMePcYskpwGyXxMPPEuRqzMWacwM712fYWan9viUhdEpyk Lc3ZypdOeYc3BKtsyN/MUvpsIPN+LHzjET+3EzAVZNe5BXYOwQAIU5poFVJzLqJ/xy9a sd0vqiTgHzrlFmO7KN1yCpqgHc1I5hCGf7CAYGZw2Zt24s15AI/rMG6AFfC0dD6YpNTR gEgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=NF+x2WOR; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o6si3973035plh.23.2018.12.14.04.21.44; Fri, 14 Dec 2018 04:21:59 -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=@kernel.org header.s=default header.b=NF+x2WOR; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732081AbeLNMU5 (ORCPT + 99 others); Fri, 14 Dec 2018 07:20:57 -0500 Received: from mail.kernel.org ([198.145.29.99]:34878 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731476AbeLNMPD (ORCPT ); Fri, 14 Dec 2018 07:15:03 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D6546214DE; Fri, 14 Dec 2018 12:15:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1544789702; bh=JSEWZLW/of4QalpzTP6rrGq77919tcqUSplJ7mNnKHU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NF+x2WORZeyWxAiPPIefauCe1y0hrjExeB+vni9aI2TLMNNVLjT9v3ifzxD5SwSbF 68qVp4nW+/f/cYUxe2ZdZnJvB3+lz5iB0hdmo7pkbb+LremfCs49HJOML5kIl8WTKN kpxTs40uoR9lhF+bITLaubWgexkXobelQaUa6Pls= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Paolo Bonzini , David Woodhouse , Ben Hutchings Subject: [PATCH 4.4 44/88] KVM: VMX: introduce alloc_loaded_vmcs Date: Fri, 14 Dec 2018 13:00:18 +0100 Message-Id: <20181214115705.838516998@linuxfoundation.org> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181214115702.151309521@linuxfoundation.org> References: <20181214115702.151309521@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Paolo Bonzini commit f21f165ef922c2146cc5bdc620f542953c41714b upstream. Group together the calls to alloc_vmcs and loaded_vmcs_init. Soon we'll also allocate an MSR bitmap there. Signed-off-by: Paolo Bonzini Signed-off-by: David Woodhouse Signed-off-by: Greg Kroah-Hartman [bwh: Backported to 4.4: - No loaded_vmcs::shadow_vmcs field to initialise - Adjust context] Signed-off-by: Ben Hutchings Signed-off-by: Greg Kroah-Hartman --- arch/x86/kvm/vmx.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -3345,11 +3345,6 @@ static struct vmcs *alloc_vmcs_cpu(int c return vmcs; } -static struct vmcs *alloc_vmcs(void) -{ - return alloc_vmcs_cpu(raw_smp_processor_id()); -} - static void free_vmcs(struct vmcs *vmcs) { free_pages((unsigned long)vmcs, vmcs_config.order); @@ -3367,6 +3362,21 @@ static void free_loaded_vmcs(struct load loaded_vmcs->vmcs = NULL; } +static struct vmcs *alloc_vmcs(void) +{ + return alloc_vmcs_cpu(raw_smp_processor_id()); +} + +static int alloc_loaded_vmcs(struct loaded_vmcs *loaded_vmcs) +{ + loaded_vmcs->vmcs = alloc_vmcs(); + if (!loaded_vmcs->vmcs) + return -ENOMEM; + + loaded_vmcs_init(loaded_vmcs); + return 0; +} + static void free_kvm_area(void) { int cpu; @@ -6699,6 +6709,7 @@ static int handle_vmon(struct kvm_vcpu * struct vmcs *shadow_vmcs; const u64 VMXON_NEEDED_FEATURES = FEATURE_CONTROL_LOCKED | FEATURE_CONTROL_VMXON_ENABLED_OUTSIDE_SMX; + int r; /* The Intel VMX Instruction Reference lists a bunch of bits that * are prerequisite to running VMXON, most notably cr4.VMXE must be @@ -6738,10 +6749,9 @@ static int handle_vmon(struct kvm_vcpu * return 1; } - vmx->nested.vmcs02.vmcs = alloc_vmcs(); - if (!vmx->nested.vmcs02.vmcs) + r = alloc_loaded_vmcs(&vmx->nested.vmcs02); + if (r < 0) goto out_vmcs02; - loaded_vmcs_init(&vmx->nested.vmcs02); if (cpu_has_vmx_msr_bitmap()) { vmx->nested.msr_bitmap = @@ -8802,16 +8812,15 @@ static struct kvm_vcpu *vmx_create_vcpu( if (!vmx->guest_msrs) goto free_pml; - vmx->loaded_vmcs = &vmx->vmcs01; - vmx->loaded_vmcs->vmcs = alloc_vmcs(); - if (!vmx->loaded_vmcs->vmcs) - goto free_msrs; if (!vmm_exclusive) kvm_cpu_vmxon(__pa(per_cpu(vmxarea, raw_smp_processor_id()))); - loaded_vmcs_init(vmx->loaded_vmcs); + err = alloc_loaded_vmcs(&vmx->vmcs01); if (!vmm_exclusive) kvm_cpu_vmxoff(); + if (err < 0) + goto free_msrs; + vmx->loaded_vmcs = &vmx->vmcs01; cpu = get_cpu(); vmx_vcpu_load(&vmx->vcpu, cpu); vmx->vcpu.cpu = cpu;