Skip to content

Commit 86e9f9d

Browse files
committed
EDAC/mce_amd: Make fam_ops static global
... and do not kmalloc a three-pointer struct. Which simplifies mce_amd_init() a bit. No functional changes. Signed-off-by: Borislav Petkov <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
1 parent dcd0139 commit 86e9f9d

File tree

1 file changed

+29
-39
lines changed

1 file changed

+29
-39
lines changed

drivers/edac/mce_amd.c

Lines changed: 29 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
#include "mce_amd.h"
88

9-
static struct amd_decoder_ops *fam_ops;
9+
static struct amd_decoder_ops fam_ops;
1010

1111
static u8 xec_mask = 0xf;
1212

@@ -583,7 +583,7 @@ static void decode_mc0_mce(struct mce *m)
583583
: (xec ? "multimatch" : "parity")));
584584
return;
585585
}
586-
} else if (fam_ops->mc0_mce(ec, xec))
586+
} else if (fam_ops.mc0_mce(ec, xec))
587587
;
588588
else
589589
pr_emerg(HW_ERR "Corrupted MC0 MCE info?\n");
@@ -697,7 +697,7 @@ static void decode_mc1_mce(struct mce *m)
697697
pr_cont("Hardware Assert.\n");
698698
else
699699
goto wrong_mc1_mce;
700-
} else if (fam_ops->mc1_mce(ec, xec))
700+
} else if (fam_ops.mc1_mce(ec, xec))
701701
;
702702
else
703703
goto wrong_mc1_mce;
@@ -831,7 +831,7 @@ static void decode_mc2_mce(struct mce *m)
831831

832832
pr_emerg(HW_ERR "MC2 Error: ");
833833

834-
if (!fam_ops->mc2_mce(ec, xec))
834+
if (!fam_ops.mc2_mce(ec, xec))
835835
pr_cont(HW_ERR "Corrupted MC2 MCE info?\n");
836836
}
837837

@@ -1130,7 +1130,8 @@ amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data)
11301130
if (m->tsc)
11311131
pr_emerg(HW_ERR "TSC: %llu\n", m->tsc);
11321132

1133-
if (!fam_ops)
1133+
/* Doesn't matter which member to test. */
1134+
if (!fam_ops.mc0_mce)
11341135
goto err_code;
11351136

11361137
switch (m->bank) {
@@ -1185,70 +1186,65 @@ static int __init mce_amd_init(void)
11851186
c->x86_vendor != X86_VENDOR_HYGON)
11861187
return -ENODEV;
11871188

1188-
fam_ops = kzalloc(sizeof(struct amd_decoder_ops), GFP_KERNEL);
1189-
if (!fam_ops)
1190-
return -ENOMEM;
1191-
11921189
if (boot_cpu_has(X86_FEATURE_SMCA)) {
11931190
xec_mask = 0x3f;
11941191
goto out;
11951192
}
11961193

11971194
switch (c->x86) {
11981195
case 0xf:
1199-
fam_ops->mc0_mce = k8_mc0_mce;
1200-
fam_ops->mc1_mce = k8_mc1_mce;
1201-
fam_ops->mc2_mce = k8_mc2_mce;
1196+
fam_ops.mc0_mce = k8_mc0_mce;
1197+
fam_ops.mc1_mce = k8_mc1_mce;
1198+
fam_ops.mc2_mce = k8_mc2_mce;
12021199
break;
12031200

12041201
case 0x10:
1205-
fam_ops->mc0_mce = f10h_mc0_mce;
1206-
fam_ops->mc1_mce = k8_mc1_mce;
1207-
fam_ops->mc2_mce = k8_mc2_mce;
1202+
fam_ops.mc0_mce = f10h_mc0_mce;
1203+
fam_ops.mc1_mce = k8_mc1_mce;
1204+
fam_ops.mc2_mce = k8_mc2_mce;
12081205
break;
12091206

12101207
case 0x11:
1211-
fam_ops->mc0_mce = k8_mc0_mce;
1212-
fam_ops->mc1_mce = k8_mc1_mce;
1213-
fam_ops->mc2_mce = k8_mc2_mce;
1208+
fam_ops.mc0_mce = k8_mc0_mce;
1209+
fam_ops.mc1_mce = k8_mc1_mce;
1210+
fam_ops.mc2_mce = k8_mc2_mce;
12141211
break;
12151212

12161213
case 0x12:
1217-
fam_ops->mc0_mce = f12h_mc0_mce;
1218-
fam_ops->mc1_mce = k8_mc1_mce;
1219-
fam_ops->mc2_mce = k8_mc2_mce;
1214+
fam_ops.mc0_mce = f12h_mc0_mce;
1215+
fam_ops.mc1_mce = k8_mc1_mce;
1216+
fam_ops.mc2_mce = k8_mc2_mce;
12201217
break;
12211218

12221219
case 0x14:
1223-
fam_ops->mc0_mce = cat_mc0_mce;
1224-
fam_ops->mc1_mce = cat_mc1_mce;
1225-
fam_ops->mc2_mce = k8_mc2_mce;
1220+
fam_ops.mc0_mce = cat_mc0_mce;
1221+
fam_ops.mc1_mce = cat_mc1_mce;
1222+
fam_ops.mc2_mce = k8_mc2_mce;
12261223
break;
12271224

12281225
case 0x15:
12291226
xec_mask = c->x86_model == 0x60 ? 0x3f : 0x1f;
12301227

1231-
fam_ops->mc0_mce = f15h_mc0_mce;
1232-
fam_ops->mc1_mce = f15h_mc1_mce;
1233-
fam_ops->mc2_mce = f15h_mc2_mce;
1228+
fam_ops.mc0_mce = f15h_mc0_mce;
1229+
fam_ops.mc1_mce = f15h_mc1_mce;
1230+
fam_ops.mc2_mce = f15h_mc2_mce;
12341231
break;
12351232

12361233
case 0x16:
12371234
xec_mask = 0x1f;
1238-
fam_ops->mc0_mce = cat_mc0_mce;
1239-
fam_ops->mc1_mce = cat_mc1_mce;
1240-
fam_ops->mc2_mce = f16h_mc2_mce;
1235+
fam_ops.mc0_mce = cat_mc0_mce;
1236+
fam_ops.mc1_mce = cat_mc1_mce;
1237+
fam_ops.mc2_mce = f16h_mc2_mce;
12411238
break;
12421239

12431240
case 0x17:
12441241
case 0x18:
12451242
pr_warn("Decoding supported only on Scalable MCA processors.\n");
1246-
goto err_out;
1247-
break;
1243+
return -EINVAL;
12481244

12491245
default:
12501246
printk(KERN_WARNING "Huh? What family is it: 0x%x?!\n", c->x86);
1251-
goto err_out;
1247+
return -EINVAL;
12521248
}
12531249

12541250
out:
@@ -1257,19 +1253,13 @@ static int __init mce_amd_init(void)
12571253
mce_register_decode_chain(&amd_mce_dec_nb);
12581254

12591255
return 0;
1260-
1261-
err_out:
1262-
kfree(fam_ops);
1263-
fam_ops = NULL;
1264-
return -EINVAL;
12651256
}
12661257
early_initcall(mce_amd_init);
12671258

12681259
#ifdef MODULE
12691260
static void __exit mce_amd_exit(void)
12701261
{
12711262
mce_unregister_decode_chain(&amd_mce_dec_nb);
1272-
kfree(fam_ops);
12731263
}
12741264

12751265
MODULE_DESCRIPTION("AMD MCE decoder");

0 commit comments

Comments
 (0)