在 2012-11-12一的 19:38 -0200,Eduardo Habkost写道: > Eventually all of the CPU init code will probably become just a simple > object_new() call, with some arch-independent function that handles the > CPU model string parsing. But right now we need to reorder and split > many of the steps invoved in the CPU model string parsing and CPU object > creation, and it will be easier to do that inside cpu.c, by now. > > Also, make cpu_x86_register() static, as now it is only used inside > cpu.c. > > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> > --- > target-i386/cpu.c | 26 +++++++++++++++++++++++++- > target-i386/cpu.h | 1 - > target-i386/helper.c | 24 ------------------------ > 3 files changed, 25 insertions(+), 26 deletions(-) > > diff --git a/target-i386/cpu.c b/target-i386/cpu.c > index fa8b5bd..b50ca8c 100644 > --- a/target-i386/cpu.c > +++ b/target-i386/cpu.c > @@ -1423,7 +1423,7 @@ static void filter_features_for_kvm(X86CPU *cpu) > } > #endif > > -int cpu_x86_register(X86CPU *cpu, const char *cpu_model) > +static int cpu_x86_register(X86CPU *cpu, const char *cpu_model) > { > CPUX86State *env = &cpu->env; > x86_def_t def1, *def = &def1; > @@ -1494,6 +1494,30 @@ int cpu_x86_register(X86CPU *cpu, const char > *cpu_model) > return 0; > } > > +X86CPU *cpu_x86_init(const char *cpu_model) > +{ > + X86CPU *cpu; > + CPUX86State *env; > + Error *error = NULL;
seems env unused anymore > + > + cpu = X86_CPU(object_new(TYPE_X86_CPU)); > + env = &cpu->env; > + env->cpu_model_str = cpu_model; > + > + if (cpu_x86_register(cpu, cpu_model) < 0) { > + object_delete(OBJECT(cpu)); > + return NULL; > + } > + > + x86_cpu_realize(OBJECT(cpu), &error); > + if (error) { > + error_free(error); > + object_delete(OBJECT(cpu)); > + return NULL; > + } > + return cpu; > +} > + > #if !defined(CONFIG_USER_ONLY) > > void cpu_clear_apic_feature(CPUX86State *env) > diff --git a/target-i386/cpu.h b/target-i386/cpu.h > index cdc59dc..4d5510e 100644 > --- a/target-i386/cpu.h > +++ b/target-i386/cpu.h > @@ -956,7 +956,6 @@ int cpu_x86_signal_handler(int host_signum, void *pinfo, > void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, > uint32_t *eax, uint32_t *ebx, > uint32_t *ecx, uint32_t *edx); > -int cpu_x86_register(X86CPU *cpu, const char *cpu_model); > void cpu_clear_apic_feature(CPUX86State *env); > void host_cpuid(uint32_t function, uint32_t count, > uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx); > diff --git a/target-i386/helper.c b/target-i386/helper.c > index bf206cf..47b53ed 100644 > --- a/target-i386/helper.c > +++ b/target-i386/helper.c > @@ -1240,30 +1240,6 @@ int cpu_x86_get_descr_debug(CPUX86State *env, unsigned > int selector, > return 1; > } > > -X86CPU *cpu_x86_init(const char *cpu_model) > -{ > - X86CPU *cpu; > - CPUX86State *env; > - Error *error = NULL; > - > - cpu = X86_CPU(object_new(TYPE_X86_CPU)); > - env = &cpu->env; > - env->cpu_model_str = cpu_model; > - > - if (cpu_x86_register(cpu, cpu_model) < 0) { > - object_delete(OBJECT(cpu)); > - return NULL; > - } > - > - x86_cpu_realize(OBJECT(cpu), &error); > - if (error) { > - error_free(error); > - object_delete(OBJECT(cpu)); > - return NULL; > - } > - return cpu; > -} > - > #if !defined(CONFIG_USER_ONLY) > void do_cpu_init(X86CPU *cpu) > { -- regards! li guang linux kernel team at FNST, china thinking with brain but heart living with heart but brain