Skip to content

Commit

Permalink
target-i386: QOM'ify CPU init
Browse files Browse the repository at this point in the history
Move code from cpu_x86_init() to new QOM x86_cpu_initfn().
Also move mce_init() to cpu.c since it's used nowhere else.

Signed-off-by: Andreas Färber <afaerber@suse.de>
  • Loading branch information
afaerber committed Apr 2, 2012
1 parent 114d1de commit 1e155f3
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 18 deletions.
27 changes: 27 additions & 0 deletions target-i386/cpu.c
Expand Up @@ -1380,6 +1380,32 @@ static void x86_cpu_reset(CPUState *s)
cpu_state_reset(env);
}

static void mce_init(X86CPU *cpu)
{
CPUX86State *cenv = &cpu->env;
unsigned int bank;

if (((cenv->cpuid_version >> 8) & 0xf) >= 6
&& (cenv->cpuid_features & (CPUID_MCE | CPUID_MCA)) ==
(CPUID_MCE | CPUID_MCA)) {
cenv->mcg_cap = MCE_CAP_DEF | MCE_BANKS_DEF;
cenv->mcg_ctl = ~(uint64_t)0;
for (bank = 0; bank < MCE_BANKS_DEF; bank++) {
cenv->mce_banks[bank * 4] = ~(uint64_t)0;
}
}
}

static void x86_cpu_initfn(Object *obj)
{
X86CPU *cpu = X86_CPU(obj);
CPUX86State *env = &cpu->env;

cpu_exec_init(env);
env->cpuid_apic_id = env->cpu_index;
mce_init(cpu);
}

static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
{
X86CPUClass *xcc = X86_CPU_CLASS(oc);
Expand All @@ -1393,6 +1419,7 @@ static const TypeInfo x86_cpu_type_info = {
.name = TYPE_X86_CPU,
.parent = TYPE_CPU,
.instance_size = sizeof(X86CPU),
.instance_init = x86_cpu_initfn,
.abstract = false,
.class_size = sizeof(X86CPUClass),
.class_init = x86_cpu_common_class_init,
Expand Down
18 changes: 0 additions & 18 deletions target-i386/helper.c
Expand Up @@ -1197,21 +1197,6 @@ void cpu_report_tpr_access(CPUX86State *env, TPRAccess access)
}
#endif /* !CONFIG_USER_ONLY */

static void mce_init(CPUX86State *cenv)
{
unsigned int bank;

if (((cenv->cpuid_version >> 8) & 0xf) >= 6
&& (cenv->cpuid_features & (CPUID_MCE | CPUID_MCA)) ==
(CPUID_MCE | CPUID_MCA)) {
cenv->mcg_cap = MCE_CAP_DEF | MCE_BANKS_DEF;
cenv->mcg_ctl = ~(uint64_t)0;
for (bank = 0; bank < MCE_BANKS_DEF; bank++) {
cenv->mce_banks[bank * 4] = ~(uint64_t)0;
}
}
}

int cpu_x86_get_descr_debug(CPUX86State *env, unsigned int selector,
target_ulong *base, unsigned int *limit,
unsigned int *flags)
Expand Down Expand Up @@ -1249,7 +1234,6 @@ CPUX86State *cpu_x86_init(const char *cpu_model)

cpu = X86_CPU(object_new(TYPE_X86_CPU));
env = &cpu->env;
cpu_exec_init(env);
env->cpu_model_str = cpu_model;

/* init various static tables used in TCG mode */
Expand All @@ -1265,8 +1249,6 @@ CPUX86State *cpu_x86_init(const char *cpu_model)
object_delete(OBJECT(cpu));
return NULL;
}
env->cpuid_apic_id = env->cpu_index;
mce_init(env);

qemu_init_vcpu(env);

Expand Down

0 comments on commit 1e155f3

Please sign in to comment.