Revision de024815 target-i386/cpu.c

b/target-i386/cpu.c
1380 1380
    cpu_state_reset(env);
1381 1381
}
1382 1382

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

  
1388
    if (((cenv->cpuid_version >> 8) & 0xf) >= 6
1389
        && (cenv->cpuid_features & (CPUID_MCE | CPUID_MCA)) ==
1390
            (CPUID_MCE | CPUID_MCA)) {
1391
        cenv->mcg_cap = MCE_CAP_DEF | MCE_BANKS_DEF;
1392
        cenv->mcg_ctl = ~(uint64_t)0;
1393
        for (bank = 0; bank < MCE_BANKS_DEF; bank++) {
1394
            cenv->mce_banks[bank * 4] = ~(uint64_t)0;
1395
        }
1396
    }
1397
}
1398

  
1399
static void x86_cpu_initfn(Object *obj)
1400
{
1401
    X86CPU *cpu = X86_CPU(obj);
1402
    CPUX86State *env = &cpu->env;
1403

  
1404
    cpu_exec_init(env);
1405
    env->cpuid_apic_id = env->cpu_index;
1406
    mce_init(cpu);
1407
}
1408

  
1383 1409
static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
1384 1410
{
1385 1411
    X86CPUClass *xcc = X86_CPU_CLASS(oc);
......
1393 1419
    .name = TYPE_X86_CPU,
1394 1420
    .parent = TYPE_CPU,
1395 1421
    .instance_size = sizeof(X86CPU),
1422
    .instance_init = x86_cpu_initfn,
1396 1423
    .abstract = false,
1397 1424
    .class_size = sizeof(X86CPUClass),
1398 1425
    .class_init = x86_cpu_common_class_init,

Also available in: Unified diff