Add function for checking mca broadcast of CPU.
PATCH 3/3 Add function for checking mca broadcast of CPU.
Add function for checking whether current CPU support mca broadcast.
Signed-off-by Jin Dongming <[email protected]>
--- target-i386/cpu.h | 1 + target-i386/helper.c | 33 +++++++++++++++++++++++++++++++++ target-i386/kvm.c | 6 +----- 3 files changed, 35 insertions(+), 5 deletions(-)
target-i386/cpu.h +1 -0
@@ -762,6 +762,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 */
target-i386/helper.c +33 -0
@@ -112,6 +112,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 */
@@ -1082,6 +1108,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 ;
target-i386/kvm.c +1 -5
@@ -1741,13 +1741,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 ;
Signature · 1 line
1.7.1.1