xen/mcelog: drop __MC_MSR_MCGCAP
authorJan Beulich <jbeulich@suse.com>
Mon, 11 Nov 2019 14:45:42 +0000 (15:45 +0100)
committerJuergen Gross <jgross@suse.com>
Thu, 14 Nov 2019 08:45:32 +0000 (09:45 +0100)
It has never been part of Xen's public interface, and there's therefore
no guarantee for MCG_CAP's value to always be present in array entry 0.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
drivers/xen/mcelog.c
include/xen/interface/xen-mca.h

index b8bf61a..c870cdc 100644 (file)
@@ -222,7 +222,7 @@ static int convert_log(struct mc_info *mi)
        struct mcinfo_global *mc_global;
        struct mcinfo_bank *mc_bank;
        struct xen_mce m;
-       uint32_t i;
+       unsigned int i, j;
 
        mic = NULL;
        x86_mcinfo_lookup(&mic, mi, MC_TYPE_GLOBAL);
@@ -248,7 +248,12 @@ static int convert_log(struct mc_info *mi)
        m.socketid = g_physinfo[i].mc_chipid;
        m.cpu = m.extcpu = g_physinfo[i].mc_cpunr;
        m.cpuvendor = (__u8)g_physinfo[i].mc_vendor;
-       m.mcgcap = g_physinfo[i].mc_msrvalues[__MC_MSR_MCGCAP].value;
+       for (j = 0; j < g_physinfo[i].mc_nmsrvals; ++j)
+               switch (g_physinfo[i].mc_msrvalues[j].reg) {
+               case MSR_IA32_MCG_CAP:
+                       m.mcgcap = g_physinfo[i].mc_msrvalues[j].value;
+                       break;
+               }
 
        mic = NULL;
        x86_mcinfo_lookup(&mic, mi, MC_TYPE_BANK);
index 73a4ea7..d7a45f0 100644 (file)
@@ -183,7 +183,6 @@ struct mc_info {
 DEFINE_GUEST_HANDLE_STRUCT(mc_info);
 
 #define __MC_MSR_ARRAYSIZE 8
-#define __MC_MSR_MCGCAP 0
 #define __MC_NMSRS 1
 #define MC_NCAPS 7
 struct mcinfo_logical_cpu {