diff options
| author | Sean Christopherson <seanjc@google.com> | 2023-05-11 16:33:51 -0700 |
|---|---|---|
| committer | Sean Christopherson <seanjc@google.com> | 2023-06-01 13:41:06 -0700 |
| commit | dee321977a230802a5065af4ad4f4f5e8558a738 (patch) | |
| tree | f8729cd9aa8796f138a94b65eb7f4f9cea5df318 /arch/x86/kvm/svm/svm.c | |
| parent | 3a5f49078eb5106f9b918066908508c3044b5ada (diff) | |
| download | linux-dee321977a230802a5065af4ad4f4f5e8558a738.tar.gz linux-dee321977a230802a5065af4ad4f4f5e8558a738.tar.bz2 linux-dee321977a230802a5065af4ad4f4f5e8558a738.zip | |
KVM: x86: Move common handling of PAT MSR writes to kvm_set_msr_common()
Move the common check-and-set handling of PAT MSR writes out of vendor
code and into kvm_set_msr_common(). This aligns writes with reads, which
are already handled in common code, i.e. makes the handling of reads and
writes symmetrical in common code.
Alternatively, the common handling in kvm_get_msr_common() could be moved
to vendor code, but duplicating code is generally undesirable (even though
the duplicatated code is trivial in this case), and guest writes to PAT
should be rare, i.e. the overhead of the extra function call is a
non-issue in practice.
Suggested-by: Kai Huang <kai.huang@intel.com>
Reviewed-by: Kai Huang <kai.huang@intel.com>
Link: https://lore.kernel.org/r/20230511233351.635053-9-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
Diffstat (limited to 'arch/x86/kvm/svm/svm.c')
| -rw-r--r-- | arch/x86/kvm/svm/svm.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index e1e17c7dc7d5..924609d63f8a 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -2939,9 +2939,10 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr) break; case MSR_IA32_CR_PAT: - if (!kvm_pat_valid(data)) - return 1; - vcpu->arch.pat = data; + ret = kvm_set_msr_common(vcpu, msr); + if (ret) + break; + svm->vmcb01.ptr->save.g_pat = data; if (is_guest_mode(vcpu)) nested_vmcb02_compute_g_pat(svm); |
