Skip to content

Commit bf72f5d

Browse files
author
H. Peter Anvin
committed
x86: Merge tag 'ras_urgent' into x86/urgent
Promote one fix for 3.16 This fix was necessary after 9c15a24 ("x86/mce: Improve mcheck_init_device() error handling") went in. What this patch did was, among others, check the return value of misc_register and exit early if it encountered an error. Original code sloppily didn't do that. However, cef12ee ("xen/mce: Add mcelog support for Xen platform") made it so that xen's init routine xen_late_init_mcelog runs first. This was needed for the xen mcelog device which is supposed to be independent from the baremetal one. Initially it was reported that misc_register() fails often on xen and that's why it needed fixing. However, it is *supposed* to fail by design, when running in dom0 so that the xen mcelog device file gets registered first. And *then* you need the notifier *not* unregistered on the error path so that the timer does get deleted properly in the CPU hotplug notifier. Btw, this fix is needed also on baremetal in the unlikely event that misc_register(&mce_chrdev_device) fails there too. I was unsure whether to rush it in now and decided to delay it to 3.17. However, xen people wanted it promoted as it breaks xen when doing cpu hotplug there. So, after a bit of simmering in tip/master for initial smoke testing, let's move it to 3.16. It fixes a semi-regression which got introduced in 3.16 so no need for stable tagging. tip/x86/ras contains that exact same commit but we can't remove it there as it is not the last one. It won't cause any merge issues, as I confirmed locally but I should state here the special situation of this one fix explicitly anyway. Thanks. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2 parents 2a22615 + 51cbe7e commit bf72f5d

File tree

1 file changed

+6
-4
lines changed
  • arch/x86/kernel/cpu/mcheck

1 file changed

+6
-4
lines changed

arch/x86/kernel/cpu/mcheck/mce.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2451,6 +2451,12 @@ static __init int mcheck_init_device(void)
24512451
for_each_online_cpu(i) {
24522452
err = mce_device_create(i);
24532453
if (err) {
2454+
/*
2455+
* Register notifier anyway (and do not unreg it) so
2456+
* that we don't leave undeleted timers, see notifier
2457+
* callback above.
2458+
*/
2459+
__register_hotcpu_notifier(&mce_cpu_notifier);
24542460
cpu_notifier_register_done();
24552461
goto err_device_create;
24562462
}
@@ -2471,10 +2477,6 @@ static __init int mcheck_init_device(void)
24712477
err_register:
24722478
unregister_syscore_ops(&mce_syscore_ops);
24732479

2474-
cpu_notifier_register_begin();
2475-
__unregister_hotcpu_notifier(&mce_cpu_notifier);
2476-
cpu_notifier_register_done();
2477-
24782480
err_device_create:
24792481
/*
24802482
* We didn't keep track of which devices were created above, but

0 commit comments

Comments
 (0)