From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christian Ehrhardt Subject: [PATCH] [2/2] merged_move_kvm_vpu_cache_to_x86 Date: Thu, 29 Nov 2007 13:45:28 +0100 Message-ID: <474EB468.2@linux.vnet.ibm.com> References: <474E8DA2.600@linux.vnet.ibm.com> <42DFA526FC41B1429CE7279EF83C6BDCA3951C@pdsmsx415.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020602080508070803030707" Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org, carsteno-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org, hollisb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org, avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org To: "Zhang, Xiantao" Return-path: In-Reply-To: <42DFA526FC41B1429CE7279EF83C6BDCA3951C-wq7ZOvIWXbMAbVU2wMM1CrfspsVTdybXVpNB7YpNyf8@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Errors-To: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: kvm.vger.kernel.org This is a multi-part message in MIME format. --------------020602080508070803030707 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Attached your patch 2/2 and my 3/2 merged. As you said the renaming patch is not essential, but I prefer names as cl= ear as possible which would be with renaming patch. As 4/2 still applies after this merged one we can just let Avi apply what= ever he likes from this series ;-) Zhang, Xiantao wrote: > Thanks, sure to move it out. Maybe you can update my second patch > directly for Avi's easy maintenance.=20 [...] --- From: Zhang Xiantao From: Christian Ehrhardt Date: Thu, 29 Nov 2007 10:54:00 +0100 Subject: [PATCH] [2/2] merged_move_kvm_vpu_cache_to_x86 Moving kvm_vcpu_cache to x86.c, since only x86 platform will use to=20 align the memory area for fx_save. To prevent misuse of these x86 structu= re=20 in generic code the definition moved from kvm.h to x86.h. Signed-off-by: Christian Ehrhardt --- [diffstat] kvm.h | 4 ++-- kvm_main.c | 17 +---------------- x86.c | 19 ++++++++++++++++++- x86.h | 1 + 4 files changed, 22 insertions(+), 19 deletions(-) I'm not yet sure if my mailer now at last keeps the format to apply it la= ter so I additionally attach it as file this time. [diff] diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h index be18620..6ff189f 100644 --- a/drivers/kvm/kvm.h +++ b/drivers/kvm/kvm.h @@ -112,7 +112,6 @@ struct kvm_mmu_page { }; =20 struct kvm_vcpu; -extern struct kmem_cache *kvm_vcpu_cache; =20 /* * x86 supports 3 paging modes (4-level 64-bit, 3-level 64-bit, and 2-le= vel @@ -456,7 +455,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_r= un); =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, s= truct 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) diff --git a/drivers/kvm/x86.h b/drivers/kvm/x86.h index 78ab1e1..2080a65 100644 --- a/drivers/kvm/x86.h +++ b/drivers/kvm/x86.h @@ -224,6 +224,7 @@ struct kvm_x86_ops { }; =20 extern struct kvm_x86_ops *kvm_x86_ops; +extern struct kmem_cache *kvm_vcpu_cache; =20 int kvm_mmu_module_init(void); void kvm_mmu_module_exit(void); --=20 Gr=FCsse / regards,=20 Christian Ehrhardt IBM Linux Technology Center, Open Virtualization +49 7031/16-3385 Ehrhardt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org Ehrhardt-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org IBM Deutschland Entwicklung GmbH Vorsitzender des Aufsichtsrats: Johann Weihen=20 Gesch=E4ftsf=FChrung: Herbert Kircher=20 Sitz der Gesellschaft: B=F6blingen Registergericht: Amtsgericht Stuttgart, HRB 243294 --------------020602080508070803030707 Content-Type: text/x-patch; name="merged_move_kvm_vpu_cache_to_x86.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="merged_move_kvm_vpu_cache_to_x86.diff" diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h index be18620..6ff189f 100644 --- a/drivers/kvm/kvm.h +++ b/drivers/kvm/kvm.h @@ -112,7 +112,6 @@ struct kvm_mmu_page { }; struct kvm_vcpu; -extern struct kmem_cache *kvm_vcpu_cache; /* * x86 supports 3 paging modes (4-level 64-bit, 3-level 64-bit, and 2-level @@ -456,7 +455,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); -int kvm_arch_init(void *opaque); +int kvm_arch_init(void *opaque, unsigned int vcpu_size, + struct module * module); void kvm_arch_exit(void); 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); static cpumask_t cpus_hardware_enabled; -struct kmem_cache *kvm_vcpu_cache; -EXPORT_SYMBOL_GPL(kvm_vcpu_cache); - static __read_mostly struct preempt_ops kvm_preempt_ops; static struct dentry *debugfs_dir; @@ -1338,7 +1335,7 @@ int kvm_init(void *opaque, unsigned int vcpu_size, kvm_init_debug(); - r = kvm_arch_init(opaque); + r = kvm_arch_init(opaque, vcpu_size, module); if (r) goto out_fail; @@ -1375,15 +1372,6 @@ int kvm_init(void *opaque, unsigned int vcpu_size, if (r) goto out_free_4; - /* A kmem cache lets us meet the alignment requirements of fx_save. */ - kvm_vcpu_cache = kmem_cache_create("kvm_vcpu", vcpu_size, - __alignof__(struct kvm_vcpu), - 0, NULL); - if (!kvm_vcpu_cache) { - r = -ENOMEM; - goto out_free_5; - } - kvm_chardev_ops.owner = module; r = misc_register(&kvm_dev); @@ -1398,8 +1386,6 @@ int kvm_init(void *opaque, unsigned int vcpu_size, return 0; 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 @@ struct kvm_x86_ops *kvm_x86_ops; +struct kmem_cache *kvm_vcpu_cache; +EXPORT_SYMBOL_GPL(kvm_vcpu_cache); + + struct kvm_stats_debugfs_item debugfs_entries[] = { { "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); -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 = (struct kvm_x86_ops *)opaque; @@ -2006,6 +2011,15 @@ int kvm_arch_init(void *opaque) if (r) goto out_fail; + /* A kmem cache lets us meet the alignment requirements of fx_save. */ + kvm_vcpu_cache = kmem_cache_create("kvm_vcpu", vcpu_size, + __alignof__(struct kvm_vcpu), + 0, NULL); + if (!kvm_vcpu_cache) { + r = -ENOMEM; + goto out_free; + } + kvm_init_msr_list(); if (kvm_x86_ops) { @@ -2030,6 +2044,8 @@ int kvm_arch_init(void *opaque) return 0; 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 = NULL; kvm_mmu_module_exit(); + kmem_cache_destroy(kvm_vcpu_cache); } int kvm_emulate_halt(struct kvm_vcpu *vcpu) diff --git a/drivers/kvm/x86.h b/drivers/kvm/x86.h index 78ab1e1..2080a65 100644 --- a/drivers/kvm/x86.h +++ b/drivers/kvm/x86.h @@ -224,6 +224,7 @@ struct kvm_x86_ops { }; extern struct kvm_x86_ops *kvm_x86_ops; +extern struct kmem_cache *kvm_vcpu_cache; int kvm_mmu_module_init(void); void kvm_mmu_module_exit(void); --------------020602080508070803030707 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- SF.Net email is sponsored by: The Future of Linux Business White Paper from Novell. From the desktop to the data center, Linux is going mainstream. Let it simplify your IT future. http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4 --------------020602080508070803030707 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel --------------020602080508070803030707--