lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 123/917] KVM: x86: Add helper to consolidate core logic of SET_CPUID{2} flows
    Date
    From: Sean Christopherson <seanjc@google.com>

    commit 8b44b174f6aca815fc84c2038e4523ef8e32fabb upstream.

    Move the core logic of SET_CPUID and SET_CPUID2 to a common helper, the
    only difference between the two ioctls() is the format of the userspace
    struct. A future fix will add yet more code to the core logic.

    No functional change intended.

    Cc: stable@vger.kernel.org
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Message-Id: <20211105095101.5384-2-pdurrant@amazon.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/x86/kvm/cpuid.c | 47 ++++++++++++++++++++++++-----------------------
    1 file changed, 24 insertions(+), 23 deletions(-)

    --- a/arch/x86/kvm/cpuid.c
    +++ b/arch/x86/kvm/cpuid.c
    @@ -232,6 +232,25 @@ u64 kvm_vcpu_reserved_gpa_bits_raw(struc
    return rsvd_bits(cpuid_maxphyaddr(vcpu), 63);
    }

    +static int kvm_set_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid_entry2 *e2,
    + int nent)
    +{
    + int r;
    +
    + r = kvm_check_cpuid(e2, nent);
    + if (r)
    + return r;
    +
    + kvfree(vcpu->arch.cpuid_entries);
    + vcpu->arch.cpuid_entries = e2;
    + vcpu->arch.cpuid_nent = nent;
    +
    + kvm_update_cpuid_runtime(vcpu);
    + kvm_vcpu_after_set_cpuid(vcpu);
    +
    + return 0;
    +}
    +
    /* when an old userspace process fills a new kernel module */
    int kvm_vcpu_ioctl_set_cpuid(struct kvm_vcpu *vcpu,
    struct kvm_cpuid *cpuid,
    @@ -268,18 +287,9 @@ int kvm_vcpu_ioctl_set_cpuid(struct kvm_
    e2[i].padding[2] = 0;
    }

    - r = kvm_check_cpuid(e2, cpuid->nent);
    - if (r) {
    + r = kvm_set_cpuid(vcpu, e2, cpuid->nent);
    + if (r)
    kvfree(e2);
    - goto out_free_cpuid;
    - }
    -
    - kvfree(vcpu->arch.cpuid_entries);
    - vcpu->arch.cpuid_entries = e2;
    - vcpu->arch.cpuid_nent = cpuid->nent;
    -
    - kvm_update_cpuid_runtime(vcpu);
    - kvm_vcpu_after_set_cpuid(vcpu);

    out_free_cpuid:
    kvfree(e);
    @@ -303,20 +313,11 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm
    return PTR_ERR(e2);
    }

    - r = kvm_check_cpuid(e2, cpuid->nent);
    - if (r) {
    + r = kvm_set_cpuid(vcpu, e2, cpuid->nent);
    + if (r)
    kvfree(e2);
    - return r;
    - }

    - kvfree(vcpu->arch.cpuid_entries);
    - vcpu->arch.cpuid_entries = e2;
    - vcpu->arch.cpuid_nent = cpuid->nent;
    -
    - kvm_update_cpuid_runtime(vcpu);
    - kvm_vcpu_after_set_cpuid(vcpu);
    -
    - return 0;
    + return r;
    }

    int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu,

    \
     
     \ /
      Last update: 2021-11-16 02:11    [W:6.036 / U:0.840 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site