From patchwork Wed May 3 18:28:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 89815 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1535076vqo; Wed, 3 May 2023 11:41:08 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4OFbDVDDV7i1MDLUpuYUctW/2mr043JtIUTgkKohAvnGCSVm2Ge+1p5sKjWThA+902hPZO X-Received: by 2002:a05:6a00:1954:b0:63d:254a:3909 with SMTP id s20-20020a056a00195400b0063d254a3909mr30716100pfk.32.1683139267905; Wed, 03 May 2023 11:41:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683139267; cv=none; d=google.com; s=arc-20160816; b=mjNW2otkyGv10q2A+JPKta+0QpCQozQlHDPX7MNbSuJMH3QpBlSo8hgV3AtPz2xsl7 Uf43EO8TVJ75Ye3ydFLs/Nxz6HP9Npk90HCwV1Ahx5hYnxSE+DgAHaTlb+c2uro4GifD 7PvQ9SXr4x/uTklU1QplJ851mhXi+vOfuPsjy6so+qYtrhdJWhyqAJNkIbJ41bkbZWYD 8ZzVXio3ZX3B7WFIbHpc49dSD50gTtLa6urwl9Ut/+wQP75eGVnrMUa7ppJv+Va5TOvx cgnV+A91wrD+M9rDBDD7gDijicNpDQ0nEawPI639m9TTP6c2bdAr8OTgTPTYNtXL7fTk wyGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=MYjVSO7f8c+kIFn144EZtSuJFXMcxb7hS79jWpV+usA=; b=ToidPfvXSYJ3lwFwamfO+z67NY5bnrMdALwpsKZzIyvyzqsrjgN3m/fmNdNARNlLg9 DvqcwY0KxVfKA3mHrfw8MuG+p9EGyXe6A7lvCrprxE6dSOat2AffhI4tueoIxUKHxgiR s6jUGbtssLGIkAHkwcKV80woQLFAypmkbNmuX1gCGdYxppjIfWNeV5AlS+ZjjiFn/Lfu Whf2iE1hcLg3wCVuKr6upPK6QTYMPMtN3BWirEmI44uroSlH6hVyFlG1RlSMcNJaqACu xnC2Qh357iu/gU+KfFOcSJrkexr/SyoQY7RgwAEWHWlaiWKPg8TWyV28kaDCjJ3tHs/+ b3JA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=uHBYwjej; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v10-20020aa799ca000000b0063b8e23415esi34232334pfi.92.2023.05.03.11.40.52; Wed, 03 May 2023 11:41:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=uHBYwjej; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230146AbjECS3e (ORCPT + 99 others); Wed, 3 May 2023 14:29:34 -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-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 X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1764899440733931139?= X-GMAIL-MSGID: =?utf-8?q?1764899440733931139?= 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 data) if (!msr_mtrr_valid(msr)) return false; - if (msr == MSR_IA32_CR_PAT) { - return kvm_pat_valid(data); - } else if (msr == MSR_MTRRdefType) { + if (msr == 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; - if (msr == MSR_IA32_CR_PAT || !tdp_enabled || - !kvm_arch_has_noncoherent_dma(vcpu->kvm)) + if (!tdp_enabled || !kvm_arch_has_noncoherent_dma(vcpu->kvm)) return; if (!mtrr_is_enabled(mtrr_state) && msr != MSR_MTRRdefType) @@ -382,8 +378,6 @@ int kvm_mtrr_set_msr(struct kvm_vcpu *vcpu, u32 msr, u64 data) *(u64 *)&vcpu->arch.mtrr_state.fixed_ranges[index] = data; else if (msr == MSR_MTRRdefType) vcpu->arch.mtrr_state.deftype = data; - else if (msr == MSR_IA32_CR_PAT) - vcpu->arch.pat = data; else set_var_mtrr_msr(vcpu, msr, data); @@ -411,13 +405,11 @@ int kvm_mtrr_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) return 1; index = fixed_msr_to_range_index(msr); - if (index >= 0) + if (index >= 0) { *pdata = *(u64 *)&vcpu->arch.mtrr_state.fixed_ranges[index]; - else if (msr == MSR_MTRRdefType) + } else if (msr == MSR_MTRRdefType) { *pdata = vcpu->arch.mtrr_state.deftype; - else if (msr == MSR_IA32_CR_PAT) - *pdata = vcpu->arch.pat; - else { /* Variable MTRRs */ + } else { /* Variable MTRRs */ int is_mtrr_mask; index = (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 = vcpu->arch.pat; + break; case MSR_MTRRcap: case MTRRphysBase_MSR(0) ... MSR_MTRRfix4K_F8000: case MSR_MTRRdefType: