aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhang Xiantao <xiantao.zhang@intel.com>2007-11-14 07:39:31 -0500
committerAvi Kivity <avi@qumranet.com>2008-01-30 10:53:02 -0500
commitcb498ea2ce1d3f3c0bc0a2522241dca10263e437 (patch)
tree255eeaa3581a79ceb77772c1350faa95ce4706a6
parente9b11c17552afe684e9e5d0444309a3ddf410116 (diff)
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>
-rw-r--r--drivers/kvm/kvm.h4
-rw-r--r--drivers/kvm/kvm_main.c61
-rw-r--r--drivers/kvm/svm.c4
-rw-r--r--drivers/kvm/vmx.c4
4 files changed, 28 insertions, 45 deletions
diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h
index bca07c6d0460..5e7be1504664 100644
--- a/drivers/kvm/kvm.h
+++ b/drivers/kvm/kvm.h
@@ -495,9 +495,9 @@ void vcpu_put(struct kvm_vcpu *vcpu);
495void decache_vcpus_on_cpu(int cpu); 495void decache_vcpus_on_cpu(int cpu);
496 496
497 497
498int kvm_init_x86(struct kvm_x86_ops *ops, unsigned int vcpu_size, 498int kvm_init(struct kvm_x86_ops *ops, unsigned int vcpu_size,
499 struct module *module); 499 struct module *module);
500void kvm_exit_x86(void); 500void kvm_exit(void);
501 501
502int kvm_mmu_module_init(void); 502int kvm_mmu_module_init(void);
503void kvm_mmu_module_exit(void); 503void kvm_mmu_module_exit(void);
diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
index 7fdfed52dbe7..2b3736e7483c 100644
--- a/drivers/kvm/kvm_main.c
+++ b/drivers/kvm/kvm_main.c
@@ -1434,12 +1434,27 @@ static void kvm_sched_out(struct preempt_notifier *pn,
1434 kvm_arch_vcpu_put(vcpu); 1434 kvm_arch_vcpu_put(vcpu);
1435} 1435}
1436 1436
1437int kvm_init_x86(struct kvm_x86_ops *ops, unsigned int vcpu_size, 1437int kvm_init(struct kvm_x86_ops *ops, unsigned int vcpu_size,
1438 struct module *module) 1438 struct module *module)
1439{ 1439{
1440 int r; 1440 int r;
1441 int cpu; 1441 int cpu;
1442 1442
1443 r = kvm_mmu_module_init();
1444 if (r)
1445 goto out4;
1446
1447 kvm_init_debug();
1448
1449 kvm_arch_init();
1450
1451 bad_page = alloc_page(GFP_KERNEL | __GFP_ZERO);
1452
1453 if (bad_page == NULL) {
1454 r = -ENOMEM;
1455 goto out;
1456 }
1457
1443 if (kvm_x86_ops) { 1458 if (kvm_x86_ops) {
1444 printk(KERN_ERR "kvm: already loaded the other module\n"); 1459 printk(KERN_ERR "kvm: already loaded the other module\n");
1445 return -EEXIST; 1460 return -EEXIST;
@@ -1520,11 +1535,14 @@ out_free_0:
1520 kvm_arch_hardware_unsetup(); 1535 kvm_arch_hardware_unsetup();
1521out: 1536out:
1522 kvm_x86_ops = NULL; 1537 kvm_x86_ops = NULL;
1538 kvm_exit_debug();
1539 kvm_mmu_module_exit();
1540out4:
1523 return r; 1541 return r;
1524} 1542}
1525EXPORT_SYMBOL_GPL(kvm_init_x86); 1543EXPORT_SYMBOL_GPL(kvm_init);
1526 1544
1527void kvm_exit_x86(void) 1545void kvm_exit(void)
1528{ 1546{
1529 misc_deregister(&kvm_dev); 1547 misc_deregister(&kvm_dev);
1530 kmem_cache_destroy(kvm_vcpu_cache); 1548 kmem_cache_destroy(kvm_vcpu_cache);
@@ -1535,43 +1553,8 @@ void kvm_exit_x86(void)
1535 on_each_cpu(hardware_disable, NULL, 0, 1); 1553 on_each_cpu(hardware_disable, NULL, 0, 1);
1536 kvm_arch_hardware_unsetup(); 1554 kvm_arch_hardware_unsetup();
1537 kvm_x86_ops = NULL; 1555 kvm_x86_ops = NULL;
1538}
1539EXPORT_SYMBOL_GPL(kvm_exit_x86);
1540
1541static __init int kvm_init(void)
1542{
1543 int r;
1544
1545 r = kvm_mmu_module_init();
1546 if (r)
1547 goto out4;
1548
1549 kvm_init_debug();
1550
1551 kvm_arch_init();
1552
1553 bad_page = alloc_page(GFP_KERNEL | __GFP_ZERO);
1554
1555 if (bad_page == NULL) {
1556 r = -ENOMEM;
1557 goto out;
1558 }
1559
1560 return 0;
1561
1562out:
1563 kvm_exit_debug();
1564 kvm_mmu_module_exit();
1565out4:
1566 return r;
1567}
1568
1569static __exit void kvm_exit(void)
1570{
1571 kvm_exit_debug(); 1556 kvm_exit_debug();
1572 __free_page(bad_page); 1557 __free_page(bad_page);
1573 kvm_mmu_module_exit(); 1558 kvm_mmu_module_exit();
1574} 1559}
1575 1560EXPORT_SYMBOL_GPL(kvm_exit);
1576module_init(kvm_init)
1577module_exit(kvm_exit)
diff --git a/drivers/kvm/svm.c b/drivers/kvm/svm.c
index 97863f8fd001..0ccbef18476a 100644
--- a/drivers/kvm/svm.c
+++ b/drivers/kvm/svm.c
@@ -1723,13 +1723,13 @@ static struct kvm_x86_ops svm_x86_ops = {
1723 1723
1724static int __init svm_init(void) 1724static int __init svm_init(void)
1725{ 1725{
1726 return kvm_init_x86(&svm_x86_ops, sizeof(struct vcpu_svm), 1726 return kvm_init(&svm_x86_ops, sizeof(struct vcpu_svm),
1727 THIS_MODULE); 1727 THIS_MODULE);
1728} 1728}
1729 1729
1730static void __exit svm_exit(void) 1730static void __exit svm_exit(void)
1731{ 1731{
1732 kvm_exit_x86(); 1732 kvm_exit();
1733} 1733}
1734 1734
1735module_init(svm_init) 1735module_init(svm_init)
diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c
index c3bde7532714..529162345c12 100644
--- a/drivers/kvm/vmx.c
+++ b/drivers/kvm/vmx.c
@@ -2677,7 +2677,7 @@ static int __init vmx_init(void)
2677 memset(iova, 0xff, PAGE_SIZE); 2677 memset(iova, 0xff, PAGE_SIZE);
2678 kunmap(vmx_io_bitmap_b); 2678 kunmap(vmx_io_bitmap_b);
2679 2679
2680 r = kvm_init_x86(&vmx_x86_ops, sizeof(struct vcpu_vmx), THIS_MODULE); 2680 r = kvm_init(&vmx_x86_ops, sizeof(struct vcpu_vmx), THIS_MODULE);
2681 if (r) 2681 if (r)
2682 goto out1; 2682 goto out1;
2683 2683
@@ -2698,7 +2698,7 @@ static void __exit vmx_exit(void)
2698 __free_page(vmx_io_bitmap_b); 2698 __free_page(vmx_io_bitmap_b);
2699 __free_page(vmx_io_bitmap_a); 2699 __free_page(vmx_io_bitmap_a);
2700 2700
2701 kvm_exit_x86(); 2701 kvm_exit();
2702} 2702}
2703 2703
2704module_init(vmx_init) 2704module_init(vmx_init)