[linux-yocto] [PATCH 12/17] misc: lsi-smmon: Add parameter panic_on_fatal
From: Anders Berg anders.b...@avagotech.com Added module parameter panic_on_fatal which when set will cause the driver to call panic() when an uncorrectable ECC error is detected. Signed-off-by: Anders Berg anders.b...@avagotech.com --- drivers/misc/lsi-smmon.c | 27 ++- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/misc/lsi-smmon.c b/drivers/misc/lsi-smmon.c index d263df9..88f291a 100644 --- a/drivers/misc/lsi-smmon.c +++ b/drivers/misc/lsi-smmon.c @@ -24,6 +24,10 @@ static int log = 1; module_param(log, int, S_IRUGO|S_IWUSR); MODULE_PARM_DESC(log, Log each error to kernel log.); +static int panic_on_fatal = 1; +module_param(panic_on_fatal, int, S_IRUGO|S_IWUSR); +MODULE_PARM_DESC(panic_on_fatal, Panic on fatal error.); + /* AXM55xx memory controller interrupt status bits: @@ -96,18 +100,19 @@ static const u32 event_mask[NR_EVENTS] = { }; static const struct event_logging { + int fatal; const char *level; const char *name; } event_logging[NR_EVENTS] = { - [EV_ILLEGAL] = {KERN_ERR, Illegal access}, - [EV_MULT_ILLEGAL]= {KERN_ERR, Illegal access}, - [EV_CORR_ECC]= {KERN_NOTICE, Correctable ECC error}, - [EV_MULT_CORR_ECC] = {KERN_NOTICE, Correctable ECC error}, - [EV_UNCORR_ECC] = {KERN_CRIT, Uncorrectable ECC error}, - [EV_MULT_UNCORR_ECC] = {KERN_CRIT, Uncorrectable ECC error}, - [EV_PORT_ERROR] = {KERN_CRIT, Port error}, - [EV_WRAP_ERROR] = {KERN_CRIT, Wrap error}, - [EV_PARITY_ERROR]= {KERN_CRIT, Parity error}, + [EV_ILLEGAL] = {0, KERN_ERR, Illegal access}, + [EV_MULT_ILLEGAL]= {0, KERN_ERR, Illegal access}, + [EV_CORR_ECC]= {0, KERN_NOTICE, Correctable ECC error}, + [EV_MULT_CORR_ECC] = {0, KERN_NOTICE, Correctable ECC error}, + [EV_UNCORR_ECC] = {1, KERN_CRIT, Uncorrectable ECC error}, + [EV_MULT_UNCORR_ECC] = {1, KERN_CRIT, Uncorrectable ECC error}, + [EV_PORT_ERROR] = {0, KERN_CRIT, Port error}, + [EV_WRAP_ERROR] = {0, KERN_CRIT, Wrap error}, + [EV_PARITY_ERROR]= {0, KERN_CRIT, Parity error}, }; struct smmon_attr { @@ -181,6 +186,10 @@ static irqreturn_t smmon_isr(int interrupt, void *device) for (i = 0; i NR_EVENTS; ++i) { if ((status event_mask[i]) != 0) { ++sm-counter[i]; + if (panic_on_fatal event_logging[i].fatal) + panic(%s (%s)\n, + event_logging[i].name, + dev_name(sm-pdev-dev)); if (log) printk_ratelimited(%s%s: %s\n, event_logging[i].level, -- 1.7.9.5 -- ___ linux-yocto mailing list linux-yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/linux-yocto
[linux-yocto] [PATCH 12/17] misc: lsi-smmon: Add parameter panic_on_fatal
From: Anders Berg anders.b...@avagotech.com Added module parameter panic_on_fatal which when set will cause the driver to call panic() when an uncorrectable ECC error is detected. Signed-off-by: Anders Berg anders.b...@avagotech.com --- drivers/misc/lsi-smmon.c | 27 ++- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/misc/lsi-smmon.c b/drivers/misc/lsi-smmon.c index d263df9..88f291a 100644 --- a/drivers/misc/lsi-smmon.c +++ b/drivers/misc/lsi-smmon.c @@ -24,6 +24,10 @@ static int log = 1; module_param(log, int, S_IRUGO|S_IWUSR); MODULE_PARM_DESC(log, Log each error to kernel log.); +static int panic_on_fatal = 1; +module_param(panic_on_fatal, int, S_IRUGO|S_IWUSR); +MODULE_PARM_DESC(panic_on_fatal, Panic on fatal error.); + /* AXM55xx memory controller interrupt status bits: @@ -96,18 +100,19 @@ static const u32 event_mask[NR_EVENTS] = { }; static const struct event_logging { + int fatal; const char *level; const char *name; } event_logging[NR_EVENTS] = { - [EV_ILLEGAL] = {KERN_ERR, Illegal access}, - [EV_MULT_ILLEGAL]= {KERN_ERR, Illegal access}, - [EV_CORR_ECC]= {KERN_NOTICE, Correctable ECC error}, - [EV_MULT_CORR_ECC] = {KERN_NOTICE, Correctable ECC error}, - [EV_UNCORR_ECC] = {KERN_CRIT, Uncorrectable ECC error}, - [EV_MULT_UNCORR_ECC] = {KERN_CRIT, Uncorrectable ECC error}, - [EV_PORT_ERROR] = {KERN_CRIT, Port error}, - [EV_WRAP_ERROR] = {KERN_CRIT, Wrap error}, - [EV_PARITY_ERROR]= {KERN_CRIT, Parity error}, + [EV_ILLEGAL] = {0, KERN_ERR, Illegal access}, + [EV_MULT_ILLEGAL]= {0, KERN_ERR, Illegal access}, + [EV_CORR_ECC]= {0, KERN_NOTICE, Correctable ECC error}, + [EV_MULT_CORR_ECC] = {0, KERN_NOTICE, Correctable ECC error}, + [EV_UNCORR_ECC] = {1, KERN_CRIT, Uncorrectable ECC error}, + [EV_MULT_UNCORR_ECC] = {1, KERN_CRIT, Uncorrectable ECC error}, + [EV_PORT_ERROR] = {0, KERN_CRIT, Port error}, + [EV_WRAP_ERROR] = {0, KERN_CRIT, Wrap error}, + [EV_PARITY_ERROR]= {0, KERN_CRIT, Parity error}, }; struct smmon_attr { @@ -181,6 +186,10 @@ static irqreturn_t smmon_isr(int interrupt, void *device) for (i = 0; i NR_EVENTS; ++i) { if ((status event_mask[i]) != 0) { ++sm-counter[i]; + if (panic_on_fatal event_logging[i].fatal) + panic(%s (%s)\n, + event_logging[i].name, + dev_name(sm-pdev-dev)); if (log) printk_ratelimited(%s%s: %s\n, event_logging[i].level, -- 1.7.9.5 -- ___ linux-yocto mailing list linux-yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/linux-yocto