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