Revision 57780495 target-i386/kvm.c

b/target-i386/kvm.c
777 777
        struct kvm_msr_entry entries[100];
778 778
    } msr_data;
779 779
    struct kvm_msr_entry *msrs = msr_data.entries;
780
    int n = 0;
780
    int i, n = 0;
781 781

  
782 782
    kvm_msr_entry_set(&msrs[n++], MSR_IA32_SYSENTER_CS, env->sysenter_cs);
783 783
    kvm_msr_entry_set(&msrs[n++], MSR_IA32_SYSENTER_ESP, env->sysenter_esp);
......
797 797
                          env->system_time_msr);
798 798
        kvm_msr_entry_set(&msrs[n++], MSR_KVM_WALL_CLOCK, env->wall_clock_msr);
799 799
    }
800
#ifdef KVM_CAP_MCE
801
    if (env->mcg_cap) {
802
        if (level == KVM_PUT_RESET_STATE)
803
            kvm_msr_entry_set(&msrs[n++], MSR_MCG_STATUS, env->mcg_status);
804
        else if (level == KVM_PUT_FULL_STATE) {
805
            kvm_msr_entry_set(&msrs[n++], MSR_MCG_STATUS, env->mcg_status);
806
            kvm_msr_entry_set(&msrs[n++], MSR_MCG_CTL, env->mcg_ctl);
807
            for (i = 0; i < (env->mcg_cap & 0xff) * 4; i++)
808
                kvm_msr_entry_set(&msrs[n++], MSR_MC0_CTL + i, env->mce_banks[i]);
809
        }
810
    }
811
#endif
800 812

  
801 813
    msr_data.info.nmsrs = n;
802 814

  
......
1004 1016
    msrs[n++].index = MSR_KVM_SYSTEM_TIME;
1005 1017
    msrs[n++].index = MSR_KVM_WALL_CLOCK;
1006 1018

  
1019
#ifdef KVM_CAP_MCE
1020
    if (env->mcg_cap) {
1021
        msrs[n++].index = MSR_MCG_STATUS;
1022
        msrs[n++].index = MSR_MCG_CTL;
1023
        for (i = 0; i < (env->mcg_cap & 0xff) * 4; i++)
1024
            msrs[n++].index = MSR_MC0_CTL + i;
1025
    }
1026
#endif
1027

  
1007 1028
    msr_data.info.nmsrs = n;
1008 1029
    ret = kvm_vcpu_ioctl(env, KVM_GET_MSRS, &msr_data);
1009 1030
    if (ret < 0)
......
1046 1067
        case MSR_KVM_WALL_CLOCK:
1047 1068
            env->wall_clock_msr = msrs[i].data;
1048 1069
            break;
1070
#ifdef KVM_CAP_MCE
1071
        case MSR_MCG_STATUS:
1072
            env->mcg_status = msrs[i].data;
1073
            break;
1074
        case MSR_MCG_CTL:
1075
            env->mcg_ctl = msrs[i].data;
1076
            break;
1077
#endif
1078
        default:
1079
#ifdef KVM_CAP_MCE
1080
            if (msrs[i].index >= MSR_MC0_CTL &&
1081
                msrs[i].index < MSR_MC0_CTL + (env->mcg_cap & 0xff) * 4) {
1082
                env->mce_banks[msrs[i].index - MSR_MC0_CTL] = msrs[i].data;
1083
                break;
1084
            }
1085
#endif
1049 1086
        }
1050 1087
    }
1051 1088

  

Also available in: Unified diff