mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 00:24:12 +08:00
KVM: Hoist kvm_create_lapic() into kvm_vcpu_init()
Move kvm_create_lapic() into kvm_vcpu_init(), rather than having svm and vmx do it. And make it return the error rather than a fairly random -ENOMEM. This also solves the problem that neither svm.c nor vmx.c actually handles the error path properly. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Avi Kivity <avi@qumranet.com>
This commit is contained in:
parent
d589444e92
commit
76fafa5e22
@ -255,14 +255,22 @@ int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id)
|
||||
if (r < 0)
|
||||
goto fail_free_pio_data;
|
||||
|
||||
if (irqchip_in_kernel(kvm)) {
|
||||
r = kvm_create_lapic(vcpu);
|
||||
if (r < 0)
|
||||
goto fail_mmu_destroy;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
fail_mmu_destroy:
|
||||
kvm_mmu_destroy(vcpu);
|
||||
fail_free_pio_data:
|
||||
free_page((unsigned long)vcpu->pio_data);
|
||||
fail_free_run:
|
||||
free_page((unsigned long)vcpu->run);
|
||||
fail:
|
||||
return -ENOMEM;
|
||||
return r;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kvm_vcpu_init);
|
||||
|
||||
|
@ -588,12 +588,6 @@ static struct kvm_vcpu *svm_create_vcpu(struct kvm *kvm, unsigned int id)
|
||||
if (err)
|
||||
goto free_svm;
|
||||
|
||||
if (irqchip_in_kernel(kvm)) {
|
||||
err = kvm_create_lapic(&svm->vcpu);
|
||||
if (err < 0)
|
||||
goto free_svm;
|
||||
}
|
||||
|
||||
page = alloc_page(GFP_KERNEL);
|
||||
if (!page) {
|
||||
err = -ENOMEM;
|
||||
|
@ -2431,12 +2431,6 @@ static struct kvm_vcpu *vmx_create_vcpu(struct kvm *kvm, unsigned int id)
|
||||
if (err)
|
||||
goto free_vcpu;
|
||||
|
||||
if (irqchip_in_kernel(kvm)) {
|
||||
err = kvm_create_lapic(&vmx->vcpu);
|
||||
if (err < 0)
|
||||
goto free_vcpu;
|
||||
}
|
||||
|
||||
vmx->guest_msrs = kmalloc(PAGE_SIZE, GFP_KERNEL);
|
||||
if (!vmx->guest_msrs) {
|
||||
err = -ENOMEM;
|
||||
|
Loading…
Reference in New Issue
Block a user