Messages in this thread Patch in this message |  | | | Date | Wed, 6 Jun 2012 16:15:36 +0200 (CEST) | | From | Thomas Gleixner <> | | Subject | Re: [patch 2/2] x86: mce: Implement cmci poll mode for intel machines |
| |
On Wed, 6 Jun 2012, Chen Gong wrote: > 于 2012/6/6 18:23, Thomas Gleixner 写道: > I think you mean > > - del_timer_sync(t); > smp_call_function_single(cpu, mce_disable_cpu, &action, 1); > + del_timer_sync(t); > break;
No I meant it the way I wrote, but as you don't execute hotplug it's irrelevant.
So the obvious candidate is the mce-injection code, which was obviously never tested with DEBUG_PREEMPT enabled.
raise_local() can be called with preemption enabled from raise_mce(). Fix for that below.
Though I can't see how that would do anything with the timer.
Another thing in that mce injection code is that there is no protection against concurrent writes, except when the device was opened with O_EXCL, but what guarantees that ?
Thanks,
tglx
Index: tip/arch/x86/kernel/cpu/mcheck/mce-inject.c =================================================================== --- tip.orig/arch/x86/kernel/cpu/mcheck/mce-inject.c +++ tip/arch/x86/kernel/cpu/mcheck/mce-inject.c @@ -194,7 +194,11 @@ static void raise_mce(struct mce *m) put_online_cpus(); } else #endif + { + preempt_disable(); raise_local(); + preempt_enable(); + } } /* Error injection interface */ |  |