[PATCH 2/3] X86, MCE, AMD: Adjust initcall sequence for xen

From: Liu , Jinsong
Date: Thu May 31 2012 - 20:30:21 EST


there are 3 funcs which need to be _initcalled in a logic sequence:
1. xen_late_init_mcelog
2. mcheck_init_device
3. threshold_init_device

xen_late_init_mcelog must register xen_mce_chrdev_device before
native mce_chrdev_device registration if running under xen platform;

mcheck_init_device should be inited before threshold_init_device to
initialize mce_device, otherwise a NULL ptr dereference will cause panic.

so we use following _initcalls
1. device_initcall(xen_late_init_mcelog);
2. device_initcall_sync(mcheck_init_device);
3. late_initcall(threshold_init_device);

when running under xen, the initcall order is 1,2,3;
on baremetal, we skip 1 and we do only 2 and 3.

Reported-by: Borislav Petkov <bp@xxxxxxxxx>
Suggested-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Acked-and-tested-by: Borislav Petkov <borislav.petkov@xxxxxxx>
Signed-off-by: Liu, Jinsong <jinsong.liu@xxxxxxxxx>
---
arch/x86/kernel/cpu/mcheck/mce_amd.c | 22 +++++++++++++++++++++-
1 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mch=
eck/mce_amd.c
index f4873a6..be52744 100644
--- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
+++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
@@ -777,4 +777,24 @@ static __init int threshold_init_device(void)
=20
return 0;
}
-device_initcall(threshold_init_device);
+/*
+ * there are 3 funcs which need to be _initcalled in a logic sequence:
+ * 1. xen_late_init_mcelog
+ * 2. mcheck_init_device
+ * 3. threshold_init_device
+ *
+ * xen_late_init_mcelog must register xen_mce_chrdev_device before
+ * native mce_chrdev_device registration if running under xen platform;
+ *
+ * mcheck_init_device should be inited before threshold_init_device to
+ * initialize mce_device, otherwise a NULL ptr dereference will cause pani=
c.
+ *
+ * so we use following _initcalls
+ * 1. device_initcall(xen_late_init_mcelog);
+ * 2. device_initcall_sync(mcheck_init_device);
+ * 3. late_initcall(threshold_init_device);
+ *
+ * when running under xen, the initcall order is 1,2,3;
+ * on baremetal, we skip 1 and we do only 2 and 3.
+ */
+late_initcall(threshold_init_device);
--=20
1.7.1

--_002_DE8DF0795D48FD4CA783C40EC82923351FFB5FSHSMSX101ccrcorpi_
Content-Type: application/octet-stream;
name="0002-X86-MCE-AMD-Adjust-initcall-sequence-for-xen.patch"
Content-Description: 0002-X86-MCE-AMD-Adjust-initcall-sequence-for-xen.patch
Content-Disposition: attachment;
filename="0002-X86-MCE-AMD-Adjust-initcall-sequence-for-xen.patch";
size=2379; creation-date="Thu, 31 May 2012 17:10:05 GMT";
modification-date="Fri, 01 Jun 2012 00:43:22 GMT"
Content-Transfer-Encoding: base64

RnJvbSBiZDE0ZTBiMWYwYmY0NTg2ZDAzY2MxZmM4MTA2MDZkMmVmMmMxMDc2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMaXUsIEppbnNvbmcgPGppbnNvbmcubGl1QGludGVsLmNvbT4K
RGF0ZTogRnJpLCAxIEp1biAyMDEyIDA4OjMwOjIxICswODAwClN1YmplY3Q6IFtQQVRDSCAyLzNd
IFg4NiwgTUNFLCBBTUQ6IEFkanVzdCBpbml0Y2FsbCBzZXF1ZW5jZSBmb3IgeGVuCgp0aGVyZSBh
cmUgMyBmdW5jcyB3aGljaCBuZWVkIHRvIGJlIF9pbml0Y2FsbGVkIGluIGEgbG9naWMgc2VxdWVu
Y2U6CjEuIHhlbl9sYXRlX2luaXRfbWNlbG9nCjIuIG1jaGVja19pbml0X2RldmljZQozLiB0aHJl
c2hvbGRfaW5pdF9kZXZpY2UKCnhlbl9sYXRlX2luaXRfbWNlbG9nIG11c3QgcmVnaXN0ZXIgeGVu
X21jZV9jaHJkZXZfZGV2aWNlIGJlZm9yZQpuYXRpdmUgbWNlX2NocmRldl9kZXZpY2UgcmVnaXN0
cmF0aW9uIGlmIHJ1bm5pbmcgdW5kZXIgeGVuIHBsYXRmb3JtOwoKbWNoZWNrX2luaXRfZGV2aWNl
IHNob3VsZCBiZSBpbml0ZWQgYmVmb3JlIHRocmVzaG9sZF9pbml0X2RldmljZSB0bwppbml0aWFs
aXplIG1jZV9kZXZpY2UsIG90aGVyd2lzZSBhIE5VTEwgcHRyIGRlcmVmZXJlbmNlIHdpbGwgY2F1
c2UgcGFuaWMuCgpzbyB3ZSB1c2UgZm9sbG93aW5nIF9pbml0Y2FsbHMKMS4gZGV2aWNlX2luaXRj
YWxsKHhlbl9sYXRlX2luaXRfbWNlbG9nKTsKMi4gZGV2aWNlX2luaXRjYWxsX3N5bmMobWNoZWNr
X2luaXRfZGV2aWNlKTsKMy4gbGF0ZV9pbml0Y2FsbCh0aHJlc2hvbGRfaW5pdF9kZXZpY2UpOwoK
d2hlbiBydW5uaW5nIHVuZGVyIHhlbiwgdGhlIGluaXRjYWxsIG9yZGVyIGlzIDEsMiwzOwpvbiBi
YXJlbWV0YWwsIHdlIHNraXAgMSBhbmQgd2UgZG8gb25seSAyIGFuZCAzLgoKUmVwb3J0ZWQtYnk6
IEJvcmlzbGF2IFBldGtvdiA8YnBAYW1kNjQub3JnPgpTdWdnZXN0ZWQtYnk6IEtvbnJhZCBSemVz
enV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KQWNrZWQtYW5kLXRlc3RlZC1ieTog
Qm9yaXNsYXYgUGV0a292IDxib3Jpc2xhdi5wZXRrb3ZAYW1kLmNvbT4KU2lnbmVkLW9mZi1ieTog
TGl1LCBKaW5zb25nIDxqaW5zb25nLmxpdUBpbnRlbC5jb20+Ci0tLQogYXJjaC94ODYva2VybmVs
L2NwdS9tY2hlY2svbWNlX2FtZC5jIHwgICAyMiArKysrKysrKysrKysrKysrKysrKystCiAxIGZp
bGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0
IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jIGIvYXJjaC94ODYva2VybmVs
L2NwdS9tY2hlY2svbWNlX2FtZC5jCmluZGV4IGY0ODczYTYuLmJlNTI3NDQgMTAwNjQ0Ci0tLSBh
L2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJu
ZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKQEAgLTc3Nyw0ICs3NzcsMjQgQEAgc3RhdGljIF9faW5p
dCBpbnQgdGhyZXNob2xkX2luaXRfZGV2aWNlKHZvaWQpCiAKIAlyZXR1cm4gMDsKIH0KLWRldmlj
ZV9pbml0Y2FsbCh0aHJlc2hvbGRfaW5pdF9kZXZpY2UpOworLyoKKyAqIHRoZXJlIGFyZSAzIGZ1
bmNzIHdoaWNoIG5lZWQgdG8gYmUgX2luaXRjYWxsZWQgaW4gYSBsb2dpYyBzZXF1ZW5jZToKKyAq
IDEuIHhlbl9sYXRlX2luaXRfbWNlbG9nCisgKiAyLiBtY2hlY2tfaW5pdF9kZXZpY2UKKyAqIDMu
IHRocmVzaG9sZF9pbml0X2RldmljZQorICoKKyAqIHhlbl9sYXRlX2luaXRfbWNlbG9nIG11c3Qg
cmVnaXN0ZXIgeGVuX21jZV9jaHJkZXZfZGV2aWNlIGJlZm9yZQorICogbmF0aXZlIG1jZV9jaHJk
ZXZfZGV2aWNlIHJlZ2lzdHJhdGlvbiBpZiBydW5uaW5nIHVuZGVyIHhlbiBwbGF0Zm9ybTsKKyAq
CisgKiBtY2hlY2tfaW5pdF9kZXZpY2Ugc2hvdWxkIGJlIGluaXRlZCBiZWZvcmUgdGhyZXNob2xk
X2luaXRfZGV2aWNlIHRvCisgKiBpbml0aWFsaXplIG1jZV9kZXZpY2UsIG90aGVyd2lzZSBhIE5V
TEwgcHRyIGRlcmVmZXJlbmNlIHdpbGwgY2F1c2UgcGFuaWMuCisgKgorICogc28gd2UgdXNlIGZv
bGxvd2luZyBfaW5pdGNhbGxzCisgKiAxLiBkZXZpY2VfaW5pdGNhbGwoeGVuX2xhdGVfaW5pdF9t
Y2Vsb2cpOworICogMi4gZGV2aWNlX2luaXRjYWxsX3N5bmMobWNoZWNrX2luaXRfZGV2aWNlKTsK
KyAqIDMuIGxhdGVfaW5pdGNhbGwodGhyZXNob2xkX2luaXRfZGV2aWNlKTsKKyAqCisgKiB3aGVu
IHJ1bm5pbmcgdW5kZXIgeGVuLCB0aGUgaW5pdGNhbGwgb3JkZXIgaXMgMSwyLDM7CisgKiBvbiBi
YXJlbWV0YWwsIHdlIHNraXAgMSBhbmQgd2UgZG8gb25seSAyIGFuZCAzLgorICovCitsYXRlX2lu
aXRjYWxsKHRocmVzaG9sZF9pbml0X2RldmljZSk7Ci0tIAoxLjcuMQoK

--_002_DE8DF0795D48FD4CA783C40EC82923351FFB5FSHSMSX101ccrcorpi_--
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/