提交 d3076952 编写于 作者: S Sean Christopherson 提交者: Paolo Bonzini

KVM: PPC: Book3S PR: Allocate book3s and shadow vcpu after common init

Call kvm_vcpu_init() in kvmppc_core_vcpu_create_pr() prior to allocating
the book3s and shadow_vcpu objects in preparation of moving said call to
common PPC code.  Although kvm_vcpu_init() has an arch callback, the
callback is empty for Book3S PR, i.e. barring unseen black magic, moving
the allocation has no real functional impact.
Signed-off-by: NSean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
上级 c50bfbdc
...@@ -1748,12 +1748,18 @@ static int kvmppc_core_vcpu_create_pr(struct kvm *kvm, struct kvm_vcpu *vcpu, ...@@ -1748,12 +1748,18 @@ static int kvmppc_core_vcpu_create_pr(struct kvm *kvm, struct kvm_vcpu *vcpu,
unsigned int id) unsigned int id)
{ {
struct kvmppc_vcpu_book3s *vcpu_book3s; struct kvmppc_vcpu_book3s *vcpu_book3s;
int err = -ENOMEM;
unsigned long p; unsigned long p;
int err;
err = kvm_vcpu_init(vcpu, kvm, id);
if (err)
return err;
err = -ENOMEM;
vcpu_book3s = vzalloc(sizeof(struct kvmppc_vcpu_book3s)); vcpu_book3s = vzalloc(sizeof(struct kvmppc_vcpu_book3s));
if (!vcpu_book3s) if (!vcpu_book3s)
goto out; goto uninit_vcpu;
vcpu->arch.book3s = vcpu_book3s; vcpu->arch.book3s = vcpu_book3s;
#ifdef CONFIG_KVM_BOOK3S_32_HANDLER #ifdef CONFIG_KVM_BOOK3S_32_HANDLER
...@@ -1763,14 +1769,9 @@ static int kvmppc_core_vcpu_create_pr(struct kvm *kvm, struct kvm_vcpu *vcpu, ...@@ -1763,14 +1769,9 @@ static int kvmppc_core_vcpu_create_pr(struct kvm *kvm, struct kvm_vcpu *vcpu,
goto free_vcpu3s; goto free_vcpu3s;
#endif #endif
err = kvm_vcpu_init(vcpu, kvm, id);
if (err)
goto free_shadow_vcpu;
err = -ENOMEM;
p = __get_free_page(GFP_KERNEL|__GFP_ZERO); p = __get_free_page(GFP_KERNEL|__GFP_ZERO);
if (!p) if (!p)
goto uninit_vcpu; goto free_shadow_vcpu;
vcpu->arch.shared = (void *)p; vcpu->arch.shared = (void *)p;
#ifdef CONFIG_PPC_BOOK3S_64 #ifdef CONFIG_PPC_BOOK3S_64
/* Always start the shared struct in native endian mode */ /* Always start the shared struct in native endian mode */
...@@ -1807,15 +1808,14 @@ static int kvmppc_core_vcpu_create_pr(struct kvm *kvm, struct kvm_vcpu *vcpu, ...@@ -1807,15 +1808,14 @@ static int kvmppc_core_vcpu_create_pr(struct kvm *kvm, struct kvm_vcpu *vcpu,
free_shared_page: free_shared_page:
free_page((unsigned long)vcpu->arch.shared); free_page((unsigned long)vcpu->arch.shared);
uninit_vcpu:
kvm_vcpu_uninit(vcpu);
free_shadow_vcpu: free_shadow_vcpu:
#ifdef CONFIG_KVM_BOOK3S_32_HANDLER #ifdef CONFIG_KVM_BOOK3S_32_HANDLER
kfree(vcpu->arch.shadow_vcpu); kfree(vcpu->arch.shadow_vcpu);
free_vcpu3s: free_vcpu3s:
#endif #endif
vfree(vcpu_book3s); vfree(vcpu_book3s);
out: uninit_vcpu:
kvm_vcpu_uninit(vcpu);
return err; return err;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册