[PATCH] x86_64: increase MCE bank counts
authorShaohua Li <shaohua.li@intel.com>
Wed, 11 Jan 2006 21:43:06 +0000 (22:43 +0100)
committerLinus Torvalds <torvalds@g5.osdl.org>
Thu, 12 Jan 2006 03:01:57 +0000 (19:01 -0800)
There is one CPU here whose MCE bank count is 6. This patch increases
x86_64's MCE bank count.

Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/x86_64/kernel/mce.c

index 63777b8cb8c1fb4b626f42cbb797fdf99bf55044..281ad5f1f86a4dfc1eff9c8e250cacd9b168e004 100644 (file)
@@ -26,7 +26,7 @@
 #include <asm/uaccess.h>
 
 #define MISC_MCELOG_MINOR 227
-#define NR_BANKS 5
+#define NR_BANKS 6
 
 static int mce_dont_init;
 
@@ -574,6 +574,10 @@ ACCESSOR(bank1ctl,bank[1],mce_restart())
 ACCESSOR(bank2ctl,bank[2],mce_restart())
 ACCESSOR(bank3ctl,bank[3],mce_restart())
 ACCESSOR(bank4ctl,bank[4],mce_restart())
+ACCESSOR(bank5ctl,bank[5],mce_restart())
+static struct sysdev_attribute * bank_attributes[NR_BANKS] = {
+       &attr_bank0ctl, &attr_bank1ctl, &attr_bank2ctl,
+       &attr_bank3ctl, &attr_bank4ctl, &attr_bank5ctl};
 ACCESSOR(tolerant,tolerant,)
 ACCESSOR(check_interval,check_interval,mce_restart())
 
@@ -581,6 +585,7 @@ ACCESSOR(check_interval,check_interval,mce_restart())
 static __cpuinit int mce_create_device(unsigned int cpu)
 {
        int err;
+       int i;
        if (!mce_available(&cpu_data[cpu]))
                return -EIO;
 
@@ -590,11 +595,9 @@ static __cpuinit int mce_create_device(unsigned int cpu)
        err = sysdev_register(&per_cpu(device_mce,cpu));
 
        if (!err) {
-               sysdev_create_file(&per_cpu(device_mce,cpu), &attr_bank0ctl);
-               sysdev_create_file(&per_cpu(device_mce,cpu), &attr_bank1ctl);
-               sysdev_create_file(&per_cpu(device_mce,cpu), &attr_bank2ctl);
-               sysdev_create_file(&per_cpu(device_mce,cpu), &attr_bank3ctl);
-               sysdev_create_file(&per_cpu(device_mce,cpu), &attr_bank4ctl);
+               for (i = 0; i < banks; i++)
+                       sysdev_create_file(&per_cpu(device_mce,cpu),
+                               bank_attributes[i]);
                sysdev_create_file(&per_cpu(device_mce,cpu), &attr_tolerant);
                sysdev_create_file(&per_cpu(device_mce,cpu), &attr_check_interval);
        }
@@ -604,11 +607,11 @@ static __cpuinit int mce_create_device(unsigned int cpu)
 #ifdef CONFIG_HOTPLUG_CPU
 static __cpuinit void mce_remove_device(unsigned int cpu)
 {
-       sysdev_remove_file(&per_cpu(device_mce,cpu), &attr_bank0ctl);
-       sysdev_remove_file(&per_cpu(device_mce,cpu), &attr_bank1ctl);
-       sysdev_remove_file(&per_cpu(device_mce,cpu), &attr_bank2ctl);
-       sysdev_remove_file(&per_cpu(device_mce,cpu), &attr_bank3ctl);
-       sysdev_remove_file(&per_cpu(device_mce,cpu), &attr_bank4ctl);
+       int i;
+
+       for (i = 0; i < banks; i++)
+               sysdev_remove_file(&per_cpu(device_mce,cpu),
+                       bank_attributes[i]);
        sysdev_remove_file(&per_cpu(device_mce,cpu), &attr_tolerant);
        sysdev_remove_file(&per_cpu(device_mce,cpu), &attr_check_interval);
        sysdev_unregister(&per_cpu(device_mce,cpu));