OSDN Git Service

KVM: SVM: Use direct vcpu pointer during vCPU create/free
authorSean Christopherson <sean.j.christopherson@intel.com>
Wed, 18 Dec 2019 21:54:51 +0000 (13:54 -0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 24 Jan 2020 08:18:54 +0000 (09:18 +0100)
Capture the vcpu pointer in a local varaible and replace '&svm->vcpu'
references with a direct reference to the pointer in anticipation of
moving bits of the code to common x86 and passing the vcpu pointer into
svm_create_vcpu(), i.e. eliminate unnecessary noise from future patches.

Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm.c

index 235a7e5..b0d9045 100644 (file)
@@ -2189,6 +2189,7 @@ static int avic_init_vcpu(struct vcpu_svm *svm)
 
 static struct kvm_vcpu *svm_create_vcpu(struct kvm *kvm, unsigned int id)
 {
+       struct kvm_vcpu *vcpu;
        struct vcpu_svm *svm;
        struct page *page;
        struct page *msrpm_pages;
@@ -2204,24 +2205,25 @@ static struct kvm_vcpu *svm_create_vcpu(struct kvm *kvm, unsigned int id)
                err = -ENOMEM;
                goto out;
        }
+       vcpu = &svm->vcpu;
 
-       svm->vcpu.arch.user_fpu = kmem_cache_zalloc(x86_fpu_cache,
-                                                    GFP_KERNEL_ACCOUNT);
-       if (!svm->vcpu.arch.user_fpu) {
+       vcpu->arch.user_fpu = kmem_cache_zalloc(x86_fpu_cache,
+                                               GFP_KERNEL_ACCOUNT);
+       if (!vcpu->arch.user_fpu) {
                printk(KERN_ERR "kvm: failed to allocate kvm userspace's fpu\n");
                err = -ENOMEM;
                goto free_partial_svm;
        }
 
-       svm->vcpu.arch.guest_fpu = kmem_cache_zalloc(x86_fpu_cache,
-                                                    GFP_KERNEL_ACCOUNT);
-       if (!svm->vcpu.arch.guest_fpu) {
+       vcpu->arch.guest_fpu = kmem_cache_zalloc(x86_fpu_cache,
+                                                GFP_KERNEL_ACCOUNT);
+       if (!vcpu->arch.guest_fpu) {
                printk(KERN_ERR "kvm: failed to allocate vcpu's fpu\n");
                err = -ENOMEM;
                goto free_user_fpu;
        }
 
-       err = kvm_vcpu_init(&svm->vcpu, kvm, id);
+       err = kvm_vcpu_init(vcpu, kvm, id);
        if (err)
                goto free_svm;
 
@@ -2265,9 +2267,9 @@ static struct kvm_vcpu *svm_create_vcpu(struct kvm *kvm, unsigned int id)
        svm->asid_generation = 0;
        init_vmcb(svm);
 
-       svm_init_osvw(&svm->vcpu);
+       svm_init_osvw(vcpu);
 
-       return &svm->vcpu;
+       return vcpu;
 
 free_page4:
        __free_page(hsave_page);
@@ -2278,11 +2280,11 @@ free_page2:
 free_page1:
        __free_page(page);
 uninit:
-       kvm_vcpu_uninit(&svm->vcpu);
+       kvm_vcpu_uninit(vcpu);
 free_svm:
-       kmem_cache_free(x86_fpu_cache, svm->vcpu.arch.guest_fpu);
+       kmem_cache_free(x86_fpu_cache, vcpu->arch.guest_fpu);
 free_user_fpu:
-       kmem_cache_free(x86_fpu_cache, svm->vcpu.arch.user_fpu);
+       kmem_cache_free(x86_fpu_cache, vcpu->arch.user_fpu);
 free_partial_svm:
        kmem_cache_free(kvm_vcpu_cache, svm);
 out:
@@ -2313,8 +2315,8 @@ static void svm_free_vcpu(struct kvm_vcpu *vcpu)
        __free_page(virt_to_page(svm->nested.hsave));
        __free_pages(virt_to_page(svm->nested.msrpm), MSRPM_ALLOC_ORDER);
        kvm_vcpu_uninit(vcpu);
-       kmem_cache_free(x86_fpu_cache, svm->vcpu.arch.user_fpu);
-       kmem_cache_free(x86_fpu_cache, svm->vcpu.arch.guest_fpu);
+       kmem_cache_free(x86_fpu_cache, vcpu->arch.user_fpu);
+       kmem_cache_free(x86_fpu_cache, vcpu->arch.guest_fpu);
        kmem_cache_free(kvm_vcpu_cache, svm);
 }