diff options
Diffstat (limited to 'mce2.patch')
| -rw-r--r-- | mce2.patch | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/mce2.patch b/mce2.patch new file mode 100644 index 00000000000000..1a6cdf38c016e7 --- /dev/null +++ b/mce2.patch @@ -0,0 +1,110 @@ +From foo@baz Thu Jan 26 15:46:52 PST 2012 +Date: Thu, 26 Jan 2012 15:46:52 -0800 +To: Greg KH <greg@kroah.com> +From: Greg Kroah-Hartman <gregkh@suse.de> +Subject: MCE: convert static array of pointers to per-cpu variables + +When I previously fixed up the mce_device code, I used a static array of +the pointers. It was (rightfully) pointed out to me that I should be +using the per_cpu code instead. + +This patch converts the code over to that structure, moving the variable +back into the per_cpu area, like it used to be for 3.2 and earlier. + + +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h +index 6aefb14..441520e 100644 +--- a/arch/x86/include/asm/mce.h ++++ b/arch/x86/include/asm/mce.h +@@ -151,7 +151,7 @@ static inline void enable_p5_mce(void) {} + + void mce_setup(struct mce *m); + void mce_log(struct mce *m); +-extern struct device *mce_device[CONFIG_NR_CPUS]; ++DECLARE_PER_CPU(struct device *, mce_device); + + /* + * Maximum banks number. +diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c +index 5a11ae2..4979a5d 100644 +--- a/arch/x86/kernel/cpu/mcheck/mce.c ++++ b/arch/x86/kernel/cpu/mcheck/mce.c +@@ -1859,7 +1859,7 @@ static struct bus_type mce_subsys = { + .dev_name = "machinecheck", + }; + +-struct device *mce_device[CONFIG_NR_CPUS]; ++DEFINE_PER_CPU(struct device *, mce_device); + + __cpuinitdata + void (*threshold_cpu_callback)(unsigned long action, unsigned int cpu); +@@ -2038,7 +2038,7 @@ static __cpuinit int mce_device_create(unsigned int cpu) + goto error2; + } + cpumask_set_cpu(cpu, mce_device_initialized); +- mce_device[cpu] = dev; ++ per_cpu(mce_device, cpu) = dev; + + return 0; + error2: +@@ -2055,7 +2055,7 @@ error: + + static __cpuinit void mce_device_remove(unsigned int cpu) + { +- struct device *dev = mce_device[cpu]; ++ struct device *dev = per_cpu(mce_device, cpu); + int i; + + if (!cpumask_test_cpu(cpu, mce_device_initialized)) +@@ -2069,7 +2069,7 @@ static __cpuinit void mce_device_remove(unsigned int cpu) + + device_unregister(dev); + cpumask_clear_cpu(cpu, mce_device_initialized); +- mce_device[cpu] = NULL; ++ per_cpu(mce_device, cpu) = NULL; + } + + /* Make sure there are no machine checks on offlined CPUs. */ +diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c +index 786e76a..a4bf9d2 100644 +--- a/arch/x86/kernel/cpu/mcheck/mce_amd.c ++++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c +@@ -523,7 +523,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank) + { + int i, err = 0; + struct threshold_bank *b = NULL; +- struct device *dev = mce_device[cpu]; ++ struct device *dev = per_cpu(mce_device, cpu); + char name[32]; + + sprintf(name, "threshold_bank%i", bank); +@@ -585,7 +585,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank) + if (i == cpu) + continue; + +- dev = mce_device[i]; ++ dev = per_cpu(mce_device, i); + if (dev) + err = sysfs_create_link(&dev->kobj,b->kobj, name); + if (err) +@@ -665,7 +665,8 @@ static void threshold_remove_bank(unsigned int cpu, int bank) + #ifdef CONFIG_SMP + /* sibling symlink */ + if (shared_bank[bank] && b->blocks->cpu != cpu) { +- sysfs_remove_link(&mce_device[cpu]->kobj, name); ++ dev = per_cpu(mce_device, cpu); ++ sysfs_remove_link(&dev->kobj, name); + per_cpu(threshold_banks, cpu)[bank] = NULL; + + return; +@@ -677,7 +678,7 @@ static void threshold_remove_bank(unsigned int cpu, int bank) + if (i == cpu) + continue; + +- dev = mce_device[i]; ++ dev = per_cpu(mce_device, i); + if (dev) + sysfs_remove_link(&dev->kobj, name); + per_cpu(threshold_banks, i)[bank] = NULL; |
