KVM: Portability: Combine kvm_init and kvm_init_x86

Will be called once arch module registers itself.

Signed-off-by: Zhang Xiantao <xiantao.zhang@intel.com>
Acked-by: Carsten Otte <cotte@de.ibm.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
This commit is contained in:
Zhang Xiantao 2007-11-14 20:39:31 +08:00 committed by Avi Kivity
parent e9b11c1755
commit cb498ea2ce
4 changed files with 28 additions and 45 deletions

View File

@ -495,9 +495,9 @@ void vcpu_put(struct kvm_vcpu *vcpu);
void decache_vcpus_on_cpu(int cpu);
int kvm_init_x86(struct kvm_x86_ops *ops, unsigned int vcpu_size,
int kvm_init(struct kvm_x86_ops *ops, unsigned int vcpu_size,
struct module *module);
void kvm_exit_x86(void);
void kvm_exit(void);
int kvm_mmu_module_init(void);
void kvm_mmu_module_exit(void);

View File

@ -1434,12 +1434,27 @@ static void kvm_sched_out(struct preempt_notifier *pn,
kvm_arch_vcpu_put(vcpu);
}
int kvm_init_x86(struct kvm_x86_ops *ops, unsigned int vcpu_size,
int kvm_init(struct kvm_x86_ops *ops, unsigned int vcpu_size,
struct module *module)
{
int r;
int cpu;
r = kvm_mmu_module_init();
if (r)
goto out4;
kvm_init_debug();
kvm_arch_init();
bad_page = alloc_page(GFP_KERNEL | __GFP_ZERO);
if (bad_page == NULL) {
r = -ENOMEM;
goto out;
}
if (kvm_x86_ops) {
printk(KERN_ERR "kvm: already loaded the other module\n");
return -EEXIST;
@ -1520,11 +1535,14 @@ out_free_0:
kvm_arch_hardware_unsetup();
out:
kvm_x86_ops = NULL;
kvm_exit_debug();
kvm_mmu_module_exit();
out4:
return r;
}
EXPORT_SYMBOL_GPL(kvm_init_x86);
EXPORT_SYMBOL_GPL(kvm_init);
void kvm_exit_x86(void)
void kvm_exit(void)
{
misc_deregister(&kvm_dev);
kmem_cache_destroy(kvm_vcpu_cache);
@ -1535,43 +1553,8 @@ void kvm_exit_x86(void)
on_each_cpu(hardware_disable, NULL, 0, 1);
kvm_arch_hardware_unsetup();
kvm_x86_ops = NULL;
}
EXPORT_SYMBOL_GPL(kvm_exit_x86);
static __init int kvm_init(void)
{
int r;
r = kvm_mmu_module_init();
if (r)
goto out4;
kvm_init_debug();
kvm_arch_init();
bad_page = alloc_page(GFP_KERNEL | __GFP_ZERO);
if (bad_page == NULL) {
r = -ENOMEM;
goto out;
}
return 0;
out:
kvm_exit_debug();
kvm_mmu_module_exit();
out4:
return r;
}
static __exit void kvm_exit(void)
{
kvm_exit_debug();
__free_page(bad_page);
kvm_mmu_module_exit();
}
module_init(kvm_init)
module_exit(kvm_exit)
EXPORT_SYMBOL_GPL(kvm_exit);

View File

@ -1723,13 +1723,13 @@ static struct kvm_x86_ops svm_x86_ops = {
static int __init svm_init(void)
{
return kvm_init_x86(&svm_x86_ops, sizeof(struct vcpu_svm),
return kvm_init(&svm_x86_ops, sizeof(struct vcpu_svm),
THIS_MODULE);
}
static void __exit svm_exit(void)
{
kvm_exit_x86();
kvm_exit();
}
module_init(svm_init)

View File

@ -2677,7 +2677,7 @@ static int __init vmx_init(void)
memset(iova, 0xff, PAGE_SIZE);
kunmap(vmx_io_bitmap_b);
r = kvm_init_x86(&vmx_x86_ops, sizeof(struct vcpu_vmx), THIS_MODULE);
r = kvm_init(&vmx_x86_ops, sizeof(struct vcpu_vmx), THIS_MODULE);
if (r)
goto out1;
@ -2698,7 +2698,7 @@ static void __exit vmx_exit(void)
__free_page(vmx_io_bitmap_b);
__free_page(vmx_io_bitmap_a);
kvm_exit_x86();
kvm_exit();
}
module_init(vmx_init)