Received: by 2002:a4a:311b:0:0:0:0:0 with SMTP id k27-v6csp4782564ooa; Tue, 14 Aug 2018 10:28:41 -0700 (PDT) X-Google-Smtp-Source: AA+uWPyUPvjqUxw2uVK53fsWNnE+vFgvtDtoKKcZ4cMUt8avPrGVQnwUlmgpjV/Wxp7yBamWmujA X-Received: by 2002:a62:4909:: with SMTP id w9-v6mr24561058pfa.154.1534267721760; Tue, 14 Aug 2018 10:28:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534267721; cv=none; d=google.com; s=arc-20160816; b=hQAPV5kMzIzSpg7Egm7wGJy7K67gRDd89pxPSdnldjdkHl///AoZiiqsw9x/CXzhSs DtsZWaJ7MNknClgZS2p4wGlULmvOR8GIxH3L0lNp+HrzEgryAxZsqpgPE9OtGA5ZaImT tFVfSWL1m3jjYUQehoLx1DNWnJvgBGGfMUZtl2GckfPytJno6PJC/uM5ZmHsc0cXOvUE t7gFO2/B+01fZvaS1mdyFxQegaDZqCVt6JWg/wqzaKBydKbC7Oj4f5/h64cwWUA37MP2 mUPm6uSOgod98RfTjxMWuqO7YS/2wvRIvp+Q7hGGByi0aX4EBljKD/l2O1KUoWGDc3ec K4Wg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=C+vY7aoRKTh9BsggKmZvJvod3EYMSWKS8rmm+86Aq1s=; b=UztxsitaZdWdQujM8Q54CRl0sSzNf+8F0/bR/7tx/Gp7A+ztntlKeRwTPWqnbQkHfy 7hh2mZ9Ulh5bKS3dnAevFweIghKnJLY2/kxgrKfHf248Impl1kKhkNRnDSfnaN8iTfMW 09lack1sTcWBuaHTwXdSnORAdov3HRSX7/Y6YstcoHCiwRV3rNTFM4VKYayuS4oW+il6 Q3ZbDuJRTTS/FdXYT8+F46SxmMb9sOtKb9WlrsVr2j3YfH0X8VBf7n02RoqFzz1IGjlu kUrVCqb7ECz837DC1R4ZHZoYbMzNiydPci+mufUHHgsr5p9oGPb/HTks5wRLSFfDrJdV zx5w== ARC-Authentication-Results: i=1; mx.google.com; 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 q13-v6si18411116pgc.670.2018.08.14.10.28.26; Tue, 14 Aug 2018 10:28:41 -0700 (PDT) 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; 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 S2388384AbeHNUOQ (ORCPT + 99 others); Tue, 14 Aug 2018 16:14:16 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:51904 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387440AbeHNUOQ (ORCPT ); Tue, 14 Aug 2018 16:14:16 -0400 Received: from localhost (unknown [194.244.16.108]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 2C1FDCD8; Tue, 14 Aug 2018 17:26:09 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Thomas Gleixner , Jiri Kosina , Josh Poimboeuf Subject: [PATCH 4.18 47/79] x86/kvm: Drop L1TF MSR list approach Date: Tue, 14 Aug 2018 19:17:06 +0200 Message-Id: <20180814171338.796453838@linuxfoundation.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180814171336.799314117@linuxfoundation.org> References: <20180814171336.799314117@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Thomas Gleixner The VMX module parameter to control the L1D flush should become writeable. The MSR list is set up at VM init per guest VCPU, but the run time switching is based on a static key which is global. Toggling the MSR list at run time might be feasible, but for now drop this optimization and use the regular MSR write to make run-time switching possible. The default mitigation is the conditional flush anyway, so for extra paranoid setups this will add some small overhead, but the extra code executed is in the noise compared to the flush itself. Aside of that the EPT disabled case is not handled correctly at the moment and the MSR list magic is in the way for fixing that as well. If it's really providing a significant advantage, then this needs to be revisited after the code is correct and the control is writable. Signed-off-by: Thomas Gleixner Tested-by: Jiri Kosina Reviewed-by: Greg Kroah-Hartman Reviewed-by: Josh Poimboeuf Link: https://lkml.kernel.org/r/20180713142322.516940445@linutronix.de Signed-off-by: Greg Kroah-Hartman --- arch/x86/kvm/vmx.c | 43 +++++++------------------------------------ 1 file changed, 7 insertions(+), 36 deletions(-) --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -6266,16 +6266,6 @@ static void ept_set_mmio_spte_mask(void) VMX_EPT_MISCONFIG_WX_VALUE); } -static bool vmx_l1d_use_msr_save_list(void) -{ - if (!enable_ept || !boot_cpu_has_bug(X86_BUG_L1TF) || - static_cpu_has(X86_FEATURE_HYPERVISOR) || - !static_cpu_has(X86_FEATURE_FLUSH_L1D)) - return false; - - return vmentry_l1d_flush == VMENTER_L1D_FLUSH_ALWAYS; -} - #define VMX_XSS_EXIT_BITMAP 0 /* * Sets up the vmcs for emulated real mode. @@ -6397,12 +6387,6 @@ static void vmx_vcpu_setup(struct vcpu_v vmcs_write64(PML_ADDRESS, page_to_phys(vmx->pml_pg)); vmcs_write16(GUEST_PML_INDEX, PML_ENTITY_NUM - 1); } - /* - * If flushing the L1D cache on every VMENTER is enforced and the - * MSR is available, use the MSR save list. - */ - if (vmx_l1d_use_msr_save_list()) - add_atomic_switch_msr(vmx, MSR_IA32_FLUSH_CMD, L1D_FLUSH, 0, true); } static void vmx_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event) @@ -9653,26 +9637,14 @@ static void vmx_l1d_flush(struct kvm_vcp bool always; /* - * This code is only executed when: - * - the flush mode is 'cond' - * - the flush mode is 'always' and the flush MSR is not - * available - * - * If the CPU has the flush MSR then clear the flush bit because - * 'always' mode is handled via the MSR save list. - * - * If the MSR is not avaibable then act depending on the mitigation - * mode: If 'flush always', keep the flush bit set, otherwise clear - * it. + * This code is only executed when the the flush mode is 'cond' or + * 'always' * - * The flush bit gets set again either from vcpu_run() or from one - * of the unsafe VMEXIT handlers. + * If 'flush always', keep the flush bit set, otherwise clear + * it. The flush bit gets set again either from vcpu_run() or from + * one of the unsafe VMEXIT handlers. */ - if (static_cpu_has(X86_FEATURE_FLUSH_L1D)) - always = false; - else - always = vmentry_l1d_flush == VMENTER_L1D_FLUSH_ALWAYS; - + always = vmentry_l1d_flush == VMENTER_L1D_FLUSH_ALWAYS; vcpu->arch.l1tf_flush_l1d = always; vcpu->stat.l1d_flush++; @@ -13322,8 +13294,7 @@ static int __init vmx_setup_l1d_flush(vo l1tf_vmx_mitigation = vmentry_l1d_flush; - if (vmentry_l1d_flush == VMENTER_L1D_FLUSH_NEVER || - vmx_l1d_use_msr_save_list()) + if (vmentry_l1d_flush == VMENTER_L1D_FLUSH_NEVER) return 0; if (!boot_cpu_has(X86_FEATURE_FLUSH_L1D)) {