From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Otte Subject: Re: [PATCH] 5/5 Move-some-x86-specific-part-from-kvm_init-to-kvm_arch Date: Wed, 14 Nov 2007 13:02:49 +0100 Message-ID: <473AE3E9.9020709@de.ibm.com> References: <42DFA526FC41B1429CE7279EF83C6BDC94FACC@pdsmsx415.ccr.corp.intel.com> Reply-To: carsteno-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org, carsteno-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org, Hollis Blanchard , Avi Kivity To: "Zhang, Xiantao" Return-path: In-Reply-To: <42DFA526FC41B1429CE7279EF83C6BDC94FACC-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 I think two other functionalities need to be moved to kvm_arch_init which are still in common: The call to kvm_mmu_set_nonpresent_ptes() and the creation of kvm_vcpu_cache. This can well be done after merging this patch. kvm_init looks very much cleaned up now, well done Xiantao :-). Acked-by: Carsten Otte Zhang, Xiantao wrote: > From: Zhang Xiantao > Move-some-x86-specific-part-from-kvm_init-to-kvm_arch > Signed-off-by: Zhang Xiantao > --- > drivers/kvm/kvm.h | 5 +++-- > drivers/kvm/kvm_main.c | 26 ++++++-------------------- > drivers/kvm/x86.c | 27 ++++++++++++++++++++++++++- > 3 files changed, 35 insertions(+), 23 deletions(-) > > diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h > index 6e1bf8c..5162d29 100644 > --- a/drivers/kvm/kvm.h > +++ b/drivers/kvm/kvm.h > @@ -493,7 +493,7 @@ void vcpu_load(struct kvm_vcpu *vcpu); > void vcpu_put(struct kvm_vcpu *vcpu); > > > -int kvm_init(struct kvm_x86_ops *ops, unsigned int vcpu_size, > +int kvm_init(void *opaque, unsigned int vcpu_size, > struct module *module); > void kvm_exit(void); > > @@ -647,7 +647,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); > > -__init void kvm_arch_init(void); > +int kvm_arch_init(void *opaque); > +void kvm_arch_exit(void); > > int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu); > void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu); > diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c > index ae7ee77..1594e48 100644 > --- a/drivers/kvm/kvm_main.c > +++ b/drivers/kvm/kvm_main.c > @@ -1470,7 +1470,7 @@ static void kvm_sched_out(struct preempt_notifier > *pn, > kvm_arch_vcpu_put(vcpu); > } > > -int kvm_init(struct kvm_x86_ops *ops, unsigned int vcpu_size, > +int kvm_init(void *opaque, unsigned int vcpu_size, > struct module *module) > { > int r; > @@ -1482,7 +1482,9 @@ int kvm_init(struct kvm_x86_ops *ops, unsigned int > vcpu_size, > > kvm_init_debug(); > > - kvm_arch_init(); > + r = kvm_arch_init(opaque); > + if (r) > + goto out4; > > bad_page = alloc_page(GFP_KERNEL | __GFP_ZERO); > > @@ -1491,22 +1493,6 @@ int kvm_init(struct kvm_x86_ops *ops, unsigned > int vcpu_size, > goto out; > } > > - if (kvm_x86_ops) { > - printk(KERN_ERR "kvm: already loaded the other > module\n"); > - return -EEXIST; > - } > - > - if (!ops->cpu_has_kvm_support()) { > - printk(KERN_ERR "kvm: no hardware support\n"); > - return -EOPNOTSUPP; > - } > - if (ops->disabled_by_bios()) { > - printk(KERN_ERR "kvm: disabled by bios\n"); > - return -EOPNOTSUPP; > - } > - > - kvm_x86_ops = ops; > - > r = kvm_arch_hardware_setup(); > if (r < 0) > goto out; > @@ -1570,7 +1556,7 @@ out_free_1: > out_free_0: > kvm_arch_hardware_unsetup(); > out: > - kvm_x86_ops = NULL; > + kvm_arch_exit(); > kvm_exit_debug(); > kvm_mmu_module_exit(); > out4: > @@ -1588,7 +1574,7 @@ void kvm_exit(void) > unregister_cpu_notifier(&kvm_cpu_notifier); > on_each_cpu(hardware_disable, NULL, 0, 1); > kvm_arch_hardware_unsetup(); > - kvm_x86_ops = NULL; > + kvm_arch_exit(); > kvm_exit_debug(); > __free_page(bad_page); > kvm_mmu_module_exit(); > diff --git a/drivers/kvm/x86.c b/drivers/kvm/x86.c > index 2e0fded..4fe9f60 100644 > --- a/drivers/kvm/x86.c > +++ b/drivers/kvm/x86.c > @@ -1611,11 +1611,36 @@ int kvm_emulate_pio_string(struct kvm_vcpu > *vcpu, struct kvm_run *run, int in, > } > EXPORT_SYMBOL_GPL(kvm_emulate_pio_string); > > -__init void kvm_arch_init(void) > +int kvm_arch_init(void *opaque) > { > + struct kvm_x86_ops *ops = (struct kvm_x86_ops *)opaque; > + > kvm_init_msr_list(); > + > + if (kvm_x86_ops) { > + printk(KERN_ERR "kvm: already loaded the other > module\n"); > + return -EEXIST; > + } > + > + if (!ops->cpu_has_kvm_support()) { > + printk(KERN_ERR "kvm: no hardware support\n"); > + return -EOPNOTSUPP; > + } > + if (ops->disabled_by_bios()) { > + printk(KERN_ERR "kvm: disabled by bios\n"); > + return -EOPNOTSUPP; > + } > + > + kvm_x86_ops = ops; > + > + return 0; > } > > +void kvm_arch_exit(void) > +{ > + kvm_x86_ops = NULL; > + } > + > int kvm_emulate_halt(struct kvm_vcpu *vcpu) > { > ++vcpu->stat.halt_exits; ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/