From: Zhang, X. <xia...@in...> - 2007-11-29 08:17:28
|
From: Zhang Xiantao <xia...@in...> Date: Thu, 29 Nov 2007 15:45:57 +0800 Subject: [PATCH] Moving kvm_vcpu_cache to x86.c. Moving kvm_vcpu_cache to x86.c, since only x86 platform will use to align the memory area for fx_save. Signed-off-by: Zhang Xiantao <xia...@in...> --- drivers/kvm/kvm.h | 3 ++- drivers/kvm/kvm_main.c | 17 +---------------- drivers/kvm/x86.c | 19 ++++++++++++++++++- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h index be18620..b2545c8 100644 --- a/drivers/kvm/kvm.h +++ b/drivers/kvm/kvm.h @@ -456,7 +456,8 @@ int kvm_arch_vcpu_ioctl_debug_guest(struct kvm_vcpu *vcpu, struct kvm_debug_guest *dbg); int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); =20 -int kvm_arch_init(void *opaque); +int kvm_arch_init(void *opaque, unsigned int vcpu_size, + struct module * module); void kvm_arch_exit(void); =20 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu); diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c index a6fbe6b..687ef98 100644 --- a/drivers/kvm/kvm_main.c +++ b/drivers/kvm/kvm_main.c @@ -56,9 +56,6 @@ LIST_HEAD(vm_list); =20 static cpumask_t cpus_hardware_enabled; =20 -struct kmem_cache *kvm_vcpu_cache; -EXPORT_SYMBOL_GPL(kvm_vcpu_cache); - static __read_mostly struct preempt_ops kvm_preempt_ops; =20 static struct dentry *debugfs_dir; @@ -1338,7 +1335,7 @@ int kvm_init(void *opaque, unsigned int vcpu_size, =20 kvm_init_debug(); =20 - r =3D kvm_arch_init(opaque); + r =3D kvm_arch_init(opaque, vcpu_size, module); if (r) goto out_fail; =20 @@ -1375,15 +1372,6 @@ int kvm_init(void *opaque, unsigned int vcpu_size, if (r) goto out_free_4; =20 - /* A kmem cache lets us meet the alignment requirements of fx_save. */ - kvm_vcpu_cache =3D kmem_cache_create("kvm_vcpu", vcpu_size, - __alignof__(struct kvm_vcpu), - 0, NULL); - if (!kvm_vcpu_cache) { - r =3D -ENOMEM; - goto out_free_5; - } - kvm_chardev_ops.owner =3D module; =20 r =3D misc_register(&kvm_dev); @@ -1398,8 +1386,6 @@ int kvm_init(void *opaque, unsigned int vcpu_size, return 0; =20 out_free: - kmem_cache_destroy(kvm_vcpu_cache); -out_free_5: sysdev_unregister(&kvm_sysdev); out_free_4: sysdev_class_unregister(&kvm_sysdev_class); @@ -1423,7 +1409,6 @@ EXPORT_SYMBOL_GPL(kvm_init); void kvm_exit(void) { misc_deregister(&kvm_dev); - kmem_cache_destroy(kvm_vcpu_cache); sysdev_unregister(&kvm_sysdev); sysdev_class_unregister(&kvm_sysdev_class); unregister_reboot_notifier(&kvm_reboot_notifier); diff --git a/drivers/kvm/x86.c b/drivers/kvm/x86.c index c70ac33..b8a1b52 100644 --- a/drivers/kvm/x86.c +++ b/drivers/kvm/x86.c @@ -48,6 +48,10 @@ =20 struct kvm_x86_ops *kvm_x86_ops; =20 +struct kmem_cache *kvm_vcpu_cache; +EXPORT_SYMBOL_GPL(kvm_vcpu_cache); + + struct kvm_stats_debugfs_item debugfs_entries[] =3D { { "pf_fixed", VCPU_STAT(pf_fixed) }, { "pf_guest", VCPU_STAT(pf_guest) }, @@ -1997,7 +2001,8 @@ int kvm_emulate_pio_string(struct kvm_vcpu *vcpu, struct kvm_run *run, int in, } EXPORT_SYMBOL_GPL(kvm_emulate_pio_string); =20 -int kvm_arch_init(void *opaque) +int kvm_arch_init(void *opaque, unsigned int vcpu_size, + struct module *module) { int r; struct kvm_x86_ops *ops =3D (struct kvm_x86_ops *)opaque; @@ -2006,6 +2011,15 @@ int kvm_arch_init(void *opaque) if (r) goto out_fail; =20 + /* A kmem cache lets us meet the alignment requirements of fx_save. */ + kvm_vcpu_cache =3D kmem_cache_create("kvm_vcpu", vcpu_size, + __alignof__(struct kvm_vcpu), + 0, NULL); + if (!kvm_vcpu_cache) { + r =3D -ENOMEM; + goto out_free; + } + kvm_init_msr_list(); =20 if (kvm_x86_ops) { @@ -2030,6 +2044,8 @@ int kvm_arch_init(void *opaque) return 0; =20 out: + kmem_cache_destroy(kvm_vcpu_cache); +out_free: kvm_mmu_module_exit(); out_fail: return r; @@ -2039,6 +2055,7 @@ void kvm_arch_exit(void) { kvm_x86_ops =3D NULL; kvm_mmu_module_exit(); + kmem_cache_destroy(kvm_vcpu_cache); } =20 int kvm_emulate_halt(struct kvm_vcpu *vcpu) --=20 1.5.1.2 |