From patchwork Tue Aug 14 17:30:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Mattson X-Patchwork-Id: 10565913 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 31B2113B4 for ; Tue, 14 Aug 2018 17:31:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 236B92A2DB for ; Tue, 14 Aug 2018 17:31:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 17C0E2A369; Tue, 14 Aug 2018 17:31:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, USER_IN_DEF_DKIM_WL autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 92EC52A2DB for ; Tue, 14 Aug 2018 17:31:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389616AbeHNUTK (ORCPT ); Tue, 14 Aug 2018 16:19:10 -0400 Received: from mail-qt0-f202.google.com ([209.85.216.202]:35130 "EHLO mail-qt0-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389614AbeHNUTI (ORCPT ); Tue, 14 Aug 2018 16:19:08 -0400 Received: by mail-qt0-f202.google.com with SMTP id n25-v6so8359193qtk.2 for ; Tue, 14 Aug 2018 10:31:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=Boot6jzMKhefF8FEBD+8P5/95Vr3ClgPEL+1NDRSZ8A=; b=GPD+cqIdEJdSkhS81V41rEnnB5r7VgUoAgzdnJCHrHLBKez0OpbKEdx70aqaHNLVMv BdBNtLPn5O+nm8TxCtdGU1/5kA4yi3UIOSz7WV5veAE/HPBz6AXFPUcvNhIPt56Dd8As dWK5G0VD0jcNjh5w370MQ30gg0hpd0d5QT5tkoRUoFxQrHWYN5ooHNC9Q7DGRFlxSzvY L7WqM6at9GRy7/MhJJ87RJ3yw07x4NZmsCxV1pO9p9UFa8qSjm1BhAINsmUS6K/10V1E boZihCOkRPpJoH3pC1sl/Ra8Zd6ZIT1O4hBVVX1IzC+y6FsA7NoKwFXFH1zeP6zfVbG3 b2aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=Boot6jzMKhefF8FEBD+8P5/95Vr3ClgPEL+1NDRSZ8A=; b=N/Pv51Gka2cWmOTxRR6X+Y0s8YDV2+jPy+S+cRBQvO4s8a32hDhpjeGsNLt5tK91Nd KPuQZowoFru2lc6O2gS6ZRWu2QYDALv4l02bJyQeYJx+uWeAtKEtt7G7H/xo6dOL2crQ MIQVMCdyNY9pzRIJ7yFSgwYcnKXalmOjV9ZHKP2GmkOknp9Qk693gj2c+qThjnDg8Xrx iMGzdLwP1XIykXL9lFxkj6B9Cg1nYSkfQUtvEkSZRojPEF11uFoR/HbDNKQIJEQYDhB4 e+q0gSga6uw47XDWkFc4uDYTx+gPVib8fQgkTPAyYdgPP5Yb2w0ILe/NEiv/Ee8Pjx37 iOMg== X-Gm-Message-State: AOUpUlHJjkdoXKW/Bfh8AeMsayc3mwkYdHECEFxHUekkdaN3RbgsMsau QEdqcnR7IjNd6fu5ZFG9RhmBVJGGBQAHo4LGj6zacB89lT+DerDUG82lRVdYWyqtq0mlNMGI/s8 Lzy4S2CDXB8WPmFIwoly/PpIQZfMKy00aqXW9TW/Ob2M3KLqSGqvGkkTxIMvVMqk= X-Google-Smtp-Source: AA+uWPzGsir1RH5b0vQvQCe98SRvcenWOOdiOOuqmsjMp3SN1r6W5pS9+OTIrmFAB8YIsVEoK1nwVuiJQUlhvg== X-Received: by 2002:a0c:88c6:: with SMTP id 6-v6mr11848948qvo.45.1534267860578; Tue, 14 Aug 2018 10:31:00 -0700 (PDT) Date: Tue, 14 Aug 2018 10:30:48 -0700 Message-Id: <20180814173049.21756-1-jmattson@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.18.0.865.gffc8e1a3cd6-goog Subject: [PATCH 1/2] kvm: vmx: Add IA32_FLUSH_CMD guest support From: Jim Mattson To: kvm@vger.kernel.org Cc: Jim Mattson Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Expose IA32_FLUSH_CMD to the guest if the guest CPUID enumerates support for this MSR. As with IA32_PRED_CMD, permission for unintercepted writes to this MSR will be granted to the guest after the first non-zero write. Signed-off-by: Jim Mattson Reviewed-by: Ben Serebrin Reviewed-by: Peter Shier --- arch/x86/kvm/vmx.c | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 46b428c0990e0..1b40265376641 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -3996,6 +3996,28 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) static void vmx_leave_nested(struct kvm_vcpu *vcpu); +static bool valid_msr_setting(struct kvm_vcpu *vcpu, struct msr_data *msr_info) +{ + bool valid; + + switch (msr_info->index) { + case MSR_IA32_PRED_CMD: + valid = (msr_info->host_initiated || + guest_cpuid_has(vcpu, X86_FEATURE_SPEC_CTRL)) && + !(msr_info->data & ~PRED_CMD_IBPB); + break; + case MSR_IA32_FLUSH_CMD: + valid = (msr_info->host_initiated || + guest_cpuid_has(vcpu, X86_FEATURE_FLUSH_L1D)) && + !(msr_info->data & ~L1D_FLUSH); + break; + default: + valid = false; + break; + } + return valid; +} + /* * Writes msr value into into the appropriate "register". * Returns 0 on success, non-0 otherwise. @@ -4077,17 +4099,14 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) MSR_TYPE_RW); break; case MSR_IA32_PRED_CMD: - if (!msr_info->host_initiated && - !guest_cpuid_has(vcpu, X86_FEATURE_SPEC_CTRL)) - return 1; - - if (data & ~PRED_CMD_IBPB) + case MSR_IA32_FLUSH_CMD: + if (!valid_msr_setting(vcpu, msr_info)) return 1; if (!data) break; - wrmsrl(MSR_IA32_PRED_CMD, PRED_CMD_IBPB); + wrmsrl(msr_index, data); /* * For non-nested: @@ -4100,7 +4119,7 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) * vmcs02.msr_bitmap here since it gets completely overwritten * in the merging. */ - vmx_disable_intercept_for_msr(vmx->vmcs01.msr_bitmap, MSR_IA32_PRED_CMD, + vmx_disable_intercept_for_msr(vmx->vmcs01.msr_bitmap, msr_index, MSR_TYPE_W); break; case MSR_IA32_ARCH_CAPABILITIES: @@ -11089,7 +11108,7 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct kvm_vcpu *vcpu, unsigned long *msr_bitmap_l1; unsigned long *msr_bitmap_l0 = to_vmx(vcpu)->nested.vmcs02.msr_bitmap; /* - * pred_cmd & spec_ctrl are trying to verify two things: + * pred_cmd, flush_cmd & spec_ctrl are trying to verify two things: * * 1. L0 gave a permission to L1 to actually passthrough the MSR. This * ensures that we do not accidentally generate an L02 MSR bitmap @@ -11102,6 +11121,7 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct kvm_vcpu *vcpu, * the MSR. */ bool pred_cmd = !msr_write_intercepted_l01(vcpu, MSR_IA32_PRED_CMD); + bool flush_cmd = !msr_write_intercepted_l01(vcpu, MSR_IA32_FLUSH_CMD); bool spec_ctrl = !msr_write_intercepted_l01(vcpu, MSR_IA32_SPEC_CTRL); /* Nothing to do if the MSR bitmap is not in use. */ @@ -11110,7 +11130,7 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct kvm_vcpu *vcpu, return false; if (!nested_cpu_has_virt_x2apic_mode(vmcs12) && - !pred_cmd && !spec_ctrl) + !pred_cmd && !flush_cmd && !spec_ctrl) return false; page = kvm_vcpu_gpa_to_page(vcpu, vmcs12->msr_bitmap); @@ -11165,6 +11185,12 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct kvm_vcpu *vcpu, MSR_IA32_PRED_CMD, MSR_TYPE_W); + if (flush_cmd) + nested_vmx_disable_intercept_for_msr( + msr_bitmap_l1, msr_bitmap_l0, + MSR_IA32_FLUSH_CMD, + MSR_TYPE_W); + kunmap(page); kvm_release_page_clean(page); From patchwork Tue Aug 14 17:30:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Mattson X-Patchwork-Id: 10565965 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3D10C13B4 for ; Tue, 14 Aug 2018 18:07:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2FED52A54F for ; Tue, 14 Aug 2018 18:07:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 234CF2A579; Tue, 14 Aug 2018 18:07:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,USER_IN_DEF_DKIM_WL autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A3D982A54F for ; Tue, 14 Aug 2018 18:07:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728137AbeHNUzs (ORCPT ); Tue, 14 Aug 2018 16:55:48 -0400 Received: from mail-ua1-f74.google.com ([209.85.222.74]:54292 "EHLO mail-ua1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389051AbeHNUTN (ORCPT ); Tue, 14 Aug 2018 16:19:13 -0400 Received: by mail-ua1-f74.google.com with SMTP id c4-v6so10492113uan.21 for ; Tue, 14 Aug 2018 10:31:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=xgg3bA5LKWkyY6ewEwvAfyaXsOdRwSiuyXnx12T9SJA=; b=sldOX4mi3s2g/HV48lDpdhBWNjA+Ig+mPOv2MQr1U2cDdL2DZlMqTTXWiZ2i8hWVV0 ByovH6JNAj2C9WVshIVKXr6ldzpYD8ldCYzi/fiiyTraK9vC+Z235tItF0Q3Wj9aGqp8 53zlGTjv5+npXN8QdbMVgt/S9nPMYG8S+9YjEb1nt15MvxqyVPl1RP5Dw1m/cjsUIbcs 0bC+uo0MNJ/FdzMgTtRX9cMJHzKcxPeLt3wJ1Ag5Bm4VRqVBtY81jjDc9YG3cucCnbNK aMo7WlpPTU6OCpjvU8qGsVCJSWIpFP6wHI2l+yPKooKFqviFURLP5LKriQKzhbHydzjp XsSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=xgg3bA5LKWkyY6ewEwvAfyaXsOdRwSiuyXnx12T9SJA=; b=YYd6E1tQPIxGmaoJ+37wAREJO7zaxDR1rBdR8kIPoYOl/Oqz9zgSMGXQt563FUfAmR JP+q5BH7SUTwFz+YY9JrulHG/SlyCZCnusuRm/S6KZMdNnUsO41Vy8q3o9jon8cz8r9h SYszFu/jfe0jfDzVgZsM90LDwxs9KgDFCDV95pEWTKoPEsqv6evVC8mEb3AAX/7a8TXK +jeEPUScUgAB/H9kmC2ABqvs+njpIj/SCWcxmwEPcmvsLPa4qDlMN91HicirFxftqyN0 JebqZAblu5tHLZDvEB7Zys00PuG8vKhSPPprYdna6QwsSCQ9XmboGp8pe4PEU6xoy7oZ 4thA== X-Gm-Message-State: AOUpUlE0S6XaWkNrJ1Lnk9j+TPvFE36ChesIE/eUOkWlwgnJkzHmDWmZ 7h3B9cbmWHVevoiNxDWzlm8bfBD9F8EpEdFcLYKBO5RaNniM+S815kRnoQijigHTqEDdpIHEaVf YlWMYAfZQb2N+EIpsrsQ605bnqy7bJ7Icf6ZEQVm+SWDmFMsWMCPTyjwZ8Cj2BAg= X-Google-Smtp-Source: AA+uWPxxPiyxFS3huzdbOZD9z9xCOYYeXutNK9s/w/JS3r0ruAU+iKYCSGfrHkogxYuda20tvtVloT60gUqH1A== X-Received: by 2002:a1f:110a:: with SMTP id 10-v6mr10463838vkr.113.1534267865730; Tue, 14 Aug 2018 10:31:05 -0700 (PDT) Date: Tue, 14 Aug 2018 10:30:49 -0700 In-Reply-To: <20180814173049.21756-1-jmattson@google.com> Message-Id: <20180814173049.21756-2-jmattson@google.com> Mime-Version: 1.0 References: <20180814173049.21756-1-jmattson@google.com> X-Mailer: git-send-email 2.18.0.865.gffc8e1a3cd6-goog Subject: [PATCH 2/2] kvm: x86: Expose X86_FEATURE_FLUSH_L1D to kvm guests From: Jim Mattson To: kvm@vger.kernel.org Cc: Jim Mattson Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If this feature is available on the host, it can be exposed to a kvm guest. Signed-off-by: Jim Mattson Reviewed-by: Ben Serebrin Reviewed-by: Peter Shier --- arch/x86/kvm/cpuid.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 7e042e3d47fd5..2a62270d82b69 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -411,7 +411,7 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, /* cpuid 7.0.edx*/ const u32 kvm_cpuid_7_0_edx_x86_features = F(AVX512_4VNNIW) | F(AVX512_4FMAPS) | F(SPEC_CTRL) | - F(SPEC_CTRL_SSBD) | F(ARCH_CAPABILITIES); + F(SPEC_CTRL_SSBD) | F(FLUSH_L1D) | F(ARCH_CAPABILITIES); /* all calls to cpuid_count() should be made on the same cpu */ get_cpu();