[PATCH 2/6] x86: Limit the number of per cpu MCE bootup messages

Mike Travis
2009-11-16T21:07:33Z

[-- Attachment #1: limit_mce_messages --]
[-- Type: text/plain, Size: 2496 bytes --]

Limit the number of per cpu MCE messages by using pr_debug.
This prevents filling up the console output with repetitious
messages when the number of cpus is large.

Remove the need for KERN_CONT so it does not add an extraneous
newline in the booting cpu sequence.

Signed-off-by: Mike Travis <travis@sgi.com>
---
arch/x86/kernel/cpu/mcheck/mce.c | 4 ++--
arch/x86/kernel/cpu/mcheck/mce_intel.c | 20 ++++++++++++--------
2 files changed, 14 insertions(+), 10 deletions(-)

--- linux.orig/arch/x86/kernel/cpu/mcheck/mce.c
+++ linux/arch/x86/kernel/cpu/mcheck/mce.c
@@ -1215,10 +1215,10 @@

b = cap & MCG_BANKCNT_MASK;
if (!banks)
- printk(KERN_INFO "mce: CPU supports %d MCE banks\n", b);
+ pr_debug("mce: CPU supports %d MCE banks\n", b);

if (b > MAX_NR_BANKS) {
- printk(KERN_WARNING
+ pr_warning(
"MCE: Using only %u machine check banks out of %u\n",
MAX_NR_BANKS, b);
b = MAX_NR_BANKS;
--- linux.orig/arch/x86/kernel/cpu/mcheck/mce_intel.c
+++ linux/arch/x86/kernel/cpu/mcheck/mce_intel.c
@@ -64,12 +64,15 @@
mce_notify_irq();
}

-static void print_update(char *type, int *hdr, int num)
+static void print_update(char *type, int *hdr, int num, char *buf, int len)
{
- if (*hdr == 0)
- printk(KERN_INFO "CPU %d MCA banks", smp_processor_id());
- *hdr = 1;
- printk(KERN_CONT " %s:%d", type, num);
+ int n = *hdr;
+
+ if (n == 0)
+ n = snprintf(buf, len, "CPU %d MCA banks", smp_processor_id());
+
+ n += snprintf(&buf[n], len - n, " %s:%d", type, num);
+ *hdr = n;
}

/*
@@ -83,6 +86,7 @@
unsigned long flags;
int hdr = 0;
int i;
+ char buf[120];

spin_lock_irqsave(&cmci_discover_lock, flags);
for (i = 0; i < banks; i++) {
@@ -96,7 +100,7 @@
/* Already owned by someone else? */
if (val & CMCI_EN) {
if (test_and_clear_bit(i, owned) || boot)
- print_update("SHD", &hdr, i);
+ print_update("SHD", &hdr, i, buf, sizeof(buf));
__clear_bit(i, __get_cpu_var(mce_poll_banks));
continue;
}
@@ -108,7 +112,7 @@
/* Did the enable bit stick? -- the bank supports CMCI */
if (val & CMCI_EN) {
if (!test_and_set_bit(i, owned) || boot)
- print_update("CMCI", &hdr, i);
+ print_update("CMCI", &hdr, i, buf, sizeof(buf));
__clear_bit(i, __get_cpu_var(mce_poll_banks));
} else {
WARN_ON(!test_bit(i, __get_cpu_var(mce_poll_banks)));
@@ -116,7 +120,7 @@
}
spin_unlock_irqrestore(&cmci_discover_lock, flags);
if (hdr)
- printk(KERN_CONT "\n");
+ pr_debug("%s\n", buf);
}

/*

--