Add function for checking mca broadcast of CPU
Add function for checking whether current CPU support mca broadcast. Signed-off-by: Jin Dongming <jin.dongming@np.css.fujitsu.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
31ce5e0c49
commit
2bd3e04c3b
@ -760,6 +760,7 @@ int cpu_x86_exec(CPUX86State *s);
|
||||
void cpu_x86_close(CPUX86State *s);
|
||||
void x86_cpu_list (FILE *f, fprintf_function cpu_fprintf, const char *optarg);
|
||||
void x86_cpudef_setup(void);
|
||||
int cpu_x86_support_mca_broadcast(CPUState *env);
|
||||
|
||||
int cpu_get_pic_interrupt(CPUX86State *s);
|
||||
/* MSDOS compatibility mode FPU exception support */
|
||||
|
@ -110,6 +110,32 @@ void cpu_x86_close(CPUX86State *env)
|
||||
qemu_free(env);
|
||||
}
|
||||
|
||||
static void cpu_x86_version(CPUState *env, int *family, int *model)
|
||||
{
|
||||
int cpuver = env->cpuid_version;
|
||||
|
||||
if (family == NULL || model == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
*family = (cpuver >> 8) & 0x0f;
|
||||
*model = ((cpuver >> 12) & 0xf0) + ((cpuver >> 4) & 0x0f);
|
||||
}
|
||||
|
||||
/* Broadcast MCA signal for processor version 06H_EH and above */
|
||||
int cpu_x86_support_mca_broadcast(CPUState *env)
|
||||
{
|
||||
int family = 0;
|
||||
int model = 0;
|
||||
|
||||
cpu_x86_version(env, &family, &model);
|
||||
if ((family == 6 && model >= 14) || family > 6) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***********************************************************/
|
||||
/* x86 debug */
|
||||
|
||||
@ -1080,6 +1106,13 @@ void cpu_inject_x86_mce(CPUState *cenv, int bank, uint64_t status,
|
||||
return;
|
||||
}
|
||||
|
||||
if (broadcast) {
|
||||
if (!cpu_x86_support_mca_broadcast(cenv)) {
|
||||
fprintf(stderr, "Current CPU does not support broadcast\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (kvm_enabled()) {
|
||||
if (broadcast) {
|
||||
flag |= MCE_BROADCAST;
|
||||
|
@ -1711,13 +1711,9 @@ static void hardware_memory_error(void)
|
||||
static void kvm_mce_broadcast_rest(CPUState *env)
|
||||
{
|
||||
CPUState *cenv;
|
||||
int family, model, cpuver = env->cpuid_version;
|
||||
|
||||
family = (cpuver >> 8) & 0xf;
|
||||
model = ((cpuver >> 12) & 0xf0) + ((cpuver >> 4) & 0xf);
|
||||
|
||||
/* Broadcast MCA signal for processor version 06H_EH and above */
|
||||
if ((family == 6 && model >= 14) || family > 6) {
|
||||
if (cpu_x86_support_mca_broadcast(env)) {
|
||||
for (cenv = first_cpu; cenv != NULL; cenv = cenv->next_cpu) {
|
||||
if (cenv == env) {
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user