Commit 76fafa5e authored by Rusty Russell's avatar Rusty Russell Committed by Avi Kivity
Browse files

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: default avatarRusty Russell <rusty@rustcorp.com.au>
Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
parent d589444e
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -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);

+0 −6
Original line number Diff line number Diff line
@@ -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;
+0 −6
Original line number Diff line number Diff line
@@ -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;