lkml.org 
[lkml]   [2022]   [Oct]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH RESEND v4 21/23] KVM: x86: SVM: use smram structs
    Date
    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>
    ---
    arch/x86/kvm/smm.h | 6 ------
    arch/x86/kvm/svm/svm.c | 21 +++++++--------------
    2 files changed, 7 insertions(+), 20 deletions(-)

    diff --git a/arch/x86/kvm/smm.h b/arch/x86/kvm/smm.h
    index bf5c7ffeb11efc..8d96bff3f4d54f 100644
    --- a/arch/x86/kvm/smm.h
    +++ b/arch/x86/kvm/smm.h
    @@ -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


    diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
    index b49e3f5c921c99..3004a5ff3fbf79 100644
    --- a/arch/x86/kvm/svm/svm.c
    +++ b/arch/x86/kvm/svm/svm.c
    @@ -4442,15 +4442,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];
    @@ -4488,28 +4484,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;
    @@ -4535,7 +4528,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;
    --
    2.34.3
    \
     
     \ /
      Last update: 2022-10-25 14:54    [W:4.094 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site