From: John Jacques <[email protected]> By default it is on (1). To turn off logging, add lsi-smmon.log=0 to bootargs or "cat 0 > /sys/module/lsi_smmon/parameters/log".
Signed-off-by: John Jacques <[email protected]> --- drivers/misc/lsi-smmon.c | 48 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/drivers/misc/lsi-smmon.c b/drivers/misc/lsi-smmon.c index 6b57ca9..5e859db 100644 --- a/drivers/misc/lsi-smmon.c +++ b/drivers/misc/lsi-smmon.c @@ -11,6 +11,8 @@ #include <linux/kernel.h> #include <linux/module.h> +#include <linux/moduleparam.h> +#include <linux/init.h> #include <linux/interrupt.h> #include <linux/spinlock.h> #include <linux/proc_fs.h> @@ -21,6 +23,10 @@ #error "Only AXM55xx is Supported At Present!" #endif +static int log=1; +module_param(log, int, 0755); +MODULE_PARM_DESC(log, "Log each error on the console."); + /* AXM55xx Interrupt Status Bits @@ -116,7 +122,8 @@ static irqreturn_t smmon_isr(int interrupt, void *device) spin_lock(&counts_lock); if (0 != (0x00000002 & status) || 0 != (0x00000004 & status)) - printk(KERN_CRIT "smmon(%d): Illegal Access!\n", sm); + printk(KERN_ERR + "smmon(%d): Illegal Access!\n", sm); if (0 != (0x00000002 & status)) ++counts.illegal_access[sm]; @@ -124,8 +131,11 @@ static irqreturn_t smmon_isr(int interrupt, void *device) if (0 != (0x00000004 & status)) ++counts.multiple_illegal_access[sm]; - if (0 != (0x00000008 & status) || 0 != (0x00000010 & status)) - printk(KERN_NOTICE "smmon(%d): Correctable ECC Error!\n", sm); + if ((0 != (0x00000008 & status) || + 0 != (0x00000010 & status)) && + 0 != log) + printk(KERN_NOTICE + "smmon(%d): Correctable ECC Error!\n", sm); if (0 != (0x00000008 & status)) ++counts.correctable_ecc[sm]; @@ -133,8 +143,11 @@ static irqreturn_t smmon_isr(int interrupt, void *device) if (0 != (0x00000010 & status)) ++counts.multiple_correctable_ecc[sm]; - if (0 != (0x00000020 & status) || 0 != (0x00000040 & status)) - printk(KERN_CRIT "smmon(%d): Uncorrectable ECC Error!\n", sm); + if ((0 != (0x00000020 & status) || + 0 != (0x00000040 & status)) && + 0 != log) + printk(KERN_CRIT + "smmon(%d): Uncorrectable ECC Error!\n", sm); if (0 != (0x00000020 & status)) ++counts.uncorrectable_ecc[sm]; @@ -144,17 +157,26 @@ static irqreturn_t smmon_isr(int interrupt, void *device) if (0 != (0x00000080 & status)) { ++counts.port_error[sm]; - printk(KERN_CRIT "smmon(%d): Port Error!\n", sm); + + if (0 != log) + printk(KERN_CRIT + "smmon(%d): Port Error!\n", sm); } if (0 != (0x00000800 & status)) { ++counts.wrap_error[sm]; - printk(KERN_CRIT "smmon(%d): Wrap Error!\n", sm); + + if (0 != log) + printk(KERN_CRIT + "smmon(%d): Wrap Error!\n", sm); } if (0 != (0x00080000 & status)) { ++counts.parity_error[sm]; - printk(KERN_CRIT "smmon(%d): Parity Error!\n", sm); + + if (0 != log) + printk(KERN_CRIT + "smmon(%d): Parity Error!\n", sm); } spin_unlock(&counts_lock); @@ -179,6 +201,7 @@ smmon_read_proc(char *page, char **start, off_t offset, int count, spin_lock_irqsave(&counts_lock, flags); length = sprintf(page, + "------------ Counts for SM0/SM1 ----------\n" " Illegal Access: %lu/%lu\n" " Multiple Illegal Accesses: %lu/%lu\n" " Correctable ECC Error: %lu/%lu\n" @@ -230,12 +253,13 @@ static int __init smmon_init(void) { int rc; + printk("smmon: log=%d\n", log); create_proc_read_entry("smmon", 0, NULL, smmon_read_proc, NULL); - memset(&counts, 0, sizeof(struct smmon_counts)); - - rc = request_irq(32 + 161, smmon_isr, IRQF_ONESHOT, "smmon_0", NULL); - rc |= request_irq(32 + 160, smmon_isr, IRQF_ONESHOT, "smmon_1", NULL); + rc = request_irq(32 + 161, smmon_isr, IRQF_ONESHOT, + "smmon_0", NULL); + rc |= request_irq(32 + 160, smmon_isr, IRQF_ONESHOT, + "smmon_1", NULL); if (0 != rc) { printk(KERN_ERR "smmon: Couldn't connect interrupt handler!\n"); -- 1.7.9.5 -- _______________________________________________ linux-yocto mailing list [email protected] https://lists.yoctoproject.org/listinfo/linux-yocto
