From nobody Thu Feb 12 01:03:06 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A04F6C77B75 for ; Wed, 3 May 2023 18:29:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230073AbjECS3F (ORCPT ); Wed, 3 May 2023 14:29:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60944 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229878AbjECS3B (ORCPT ); Wed, 3 May 2023 14:29:01 -0400 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2C64D35B6 for ; Wed, 3 May 2023 11:29:00 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id d2e1a72fcca58-64115ef7234so4721162b3a.1 for ; Wed, 03 May 2023 11:29:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1683138539; x=1685730539; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=HR9sDhe1dBWwYsQO66isTNLen+QloTOYlqac4Dib2S0=; b=RpPim3urdDOUWuJ3wzy0utodCmxX0rjPl4mUUzwsMX1hw3s9PCKBeD92U/Flg1VcXo BMbqTLLdj3Gx+nc7TzpBr5JLhosnACTWbU/0TivFrLub70MDUpfAHs0InFAoISRRSUp5 4NlW5AgbyWlxTr1gGf8HlzJWL6KgxFkdynlz8+tHNMBJJlw7ATdALt5US3SEahkdNYd1 dIwiZLYlUblywLajLjSm/9axWRGxsCEhBzqFau67BCzEzwvURmB17++fg+byQc22wiYq iMsyTypPoYLBkHF5sXZ4TQC3Zsjq1YTb/kirR7uPmKL81tsozyRZG93BvGjGArcBuy/8 xDtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683138539; x=1685730539; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=HR9sDhe1dBWwYsQO66isTNLen+QloTOYlqac4Dib2S0=; b=JBFwPtBtzkgSrYUFLMT7pWEo7wi+ijo4daBR32oLbgOriXQ/cJX4tFwk+xZXt5wGeR ywqdL46Q66OFKvJwjA2WNoqGfH7+kk56Ix9CNAsqwuDeT4JAFcBGrqHVazHsm/8kDmNa kdet7Snxljj60bjEOZUjcPHux8gWciAX5YOfNloBWY3AHUngaQvL8XBxkUvbPnbpNgrq Lr9rGMYBSkyheNNH9+QP3ZJrYcizkRv05qz/QCvpITguLncmKlgvlwxOvtaWNQLTqlmr 69828F3F/YbMCm5UyO6t26Ifu9fY+gqtbe/UCMd8S1BGtfIls0uM2sttH1UmXTkXYSzM Yg6Q== X-Gm-Message-State: AC+VfDxHVsf37k2V2LUAwgnsWmyZumShl/8Q2Uhy9s56AnDFie4QENEs r8h+DBZXCTiaeVtmfSF6RexRzk08jFs= X-Google-Smtp-Source: ACHHUZ5vnASrY3rkukhJSdTxihZ9oIFdZd4vjgC2U7Dd72NAC5HyWufuYAK64L7jBvjgUGjqegNa8gPOV8U= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:2c14:0:b0:51a:7d6a:65c9 with SMTP id s20-20020a632c14000000b0051a7d6a65c9mr714454pgs.6.1683138539464; Wed, 03 May 2023 11:28:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 May 2023 11:28:48 -0700 In-Reply-To: <20230503182852.3431281-1-seanjc@google.com> Mime-Version: 1.0 References: <20230503182852.3431281-1-seanjc@google.com> X-Mailer: git-send-email 2.40.1.495.gc816e09b53d-goog Message-ID: <20230503182852.3431281-2-seanjc@google.com> Subject: [PATCH 1/5] KVM: VMX: Open code writing vCPU's PAT in VMX's MSR handler From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Wenyao Hai , Ke Guo Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Wenyao Hai Open code setting "vcpu->arch.pat" in vmx_set_msr() instead of bouncing through kvm_set_msr_common() to get to the same code in kvm_mtrr_set_msr(). Note, MSR_IA32_CR_PAT is 0x277, and is very subtly handled by case 0x200 ... MSR_IA32_MC0_CTL2 - 1: in kvm_set_msr_common(). Signed-off-by: Wenyao Hai [sean: massage changelog] Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/vmx.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 44fb619803b8..53e249109483 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -2294,12 +2294,10 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struc= t msr_data *msr_info) get_vmcs12(vcpu)->vm_exit_controls & VM_EXIT_SAVE_IA32_PAT) get_vmcs12(vcpu)->guest_ia32_pat =3D data; =20 - if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) { + if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) vmcs_write64(GUEST_IA32_PAT, data); - vcpu->arch.pat =3D data; - break; - } - ret =3D kvm_set_msr_common(vcpu, msr_info); + + vcpu->arch.pat =3D data; break; case MSR_IA32_MCG_EXT_CTL: if ((!msr_info->host_initiated && --=20 2.40.1.495.gc816e09b53d-goog From nobody Thu Feb 12 01:03:06 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4A522C77B75 for ; Wed, 3 May 2023 18:29:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230088AbjECS3I (ORCPT ); Wed, 3 May 2023 14:29:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60982 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229993AbjECS3D (ORCPT ); Wed, 3 May 2023 14:29:03 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5840F5275 for ; Wed, 3 May 2023 11:29:02 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-b9a75194eebso6787835276.1 for ; Wed, 03 May 2023 11:29:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1683138541; x=1685730541; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=rU7RFo/Qi6sAFl76yDK5utbxvptYWkIyT3bH8yXhY1Y=; b=RPZaNW/A8d2jFPzO5Uu6mxCjBBnsw736c6iwc2fjyW8mE2OJXdJEsKQGpx06e2NqDO JB46FqXGZ7WGezRBcWe8jWL+JiX+IDEHxOAK6jYXZGOxh+xnykTev40tymd/GSAU4hf9 4hqcrlWTCBRW1FoJ7KItL1u+2KGt3wl+wWTQZyzcRM8aOTxDcCqnfopfrkBEGtDQnudd dA/MoBxmvAVZV10G61+rwJGi14dXUX2nVFJKeqdK7EjhTDtEmX0DrSPcJnWxY8HE9ScQ hERe1vFVfwavgFKEXQa4qM3xTjcaZGISPvPubszeUY0/QlqyDUMKDQlKc6BKIaQq1neS 6HBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683138541; x=1685730541; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=rU7RFo/Qi6sAFl76yDK5utbxvptYWkIyT3bH8yXhY1Y=; b=DX+icj9JKa1HvMPXEX1qvigtQxJqm1WFdHhnjrLnG1Qgi3QA4Ikb782Q1eYSa0oWAf lMx8MYJr67t/RLNykGNoh0h/Ltg0efCzwmnaekXNRbpxF5DbAnkNsGiGBvMjm9B5t3yY It7RE/1vWWFlpAINHzJwlEQi8zXHHYAL54Bge5z+HmYZCG/fiBTUCtHNW9d6cOGJQxni HEvLz7MJ3nqUB+FhUcV3yTCGh+ZJVddp4XYNAQQoy1iBHxHkLbr+ruUSj8KSodBRICih YqNZ0DZs0Kp7YBCI4+hdUCjYtmnYSuIxSxnbR/u6wTmjesK5K2c/vJukr8MtlbZuXp3E NQUA== X-Gm-Message-State: AC+VfDygyuTP0Rj4gdrQvSDLl7pRz54uL535sBNykDXIX3uSYC8pyItC gjAa65K9QjTe9Z4E3F1TlsTY5Rr+sAY= X-Google-Smtp-Source: ACHHUZ6f2gjDc37H1mSg+Zx7V96G1c7wz1OI8tjDQXwLTbONJnYUIqlGEuiFyIoVnxJaJdWrkqm+pZOGo5A= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:5305:0:b0:b92:5a75:9f55 with SMTP id h5-20020a255305000000b00b925a759f55mr13450125ybb.1.1683138541455; Wed, 03 May 2023 11:29:01 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 May 2023 11:28:49 -0700 In-Reply-To: <20230503182852.3431281-1-seanjc@google.com> Mime-Version: 1.0 References: <20230503182852.3431281-1-seanjc@google.com> X-Mailer: git-send-email 2.40.1.495.gc816e09b53d-goog Message-ID: <20230503182852.3431281-3-seanjc@google.com> Subject: [PATCH 2/5] KVM: SVM: Use kvm_pat_valid() directly instead of kvm_mtrr_valid() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Wenyao Hai , Ke Guo Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ke Guo Use kvm_pat_valid() directly instead of bouncing through kvm_mtrr_valid(). The PAT is not an MTRR, and kvm_mtrr_valid() just redirects to kvm_pat_valid(), i.e. for better or worse, KVM doesn't apply the "zap SPTEs" logic to guest PAT changes when the VM has a passthrough device with non-coherent DMA. Signed-off-by: Ke Guo [sean: massage changelog] Signed-off-by: Sean Christopherson Reviewed-by: Kai Huang --- arch/x86/kvm/svm/svm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index eb308c9994f9..db237ccdc957 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -2935,7 +2935,7 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct = msr_data *msr) =20 break; case MSR_IA32_CR_PAT: - if (!kvm_mtrr_valid(vcpu, MSR_IA32_CR_PAT, data)) + if (!kvm_pat_valid(data)) return 1; vcpu->arch.pat =3D data; svm->vmcb01.ptr->save.g_pat =3D data; --=20 2.40.1.495.gc816e09b53d-goog From nobody Thu Feb 12 01:03:06 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 68FD6C7EE26 for ; Wed, 3 May 2023 18:29:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230136AbjECS3R (ORCPT ); Wed, 3 May 2023 14:29:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33164 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229993AbjECS3L (ORCPT ); Wed, 3 May 2023 14:29:11 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E10507D99 for ; Wed, 3 May 2023 11:29:03 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-55a2648c164so73024577b3.2 for ; Wed, 03 May 2023 11:29:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1683138543; x=1685730543; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=bcUuJsmnNf1FE7EU8eKP0IPIgfKzwZXNJofkM8/MGEI=; b=0xWagrPwWS6KtZvncnYm+PQ1pC+fpjXwRTFHojXSiK4uCSQMd4zFwJsSHuDj1xngtw X70UtcGdZoTNm6sMNGsoYBdAg3rwStYXTsruvK0NzgmClrr33et/0m7gbrxNpYDLsIVS Mm6fiPPmS8lXwJoP3lX4/N0/MkHsMpSWqCzD0dQ/Ot8CitX06ZQbc/760jgIAa1KHVcO 33ST7LSGDTibEQwzj1Y9IBQlOCQ6eZsCel6Qsx6n57mnjKkNFHEtCqorrrZkB/kWq6TL plHi0VohADz3vEt2ZBATmqMV3d5rr62rcv0mmKXKL5Vk230w6Pi3RrwZUdhS4BFJOI+l H2rA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683138543; x=1685730543; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=bcUuJsmnNf1FE7EU8eKP0IPIgfKzwZXNJofkM8/MGEI=; b=N+vgBdtLqobivfPDXrOJAjTm8kS6XlP1gUPrzOW2szO2QYj4EUhRpLf82EV3EqwbnL 6bK1via0ApnvSsKOA7wUs7/Q+Vs1D6/2lwe4buU766k86UiPij3GjY9TfsfePxEQjjfs X6pIxRjKgL4QnUYO3zZnidVyOviPg5/7NkmUSBS83qz4WaAuZZ5p/x9tYr/6oVKJRg5r JId9NeCRE6TcmR58f1RXYIYdE+pqowvC83AUlVFJHodbTga+fj9UyJKQ9dqeyhzzYU5X V/5/r+6V0DFwsPwNy9c70n62ccyrXVR4LqAMMjgJKyqw1rOGykLImLg6+qbGJBttmqm7 vBKQ== X-Gm-Message-State: AC+VfDxMEZZuZwNqvyT7fUcxflPQI3sBmzB+E3CfBRKbghVVEHeGnKL8 rGcrNlYwv2LQ5OTbC9B2l7ehrKr97iI= X-Google-Smtp-Source: ACHHUZ5yBw+H5JFnlvjHVMd9MoBmVM7glR0pGbMbbeUTU9PaTeJ0Bxw15VjcwtQnkLers1iFUq4hwAvPdXg= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:4007:0:b0:545:1d7f:acbf with SMTP id l7-20020a814007000000b005451d7facbfmr12675966ywn.10.1683138543201; Wed, 03 May 2023 11:29:03 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 May 2023 11:28:50 -0700 In-Reply-To: <20230503182852.3431281-1-seanjc@google.com> Mime-Version: 1.0 References: <20230503182852.3431281-1-seanjc@google.com> X-Mailer: git-send-email 2.40.1.495.gc816e09b53d-goog Message-ID: <20230503182852.3431281-4-seanjc@google.com> Subject: [PATCH 3/5] KVM: x86: Use MTRR macros to define possible MTRR MSR ranges From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Wenyao Hai , Ke Guo Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the MTRR macros to identify the ranges of possible MTRR MSRs instead of bounding the ranges with a mismash of open coded values and unrelated MSR indices. Carving out the gap for the machine check MSRs in particular is confusing, as it's easy to incorrectly think the case statement handles MCE MSRs instead of skipping them. Drop the range-based funneling of MSRs between the end of the MCE MSRs and MTRR_DEF_TYPE, i.e. 0x2A0-0x2FF, and instead handle MTTR_DEF_TYPE as the one-off case that it is. Extract PAT (0x277) as well in anticipation of dropping PAT "handling" from the MTRR code. Keep the range-based handling for the variable+fixed MTRRs even though capturing unknown MSRs 0x214-0x24F is arguably "wrong". There is a gap in the fixed MTRRs, 0x260-0x267, i.e. the MTRR code needs to filter out unknown MSRs anyways, and using a single range generates marginally better code for the big switch statement. Signed-off-by: Sean Christopherson --- arch/x86/kvm/mtrr.c | 2 +- arch/x86/kvm/x86.c | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/arch/x86/kvm/mtrr.c b/arch/x86/kvm/mtrr.c index 9fac1ec03463..d2c428f4ae42 100644 --- a/arch/x86/kvm/mtrr.c +++ b/arch/x86/kvm/mtrr.c @@ -28,7 +28,7 @@ static bool msr_mtrr_valid(unsigned msr) { switch (msr) { - case 0x200 ... 0x200 + 2 * KVM_NR_VAR_MTRR - 1: + case MTRRphysBase_MSR(0) ... MTRRphysMask_MSR(KVM_NR_VAR_MTRR - 1): case MSR_MTRRfix64K_00000: case MSR_MTRRfix16K_80000: case MSR_MTRRfix16K_A0000: diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index e7f78fe79b32..8b356c9d8a81 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3700,8 +3700,9 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct = msr_data *msr_info) return 1; } break; - case 0x200 ... MSR_IA32_MC0_CTL2 - 1: - case MSR_IA32_MCx_CTL2(KVM_MAX_MCE_BANKS) ... 0x2ff: + case MSR_IA32_CR_PAT: + case MTRRphysBase_MSR(0) ... MSR_MTRRfix4K_F8000: + case MSR_MTRRdefType: return kvm_mtrr_set_msr(vcpu, msr, data); case MSR_IA32_APICBASE: return kvm_set_apic_base(vcpu, msr_info); @@ -4108,9 +4109,10 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct= msr_data *msr_info) msr_info->data =3D kvm_scale_tsc(rdtsc(), ratio) + offset; break; } + case MSR_IA32_CR_PAT: case MSR_MTRRcap: - case 0x200 ... MSR_IA32_MC0_CTL2 - 1: - case MSR_IA32_MCx_CTL2(KVM_MAX_MCE_BANKS) ... 0x2ff: + case MTRRphysBase_MSR(0) ... MSR_MTRRfix4K_F8000: + case MSR_MTRRdefType: return kvm_mtrr_get_msr(vcpu, msr_info->index, &msr_info->data); case 0xcd: /* fsb frequency */ msr_info->data =3D 3; --=20 2.40.1.495.gc816e09b53d-goog From nobody Thu Feb 12 01:03:06 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 85FE8C77B78 for ; Wed, 3 May 2023 18:29:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229970AbjECS3X (ORCPT ); Wed, 3 May 2023 14:29:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33304 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230096AbjECS3N (ORCPT ); Wed, 3 May 2023 14:29:13 -0400 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 767E47DAA for ; Wed, 3 May 2023 11:29:05 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id 41be03b00d2f7-51f10bda596so2392217a12.1 for ; Wed, 03 May 2023 11:29:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1683138545; x=1685730545; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=+XG9Kzlllq+ti/90Z+KsBtO7J9NFYimJbVN3QRxLOvk=; b=X29uNydOzy9esvjDZDAzmyJGWiaC/8bpqbk2Hn15itn/w45LOQd8JmRA/zpwjar7/G zCfOqNS1PuER3kG90LJ6+faebHsfrBZgI3Gsk9OaOkOjzz+YCncaAaFKFeTjGucnaL82 uV7amdMIE8zdLVIe+qP+XpQmBGhhs/EAOzrLAGU80Lo+kOudelqPKzbSbQ0oQyHVyBMa g50Ev7JfwzCubGHAIE+UmozkyzUX0bVgS5oags8b6FO52NSnPSqiB4IVtTSmtj6QDYHg smF9mSD6ucU4qYrBtDkwQqJSfLnkmTSjv+y/jwtO8cHVaC2OS6dmMMoRczVPyJn910iP gUIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683138545; x=1685730545; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+XG9Kzlllq+ti/90Z+KsBtO7J9NFYimJbVN3QRxLOvk=; b=OhzirQdsgOoNgJnJDx/lvZuY84X6myN2HB2J8DJCg8jqEVO/oJq0mtKbBnmPl1KSCK hHERbxET+YyBUWI5P5GDg799IukdENzIiTkmflHChOXNdkIsN3hD6H213E2xoVyAWoT8 KGt3w1z7E3dXrVtfJu+chEWoNI+Q1eTiIkRAF5fPY6x0SGU+LEfDfflUb8as/JxRG/+J VQ7WQ0SkEy0oM6phjqsh/pcFGMnJE+HBdkom9xR7saVevSij+W7DB2gDikp0gGLBRUp+ 95Llf/+hIVBRrr5lPSr9B4k9+RBAIPehZ4o0+5RWgxHpZQxHyL8GXwEq66CU+KFbPlG+ 13oA== X-Gm-Message-State: AC+VfDwZ0RPjezaCuVQtuJZrn56Tj+t90WtNHRNXsArBxgEQ2p6K2ia5 5Dxy/lageqn4MSjN6XcpTgt0UYhu79o= X-Google-Smtp-Source: ACHHUZ4g8LojGEmZCmmMffo7tSPFux1H2U6OuRHLfTAyx56VmnpckmGnA7nYKNUzNHB30VgOIXF/ETeNQoc= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:8142:0:b0:520:53db:fbf with SMTP id t63-20020a638142000000b0052053db0fbfmr760255pgd.6.1683138545003; Wed, 03 May 2023 11:29:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 May 2023 11:28:51 -0700 In-Reply-To: <20230503182852.3431281-1-seanjc@google.com> Mime-Version: 1.0 References: <20230503182852.3431281-1-seanjc@google.com> X-Mailer: git-send-email 2.40.1.495.gc816e09b53d-goog Message-ID: <20230503182852.3431281-5-seanjc@google.com> Subject: [PATCH 4/5] KVM: x86: WARN if writes to PAT MSR are handled by common KVM code From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Wenyao Hai , Ke Guo Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" WARN and continue if a write to the PAT MSR reaches kvm_set_msr_common() now that both VMX and SVM handle PAT writes entirely on their own. Keep the case statement with a WARN instead of dropping it entirely to document why KVM's handling of reads and writes isn't symmetrical (reads are still handled by kvm_get_msr_common(). Signed-off-by: Sean Christopherson --- arch/x86/kvm/x86.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 8b356c9d8a81..c36256d00250 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3701,6 +3701,12 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct= msr_data *msr_info) } break; case MSR_IA32_CR_PAT: + /* + * Writes to PAT should be handled by vendor code as both SVM + * and VMX track the guest's PAT in the VMCB/VMCS. + */ + WARN_ON_ONCE(1); + fallthrough; case MTRRphysBase_MSR(0) ... MSR_MTRRfix4K_F8000: case MSR_MTRRdefType: return kvm_mtrr_set_msr(vcpu, msr, data); --=20 2.40.1.495.gc816e09b53d-goog From nobody Thu Feb 12 01:03:06 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE77EC77B75 for ; Wed, 3 May 2023 18:29:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229761AbjECS3f (ORCPT ); Wed, 3 May 2023 14:29:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33322 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230092AbjECS3R (ORCPT ); Wed, 3 May 2023 14:29:17 -0400 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 75C617DA9 for ; Wed, 3 May 2023 11:29:07 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id d2e1a72fcca58-64115ef7234so4721651b3a.1 for ; Wed, 03 May 2023 11:29:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1683138547; x=1685730547; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=MYjVSO7f8c+kIFn144EZtSuJFXMcxb7hS79jWpV+usA=; b=uHBYwjej/DFECXibkpDHhfTivTrghGDOxsM5wpPm+2OKUgT35SLiyuAcYFfRSe3X2m Q3Kxx17ADvH76AXaDT3kJpvzbCkpSHft5I4S/odpDRI7L+yhK2UAparvBiSkhgjmud53 o8S07sZWBbZfl9vP1rp1WMi4j3MXwj4+m7IHgpFe9vE9XsuCkHP2PynOCPB0N13dUrfr /1U+6AA0iZodAo835RTkH0TA6X2ySLHFsNdvSXdjcjI2X3CaFD1NQgrhzi+uRGKVlGAE hTy2IcBDTowKlnWfXEmDrPtVRklseuhmqGxUvstOhjfpSoWunaoUm/6SA7pzhbLeRiWI aIjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683138547; x=1685730547; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MYjVSO7f8c+kIFn144EZtSuJFXMcxb7hS79jWpV+usA=; b=fp7roRkcg3gXWo5QYUIqHgFij4v3zIRqukpe+xp8uxpVl1xMfsLb1jjP3fNyDV06gN 2SJ/BybGO3L6OqFLz51wkFOUHyD1jhryB2zswtPRr+aoh5/18AEIcsPaa2DZPSmdFrob 2qgty54Zu6qI4urYfsahKdE93sU5aqHdwiAmp47dX4Vj8i+43bTMTu4tw3Kxrd4IzJbr HO1a8PeoixHj5Ao7DRbFDKI4fkc3es1gA+GymXCbEHQbSo/nsG47TneHG3ahbce3brFg AULoaQX/T9RWw93+VPSSA2DJe6mHB/fnnKuxhiq1q2ybW9HyO/btKYLW31Nkks4lOUbn /mzw== X-Gm-Message-State: AC+VfDyQRiEkVrxD4VYtMMsdtZLj/EofP5FNPQevJQD4A5fiXqK4+8fk r6/+XKBKlSkzgXH1lOvkOZvhugzaKTM= X-Google-Smtp-Source: ACHHUZ5aGf/q5xEUp0riyAAN6Net+jMN07Cmvn/fNQ/S3+kUTsXrLMg3LxQhwrZT086InrYNCPDfUT0sdTo= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:903:2292:b0:1ab:19db:f57 with SMTP id b18-20020a170903229200b001ab19db0f57mr271814plh.2.1683138546840; Wed, 03 May 2023 11:29:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 3 May 2023 11:28:52 -0700 In-Reply-To: <20230503182852.3431281-1-seanjc@google.com> Mime-Version: 1.0 References: <20230503182852.3431281-1-seanjc@google.com> X-Mailer: git-send-email 2.40.1.495.gc816e09b53d-goog Message-ID: <20230503182852.3431281-6-seanjc@google.com> Subject: [PATCH 5/5] KVM: x86: Move PAT MSR handling out of mtrr.c From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Wenyao Hai , Ke Guo Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop handling of MSR_IA32_CR_PAT from mtrr.c now that SVM and VMX handle writes without bouncing through kvm_set_msr_common(). PAT isn't truly an MTRR even though it affects memory types, and more importantly isn't factored into KVM's handling of non-coherent DMA. The read path is and always has been trivial, i.e. burying it in the MTRR code does more harm than good. Inject #GP unconditionally for the PAT "handlng" in kvm_set_msr_common(), as that code is reached if and only if KVM is buggy. Simply deleting the condition would provide similar functionality, but warning and explicitly alerting userspace that KVM is buggy is desirable. Signed-off-by: Sean Christopherson --- arch/x86/kvm/mtrr.c | 18 +++++------------- arch/x86/kvm/x86.c | 4 +++- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/arch/x86/kvm/mtrr.c b/arch/x86/kvm/mtrr.c index d2c428f4ae42..76b132ba9df2 100644 --- a/arch/x86/kvm/mtrr.c +++ b/arch/x86/kvm/mtrr.c @@ -41,7 +41,6 @@ static bool msr_mtrr_valid(unsigned msr) case MSR_MTRRfix4K_F0000: case MSR_MTRRfix4K_F8000: case MSR_MTRRdefType: - case MSR_IA32_CR_PAT: return true; } return false; @@ -60,9 +59,7 @@ bool kvm_mtrr_valid(struct kvm_vcpu *vcpu, u32 msr, u64 d= ata) if (!msr_mtrr_valid(msr)) return false; =20 - if (msr =3D=3D MSR_IA32_CR_PAT) { - return kvm_pat_valid(data); - } else if (msr =3D=3D MSR_MTRRdefType) { + if (msr =3D=3D MSR_MTRRdefType) { if (data & ~0xcff) return false; return valid_mtrr_type(data & 0xff); @@ -310,8 +307,7 @@ static void update_mtrr(struct kvm_vcpu *vcpu, u32 msr) gfn_t start, end; int index; =20 - if (msr =3D=3D MSR_IA32_CR_PAT || !tdp_enabled || - !kvm_arch_has_noncoherent_dma(vcpu->kvm)) + if (!tdp_enabled || !kvm_arch_has_noncoherent_dma(vcpu->kvm)) return; =20 if (!mtrr_is_enabled(mtrr_state) && msr !=3D MSR_MTRRdefType) @@ -382,8 +378,6 @@ int kvm_mtrr_set_msr(struct kvm_vcpu *vcpu, u32 msr, u6= 4 data) *(u64 *)&vcpu->arch.mtrr_state.fixed_ranges[index] =3D data; else if (msr =3D=3D MSR_MTRRdefType) vcpu->arch.mtrr_state.deftype =3D data; - else if (msr =3D=3D MSR_IA32_CR_PAT) - vcpu->arch.pat =3D data; else set_var_mtrr_msr(vcpu, msr, data); =20 @@ -411,13 +405,11 @@ int kvm_mtrr_get_msr(struct kvm_vcpu *vcpu, u32 msr, = u64 *pdata) return 1; =20 index =3D fixed_msr_to_range_index(msr); - if (index >=3D 0) + if (index >=3D 0) { *pdata =3D *(u64 *)&vcpu->arch.mtrr_state.fixed_ranges[index]; - else if (msr =3D=3D MSR_MTRRdefType) + } else if (msr =3D=3D MSR_MTRRdefType) { *pdata =3D vcpu->arch.mtrr_state.deftype; - else if (msr =3D=3D MSR_IA32_CR_PAT) - *pdata =3D vcpu->arch.pat; - else { /* Variable MTRRs */ + } else { /* Variable MTRRs */ int is_mtrr_mask; =20 index =3D (msr - 0x200) / 2; diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index c36256d00250..3aa93401a398 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3706,7 +3706,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct = msr_data *msr_info) * and VMX track the guest's PAT in the VMCB/VMCS. */ WARN_ON_ONCE(1); - fallthrough; + return 1; case MTRRphysBase_MSR(0) ... MSR_MTRRfix4K_F8000: case MSR_MTRRdefType: return kvm_mtrr_set_msr(vcpu, msr, data); @@ -4116,6 +4116,8 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct = msr_data *msr_info) break; } case MSR_IA32_CR_PAT: + msr_info->data =3D vcpu->arch.pat; + break; case MSR_MTRRcap: case MTRRphysBase_MSR(0) ... MSR_MTRRfix4K_F8000: case MSR_MTRRdefType: --=20 2.40.1.495.gc816e09b53d-goog