KVM: x86: SVM: use smram structs
authorMaxim Levitsky <mlevitsk@redhat.com>
Tue, 25 Oct 2022 12:47:39 +0000 (15:47 +0300)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 9 Nov 2022 17:31:25 +0000 (12:31 -0500)
Use SMM structs in the SVM code as well, which removes the last user of
put_smstate/GET_SMSTATE so remove these macros as well.

Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Message-Id: <20221025124741.228045-22-mlevitsk@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/smm.h
arch/x86/kvm/svm/svm.c

index b66da26..5202174 100644 (file)
@@ -4,12 +4,6 @@
 
 #include <linux/build_bug.h>
 
-#define GET_SMSTATE(type, buf, offset)         \
-       (*(type *)((buf) + (offset) - 0x7e00))
-
-#define PUT_SMSTATE(type, buf, offset, val)                      \
-       *(type *)((buf) + (offset) - 0x7e00) = val
-
 #ifdef CONFIG_KVM_SMM
 
 
index dfcdca3..2be8050 100644 (file)
@@ -4407,15 +4407,11 @@ static int svm_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram)
        struct kvm_host_map map_save;
        int ret;
 
-       char *smstate = (char *)smram;
-
        if (!is_guest_mode(vcpu))
                return 0;
 
-       /* FED8h - SVM Guest */
-       PUT_SMSTATE(u64, smstate, 0x7ed8, 1);
-       /* FEE0h - SVM Guest VMCB Physical Address */
-       PUT_SMSTATE(u64, smstate, 0x7ee0, svm->nested.vmcb12_gpa);
+       smram->smram64.svm_guest_flag = 1;
+       smram->smram64.svm_guest_vmcb_gpa = svm->nested.vmcb12_gpa;
 
        svm->vmcb->save.rax = vcpu->arch.regs[VCPU_REGS_RAX];
        svm->vmcb->save.rsp = vcpu->arch.regs[VCPU_REGS_RSP];
@@ -4453,28 +4449,25 @@ static int svm_leave_smm(struct kvm_vcpu *vcpu, const union kvm_smram *smram)
 {
        struct vcpu_svm *svm = to_svm(vcpu);
        struct kvm_host_map map, map_save;
-       u64 saved_efer, vmcb12_gpa;
        struct vmcb *vmcb12;
        int ret;
 
-       const char *smstate = (const char *)smram;
+       const struct kvm_smram_state_64 *smram64 = &smram->smram64;
 
        if (!guest_cpuid_has(vcpu, X86_FEATURE_LM))
                return 0;
 
        /* Non-zero if SMI arrived while vCPU was in guest mode. */
-       if (!GET_SMSTATE(u64, smstate, 0x7ed8))
+       if (!smram64->svm_guest_flag)
                return 0;
 
        if (!guest_cpuid_has(vcpu, X86_FEATURE_SVM))
                return 1;
 
-       saved_efer = GET_SMSTATE(u64, smstate, 0x7ed0);
-       if (!(saved_efer & EFER_SVME))
+       if (!(smram64->efer & EFER_SVME))
                return 1;
 
-       vmcb12_gpa = GET_SMSTATE(u64, smstate, 0x7ee0);
-       if (kvm_vcpu_map(vcpu, gpa_to_gfn(vmcb12_gpa), &map))
+       if (kvm_vcpu_map(vcpu, gpa_to_gfn(smram64->svm_guest_vmcb_gpa), &map))
                return 1;
 
        ret = 1;
@@ -4500,7 +4493,7 @@ static int svm_leave_smm(struct kvm_vcpu *vcpu, const union kvm_smram *smram)
        vmcb12 = map.hva;
        nested_copy_vmcb_control_to_cache(svm, &vmcb12->control);
        nested_copy_vmcb_save_to_cache(svm, &vmcb12->save);
-       ret = enter_svm_guest_mode(vcpu, vmcb12_gpa, vmcb12, false);
+       ret = enter_svm_guest_mode(vcpu, smram64->svm_guest_vmcb_gpa, vmcb12, false);
 
        if (ret)
                goto unmap_save;