forked from luck/tmp_suning_uos_patched
KVM: Move vcpu->run page allocation out of kvm_vcpu_init()
Open code the allocation and freeing of the vcpu->run page in kvm_vm_ioctl_create_vcpu() and kvm_vcpu_destroy() respectively. Doing so allows kvm_vcpu_init() to be a pure init function and eliminates kvm_vcpu_uninit() entirely. Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
9941d224fb
commit
8bd826d629
|
@ -321,10 +321,8 @@ void kvm_reload_remote_mmus(struct kvm *kvm)
|
|||
kvm_make_all_cpus_request(kvm, KVM_REQ_MMU_RELOAD);
|
||||
}
|
||||
|
||||
static int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id)
|
||||
static void kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id)
|
||||
{
|
||||
struct page *page;
|
||||
|
||||
mutex_init(&vcpu->mutex);
|
||||
vcpu->cpu = -1;
|
||||
vcpu->kvm = kvm;
|
||||
|
@ -336,23 +334,11 @@ static int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id)
|
|||
vcpu->pre_pcpu = -1;
|
||||
INIT_LIST_HEAD(&vcpu->blocked_vcpu_list);
|
||||
|
||||
page = alloc_page(GFP_KERNEL | __GFP_ZERO);
|
||||
if (!page)
|
||||
return -ENOMEM;
|
||||
vcpu->run = page_address(page);
|
||||
|
||||
kvm_vcpu_set_in_spin_loop(vcpu, false);
|
||||
kvm_vcpu_set_dy_eligible(vcpu, false);
|
||||
vcpu->preempted = false;
|
||||
vcpu->ready = false;
|
||||
preempt_notifier_init(&vcpu->preempt_notifier, &kvm_preempt_ops);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void kvm_vcpu_uninit(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
free_page((unsigned long)vcpu->run);
|
||||
}
|
||||
|
||||
void kvm_vcpu_destroy(struct kvm_vcpu *vcpu)
|
||||
|
@ -366,7 +352,7 @@ void kvm_vcpu_destroy(struct kvm_vcpu *vcpu)
|
|||
*/
|
||||
put_pid(rcu_dereference_protected(vcpu->pid, 1));
|
||||
|
||||
kvm_vcpu_uninit(vcpu);
|
||||
free_page((unsigned long)vcpu->run);
|
||||
kmem_cache_free(kvm_vcpu_cache, vcpu);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kvm_vcpu_destroy);
|
||||
|
@ -2711,6 +2697,7 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, u32 id)
|
|||
{
|
||||
int r;
|
||||
struct kvm_vcpu *vcpu;
|
||||
struct page *page;
|
||||
|
||||
if (id >= KVM_MAX_VCPU_ID)
|
||||
return -EINVAL;
|
||||
|
@ -2734,13 +2721,18 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, u32 id)
|
|||
goto vcpu_decrement;
|
||||
}
|
||||
|
||||
r = kvm_vcpu_init(vcpu, kvm, id);
|
||||
if (r)
|
||||
page = alloc_page(GFP_KERNEL | __GFP_ZERO);
|
||||
if (!page) {
|
||||
r = -ENOMEM;
|
||||
goto vcpu_free;
|
||||
}
|
||||
vcpu->run = page_address(page);
|
||||
|
||||
kvm_vcpu_init(vcpu, kvm, id);
|
||||
|
||||
r = kvm_arch_vcpu_create(vcpu);
|
||||
if (r)
|
||||
goto vcpu_uninit;
|
||||
goto vcpu_free_run_page;
|
||||
|
||||
kvm_create_vcpu_debugfs(vcpu);
|
||||
|
||||
|
@ -2778,8 +2770,8 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, u32 id)
|
|||
mutex_unlock(&kvm->lock);
|
||||
debugfs_remove_recursive(vcpu->debugfs_dentry);
|
||||
kvm_arch_vcpu_destroy(vcpu);
|
||||
vcpu_uninit:
|
||||
kvm_vcpu_uninit(vcpu);
|
||||
vcpu_free_run_page:
|
||||
free_page((unsigned long)vcpu->run);
|
||||
vcpu_free:
|
||||
kmem_cache_free(kvm_vcpu_cache, vcpu);
|
||||
vcpu_decrement:
|
||||
|
|
Loading…
Reference in New Issue
Block a user