Messages in this thread | | | Date | Mon, 18 Jun 2012 14:42:36 +0800 | From | Chen Gong <> | Subject | Re: [PATCH] tmp patch to fix hotplug issue in CMCI storm |
| |
[...] > > So according to your explanation that would cause the cmci vector to > be broadcasted to CPU0 as well. Now that would cause the counter to > get a bogus increment, right ? > > So instead of hacking insane crap into the code, we have simply to do > the obvious Right Thing: > > Index: linux-2.6/arch/x86/kernel/cpu/mcheck/mce_intel.c > =================================================================== > --- linux-2.6.orig/arch/x86/kernel/cpu/mcheck/mce_intel.c > +++ linux-2.6/arch/x86/kernel/cpu/mcheck/mce_intel.c > @@ -119,6 +119,9 @@ static bool cmci_storm_detect(void) > unsigned long ts = __this_cpu_read(cmci_time_stamp); > unsigned long now = jiffies; > > + if (__this_cpu_read(cmci_storm_state) != CMCI_STORM_NONE) > + return true; > + > if (time_before_eq(now, ts + CMCI_STORM_INTERVAL)) { > cnt++; > } else { > > That will prevent damage under all circumstances, cpu hotplug > included. > > But that's too simple and comprehensible I fear. >
Oh, yes, your suggestion can simplify my logic, but not all. Obviously, when hotplug is happened, it can be considered quitting CMCI storm in another way, so the corresponding counter and status should be decreased from that path. And in my original patch, I defined three status:
enum { CMCI_STORM_HCPU_NONE, CMCI_STORM_HCPU_ACTIVE, CMCI_STORM_HCPU_SUBSIDED, };
I use CMCI_STORM_HCPU_SUBSIDED to descirbe stalled CPU in hotplug progressI to stop CMCI enable during whole hotplog status, but according to your suggestion, now the CMCI_STORM_HCPU_SUBSIDED can be removed (FIXME: because CMCI can be enabled, if CPU offline and then online again during CMCI storm, it will enter CMCI storm status right now. It can simplify the logic, but a little bit performance degradation).
I will send the 2nd patch based on previous 5 patches in a separate mail.
| |