aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/edac/edac_core.h7
-rw-r--r--drivers/edac/edac_mc.c21
-rw-r--r--drivers/edac/edac_mc_sysfs.c76
-rw-r--r--drivers/edac/edac_module.h7
-rw-r--r--drivers/edac/edac_pci.c21
-rw-r--r--drivers/edac/edac_pci_sysfs.c56
6 files changed, 111 insertions, 77 deletions
diff --git a/drivers/edac/edac_core.h b/drivers/edac/edac_core.h
index febff411142..5371e230a4a 100644
--- a/drivers/edac/edac_core.h
+++ b/drivers/edac/edac_core.h
@@ -646,13 +646,6 @@ struct edac_pci_ctl_info {
646 646
647 int pci_idx; 647 int pci_idx;
648 648
649 /* Per instance controls for this edac_device */
650 int check_parity_error; /* boolean for checking parity errs */
651 int log_parity_error; /* boolean for logging parity errs */
652 int panic_on_pe; /* boolean for panic'ing on a PE */
653 unsigned poll_msec; /* number of milliseconds to poll interval */
654 unsigned long delay; /* number of jiffies for poll_msec */
655
656 struct sysdev_class *edac_class; /* pointer to class */ 649 struct sysdev_class *edac_class; /* pointer to class */
657 650
658 /* the internal state of this controller instance */ 651 /* the internal state of this controller instance */
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
index 7c952c68f0d..2e8c198749a 100644
--- a/drivers/edac/edac_mc.c
+++ b/drivers/edac/edac_mc.c
@@ -263,7 +263,8 @@ static void edac_mc_workq_function(void *ptr)
263 mutex_unlock(&mem_ctls_mutex); 263 mutex_unlock(&mem_ctls_mutex);
264 264
265 /* Reschedule */ 265 /* Reschedule */
266 queue_delayed_work(edac_workqueue, &mci->work, edac_mc_get_poll_msec()); 266 queue_delayed_work(edac_workqueue, &mci->work,
267 msecs_to_jiffies(edac_mc_get_poll_msec()));
267} 268}
268 269
269/* 270/*
@@ -611,7 +612,7 @@ void edac_mc_handle_ce(struct mem_ctl_info *mci,
611 return; 612 return;
612 } 613 }
613 614
614 if (edac_get_log_ce()) 615 if (edac_mc_get_log_ce())
615 /* FIXME - put in DIMM location */ 616 /* FIXME - put in DIMM location */
616 edac_mc_printk(mci, KERN_WARNING, 617 edac_mc_printk(mci, KERN_WARNING,
617 "CE page 0x%lx, offset 0x%lx, grain %d, syndrome " 618 "CE page 0x%lx, offset 0x%lx, grain %d, syndrome "
@@ -646,7 +647,7 @@ EXPORT_SYMBOL_GPL(edac_mc_handle_ce);
646 647
647void edac_mc_handle_ce_no_info(struct mem_ctl_info *mci, const char *msg) 648void edac_mc_handle_ce_no_info(struct mem_ctl_info *mci, const char *msg)
648{ 649{
649 if (edac_get_log_ce()) 650 if (edac_mc_get_log_ce())
650 edac_mc_printk(mci, KERN_WARNING, 651 edac_mc_printk(mci, KERN_WARNING,
651 "CE - no information available: %s\n", msg); 652 "CE - no information available: %s\n", msg);
652 653
@@ -690,14 +691,14 @@ void edac_mc_handle_ue(struct mem_ctl_info *mci,
690 pos += chars; 691 pos += chars;
691 } 692 }
692 693
693 if (edac_get_log_ue()) 694 if (edac_mc_get_log_ue())
694 edac_mc_printk(mci, KERN_EMERG, 695 edac_mc_printk(mci, KERN_EMERG,
695 "UE page 0x%lx, offset 0x%lx, grain %d, row %d, " 696 "UE page 0x%lx, offset 0x%lx, grain %d, row %d, "
696 "labels \"%s\": %s\n", page_frame_number, 697 "labels \"%s\": %s\n", page_frame_number,
697 offset_in_page, mci->csrows[row].grain, row, labels, 698 offset_in_page, mci->csrows[row].grain, row, labels,
698 msg); 699 msg);
699 700
700 if (edac_get_panic_on_ue()) 701 if (edac_mc_get_panic_on_ue())
701 panic("EDAC MC%d: UE page 0x%lx, offset 0x%lx, grain %d, " 702 panic("EDAC MC%d: UE page 0x%lx, offset 0x%lx, grain %d, "
702 "row %d, labels \"%s\": %s\n", mci->mc_idx, 703 "row %d, labels \"%s\": %s\n", mci->mc_idx,
703 page_frame_number, offset_in_page, 704 page_frame_number, offset_in_page,
@@ -710,10 +711,10 @@ EXPORT_SYMBOL_GPL(edac_mc_handle_ue);
710 711
711void edac_mc_handle_ue_no_info(struct mem_ctl_info *mci, const char *msg) 712void edac_mc_handle_ue_no_info(struct mem_ctl_info *mci, const char *msg)
712{ 713{
713 if (edac_get_panic_on_ue()) 714 if (edac_mc_get_panic_on_ue())
714 panic("EDAC MC%d: Uncorrected Error", mci->mc_idx); 715 panic("EDAC MC%d: Uncorrected Error", mci->mc_idx);
715 716
716 if (edac_get_log_ue()) 717 if (edac_mc_get_log_ue())
717 edac_mc_printk(mci, KERN_WARNING, 718 edac_mc_printk(mci, KERN_WARNING,
718 "UE - no information available: %s\n", msg); 719 "UE - no information available: %s\n", msg);
719 mci->ue_noinfo_count++; 720 mci->ue_noinfo_count++;
@@ -776,13 +777,13 @@ void edac_mc_handle_fbd_ue(struct mem_ctl_info *mci,
776 chars = snprintf(pos, len + 1, "-%s", 777 chars = snprintf(pos, len + 1, "-%s",
777 mci->csrows[csrow].channels[channelb].label); 778 mci->csrows[csrow].channels[channelb].label);
778 779
779 if (edac_get_log_ue()) 780 if (edac_mc_get_log_ue())
780 edac_mc_printk(mci, KERN_EMERG, 781 edac_mc_printk(mci, KERN_EMERG,
781 "UE row %d, channel-a= %d channel-b= %d " 782 "UE row %d, channel-a= %d channel-b= %d "
782 "labels \"%s\": %s\n", csrow, channela, channelb, 783 "labels \"%s\": %s\n", csrow, channela, channelb,
783 labels, msg); 784 labels, msg);
784 785
785 if (edac_get_panic_on_ue()) 786 if (edac_mc_get_panic_on_ue())
786 panic("UE row %d, channel-a= %d channel-b= %d " 787 panic("UE row %d, channel-a= %d channel-b= %d "
787 "labels \"%s\": %s\n", csrow, channela, 788 "labels \"%s\": %s\n", csrow, channela,
788 channelb, labels, msg); 789 channelb, labels, msg);
@@ -817,7 +818,7 @@ void edac_mc_handle_fbd_ce(struct mem_ctl_info *mci,
817 return; 818 return;
818 } 819 }
819 820
820 if (edac_get_log_ce()) 821 if (edac_mc_get_log_ce())
821 /* FIXME - put in DIMM location */ 822 /* FIXME - put in DIMM location */
822 edac_mc_printk(mci, KERN_WARNING, 823 edac_mc_printk(mci, KERN_WARNING,
823 "CE row %d, channel %d, label \"%s\": %s\n", 824 "CE row %d, channel %d, label \"%s\": %s\n",
diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
index 6b2217b741f..7f8240f40db 100644
--- a/drivers/edac/edac_mc_sysfs.c
+++ b/drivers/edac/edac_mc_sysfs.c
@@ -16,47 +16,44 @@
16#include "edac_module.h" 16#include "edac_module.h"
17 17
18/* MC EDAC Controls, setable by module parameter, and sysfs */ 18/* MC EDAC Controls, setable by module parameter, and sysfs */
19static int log_ue = 1; 19static int edac_mc_log_ue = 1;
20static int log_ce = 1; 20static int edac_mc_log_ce = 1;
21static int panic_on_ue; 21static int edac_mc_panic_on_ue = 0;
22static int poll_msec = 1000; 22static int edac_mc_poll_msec = 1000;
23 23
24/* Getter functions for above */ 24/* Getter functions for above */
25int edac_get_log_ue(void) 25int edac_mc_get_log_ue(void)
26{ 26{
27 return log_ue; 27 return edac_mc_log_ue;
28} 28}
29 29
30int edac_get_log_ce(void) 30int edac_mc_get_log_ce(void)
31{ 31{
32 return log_ce; 32 return edac_mc_log_ce;
33} 33}
34 34
35int edac_get_panic_on_ue(void) 35int edac_mc_get_panic_on_ue(void)
36{ 36{
37 return panic_on_ue; 37 return edac_mc_panic_on_ue;
38} 38}
39 39
40/* this is temporary */ 40/* this is temporary */
41int edac_mc_get_poll_msec(void) 41int edac_mc_get_poll_msec(void)
42{ 42{
43 return edac_get_poll_msec(); 43 return edac_mc_poll_msec;
44}
45
46int edac_get_poll_msec(void)
47{
48 return poll_msec;
49} 44}
50 45
51/* Parameter declarations for above */ 46/* Parameter declarations for above */
52module_param(panic_on_ue, int, 0644); 47module_param(edac_mc_panic_on_ue, int, 0644);
53MODULE_PARM_DESC(panic_on_ue, "Panic on uncorrected error: 0=off 1=on"); 48MODULE_PARM_DESC(edac_mc_panic_on_ue, "Panic on uncorrected error: 0=off 1=on");
54module_param(log_ue, int, 0644); 49module_param(edac_mc_log_ue, int, 0644);
55MODULE_PARM_DESC(log_ue, "Log uncorrectable error to console: 0=off 1=on"); 50MODULE_PARM_DESC(edac_mc_log_ue,
56module_param(log_ce, int, 0644); 51 "Log uncorrectable error to console: 0=off 1=on");
57MODULE_PARM_DESC(log_ce, "Log correctable error to console: 0=off 1=on"); 52module_param(edac_mc_log_ce, int, 0644);
58module_param(poll_msec, int, 0644); 53MODULE_PARM_DESC(edac_mc_log_ce,
59MODULE_PARM_DESC(poll_msec, "Polling period in milliseconds"); 54 "Log correctable error to console: 0=off 1=on");
55module_param(edac_mc_poll_msec, int, 0644);
56MODULE_PARM_DESC(edac_mc_poll_msec, "Polling period in milliseconds");
60 57
61 58
62/* 59/*
@@ -187,17 +184,32 @@ static struct memctrl_dev_attribute attr_##_name = { \
187}; 184};
188 185
189/* csrow<id> control files */ 186/* csrow<id> control files */
190MEMCTRL_ATTR(panic_on_ue,S_IRUGO|S_IWUSR,memctrl_int_show,memctrl_int_store); 187MEMCTRL_ATTR(edac_mc_panic_on_ue,
191MEMCTRL_ATTR(log_ue,S_IRUGO|S_IWUSR,memctrl_int_show,memctrl_int_store); 188 S_IRUGO | S_IWUSR,
192MEMCTRL_ATTR(log_ce,S_IRUGO|S_IWUSR,memctrl_int_show,memctrl_int_store); 189 memctrl_int_show,
193MEMCTRL_ATTR(poll_msec,S_IRUGO|S_IWUSR,memctrl_int_show,memctrl_int_store); 190 memctrl_int_store);
191
192MEMCTRL_ATTR(edac_mc_log_ue,
193 S_IRUGO|S_IWUSR,
194 memctrl_int_show,
195 memctrl_int_store);
196
197MEMCTRL_ATTR(edac_mc_log_ce,
198 S_IRUGO|S_IWUSR,
199 memctrl_int_show,
200 memctrl_int_store);
201
202MEMCTRL_ATTR(edac_mc_poll_msec,
203 S_IRUGO|S_IWUSR,
204 memctrl_int_show,
205 memctrl_int_store);
194 206
195/* Base Attributes of the memory ECC object */ 207/* Base Attributes of the memory ECC object */
196static struct memctrl_dev_attribute *memctrl_attr[] = { 208static struct memctrl_dev_attribute *memctrl_attr[] = {
197 &attr_panic_on_ue, 209 &attr_edac_mc_panic_on_ue,
198 &attr_log_ue, 210 &attr_edac_mc_log_ue,
199 &attr_log_ce, 211 &attr_edac_mc_log_ce,
200 &attr_poll_msec, 212 &attr_edac_mc_poll_msec,
201 NULL, 213 NULL,
202}; 214};
203 215
diff --git a/drivers/edac/edac_module.h b/drivers/edac/edac_module.h
index 22c52e43131..ffd25bdf87f 100644
--- a/drivers/edac/edac_module.h
+++ b/drivers/edac/edac_module.h
@@ -27,6 +27,9 @@ extern void edac_check_mc_devices(void);
27extern int edac_get_log_ue(void); 27extern int edac_get_log_ue(void);
28extern int edac_get_log_ce(void); 28extern int edac_get_log_ce(void);
29extern int edac_get_panic_on_ue(void); 29extern int edac_get_panic_on_ue(void);
30extern int edac_mc_get_log_ue(void);
31extern int edac_mc_get_log_ce(void);
32extern int edac_mc_get_panic_on_ue(void);
30extern int edac_get_poll_msec(void); 33extern int edac_get_poll_msec(void);
31extern int edac_mc_get_poll_msec(void); 34extern int edac_mc_get_poll_msec(void);
32 35
@@ -52,12 +55,16 @@ extern void edac_pci_do_parity_check(void);
52extern void edac_pci_clear_parity_errors(void); 55extern void edac_pci_clear_parity_errors(void);
53extern int edac_sysfs_pci_setup(void); 56extern int edac_sysfs_pci_setup(void);
54extern void edac_sysfs_pci_teardown(void); 57extern void edac_sysfs_pci_teardown(void);
58extern int edac_pci_get_check_errors(void);
59extern int edac_pci_get_poll_msec(void);
55#else /* CONFIG_PCI */ 60#else /* CONFIG_PCI */
56/* pre-process these away */ 61/* pre-process these away */
57#define edac_pci_do_parity_check() 62#define edac_pci_do_parity_check()
58#define edac_pci_clear_parity_errors() 63#define edac_pci_clear_parity_errors()
59#define edac_sysfs_pci_setup() (0) 64#define edac_sysfs_pci_setup() (0)
60#define edac_sysfs_pci_teardown() 65#define edac_sysfs_pci_teardown()
66#define edac_pci_get_check_errors()
67#define edac_pci_get_poll_msec()
61#endif /* CONFIG_PCI */ 68#endif /* CONFIG_PCI */
62 69
63 70
diff --git a/drivers/edac/edac_pci.c b/drivers/edac/edac_pci.c
index 677c603f559..9f4aaaaa4ed 100644
--- a/drivers/edac/edac_pci.c
+++ b/drivers/edac/edac_pci.c
@@ -226,13 +226,14 @@ static void edac_pci_workq_function(void *ptr)
226 226
227 if ((pci->op_state == OP_RUNNING_POLL) && 227 if ((pci->op_state == OP_RUNNING_POLL) &&
228 (pci->edac_check != NULL) && 228 (pci->edac_check != NULL) &&
229 (pci->check_parity_error)) 229 (edac_pci_get_check_errors()))
230 pci->edac_check(pci); 230 pci->edac_check(pci);
231 231
232 edac_unlock_pci_list(); 232 edac_unlock_pci_list();
233 233
234 /* Reschedule */ 234 /* Reschedule */
235 queue_delayed_work(edac_workqueue, &pci->work, pci->delay); 235 queue_delayed_work(edac_workqueue, &pci->work,
236 msecs_to_jiffies(edac_pci_get_poll_msec()));
236} 237}
237 238
238/* 239/*
@@ -245,15 +246,13 @@ static void edac_pci_workq_setup(struct edac_pci_ctl_info *pci,
245{ 246{
246 debugf0("%s()\n", __func__); 247 debugf0("%s()\n", __func__);
247 248
248 pci->poll_msec = msec;
249 edac_calc_delay(pci);
250
251#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 249#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
252 INIT_DELAYED_WORK(&pci->work, edac_pci_workq_function); 250 INIT_DELAYED_WORK(&pci->work, edac_pci_workq_function);
253#else 251#else
254 INIT_WORK(&pci->work, edac_pci_workq_function, pci); 252 INIT_WORK(&pci->work, edac_pci_workq_function, pci);
255#endif 253#endif
256 queue_delayed_work(edac_workqueue, &pci->work, pci->delay); 254 queue_delayed_work(edac_workqueue, &pci->work,
255 msecs_to_jiffies(edac_pci_get_poll_msec()));
257} 256}
258 257
259/* 258/*
@@ -390,16 +389,6 @@ struct edac_pci_ctl_info * edac_pci_del_device(struct device *dev)
390} 389}
391EXPORT_SYMBOL_GPL(edac_pci_del_device); 390EXPORT_SYMBOL_GPL(edac_pci_del_device);
392 391
393static inline int edac_pci_get_log_pe(struct edac_pci_ctl_info *pci)
394{
395 return pci->log_parity_error;
396}
397
398static inline int edac_pci_get_panic_on_pe(struct edac_pci_ctl_info *pci)
399{
400 return pci->panic_on_pe;
401}
402
403void edac_pci_generic_check(struct edac_pci_ctl_info *pci) 392void edac_pci_generic_check(struct edac_pci_ctl_info *pci)
404{ 393{
405 edac_pci_do_parity_check(); 394 edac_pci_do_parity_check();
diff --git a/drivers/edac/edac_pci_sysfs.c b/drivers/edac/edac_pci_sysfs.c
index 0b179e0fd11..a3f81d72c95 100644
--- a/drivers/edac/edac_pci_sysfs.c
+++ b/drivers/edac/edac_pci_sysfs.c
@@ -19,15 +19,42 @@
19#define EDAC_PCI_SYMLINK "device" 19#define EDAC_PCI_SYMLINK "device"
20 20
21static int check_pci_errors = 0; /* default YES check PCI parity */ 21static int check_pci_errors = 0; /* default YES check PCI parity */
22static int panic_on_pci_parity = 0; /* default no panic on PCI Parity */ 22static int edac_pci_panic_on_pe = 0; /* default no panic on PCI Parity */
23static int log_pci_errs = 1; 23static int edac_pci_log_pe = 1; /* log PCI parity errors */
24static int edac_pci_log_npe = 1; /* log PCI non-parity error errors */
24static atomic_t pci_parity_count = ATOMIC_INIT(0); 25static atomic_t pci_parity_count = ATOMIC_INIT(0);
25static atomic_t pci_nonparity_count = ATOMIC_INIT(0); 26static atomic_t pci_nonparity_count = ATOMIC_INIT(0);
27static int edac_pci_poll_msec = 1000;
26 28
27static struct kobject edac_pci_kobj; /* /sys/devices/system/edac/pci */ 29static struct kobject edac_pci_kobj; /* /sys/devices/system/edac/pci */
28static struct completion edac_pci_kobj_complete; 30static struct completion edac_pci_kobj_complete;
29static atomic_t edac_pci_sysfs_refcount = ATOMIC_INIT(0); 31static atomic_t edac_pci_sysfs_refcount = ATOMIC_INIT(0);
30 32
33int edac_pci_get_check_errors(void)
34{
35 return check_pci_errors;
36}
37
38int edac_pci_get_log_pe(void)
39{
40 return edac_pci_log_pe;
41}
42
43int edac_pci_get_log_npe(void)
44{
45 return edac_pci_log_npe;
46}
47
48int edac_pci_get_panic_on_pe(void)
49{
50 return edac_pci_panic_on_pe;
51}
52
53int edac_pci_get_poll_msec(void)
54{
55 return edac_pci_poll_msec;
56}
57
31/**************************** EDAC PCI sysfs instance *******************/ 58/**************************** EDAC PCI sysfs instance *******************/
32static ssize_t instance_pe_count_show(struct edac_pci_ctl_info *pci, char *data) 59static ssize_t instance_pe_count_show(struct edac_pci_ctl_info *pci, char *data)
33{ 60{
@@ -222,9 +249,11 @@ static struct edac_pci_dev_attribute edac_pci_attr_##_name = { \
222/* PCI Parity control files */ 249/* PCI Parity control files */
223EDAC_PCI_ATTR(check_pci_errors, S_IRUGO|S_IWUSR, edac_pci_int_show, 250EDAC_PCI_ATTR(check_pci_errors, S_IRUGO|S_IWUSR, edac_pci_int_show,
224 edac_pci_int_store); 251 edac_pci_int_store);
225EDAC_PCI_ATTR(log_pci_errs, S_IRUGO|S_IWUSR, edac_pci_int_show, 252EDAC_PCI_ATTR(edac_pci_log_pe, S_IRUGO|S_IWUSR, edac_pci_int_show,
253 edac_pci_int_store);
254EDAC_PCI_ATTR(edac_pci_log_npe, S_IRUGO|S_IWUSR, edac_pci_int_show,
226 edac_pci_int_store); 255 edac_pci_int_store);
227EDAC_PCI_ATTR(panic_on_pci_parity, S_IRUGO|S_IWUSR, edac_pci_int_show, 256EDAC_PCI_ATTR(edac_pci_panic_on_pe, S_IRUGO|S_IWUSR, edac_pci_int_show,
228 edac_pci_int_store); 257 edac_pci_int_store);
229EDAC_PCI_ATTR(pci_parity_count, S_IRUGO, edac_pci_int_show, NULL); 258EDAC_PCI_ATTR(pci_parity_count, S_IRUGO, edac_pci_int_show, NULL);
230EDAC_PCI_ATTR(pci_nonparity_count, S_IRUGO, edac_pci_int_show, NULL); 259EDAC_PCI_ATTR(pci_nonparity_count, S_IRUGO, edac_pci_int_show, NULL);
@@ -232,8 +261,9 @@ EDAC_PCI_ATTR(pci_nonparity_count, S_IRUGO, edac_pci_int_show, NULL);
232/* Base Attributes of the memory ECC object */ 261/* Base Attributes of the memory ECC object */
233static struct edac_pci_dev_attribute *edac_pci_attr[] = { 262static struct edac_pci_dev_attribute *edac_pci_attr[] = {
234 &edac_pci_attr_check_pci_errors, 263 &edac_pci_attr_check_pci_errors,
235 &edac_pci_attr_log_pci_errs, 264 &edac_pci_attr_edac_pci_log_pe,
236 &edac_pci_attr_panic_on_pci_parity, 265 &edac_pci_attr_edac_pci_log_npe,
266 &edac_pci_attr_edac_pci_panic_on_pe,
237 &edac_pci_attr_pci_parity_count, 267 &edac_pci_attr_pci_parity_count,
238 &edac_pci_attr_pci_nonparity_count, 268 &edac_pci_attr_pci_nonparity_count,
239 NULL, 269 NULL,
@@ -529,7 +559,7 @@ void edac_pci_do_parity_check(void)
529 local_irq_restore(flags); 559 local_irq_restore(flags);
530 560
531 /* Only if operator has selected panic on PCI Error */ 561 /* Only if operator has selected panic on PCI Error */
532 if (panic_on_pci_parity) { 562 if (edac_pci_get_panic_on_pe()) {
533 /* If the count is different 'after' from 'before' */ 563 /* If the count is different 'after' from 'before' */
534 if (before_count != atomic_read(&pci_parity_count)) 564 if (before_count != atomic_read(&pci_parity_count))
535 panic("EDAC: PCI Parity Error"); 565 panic("EDAC: PCI Parity Error");
@@ -549,7 +579,7 @@ void edac_pci_handle_pe(struct edac_pci_ctl_info *pci, const char *msg)
549 /* global PE counter incremented by edac_pci_do_parity_check() */ 579 /* global PE counter incremented by edac_pci_do_parity_check() */
550 atomic_inc(&pci->counters.pe_count); 580 atomic_inc(&pci->counters.pe_count);
551 581
552 if (log_pci_errs) 582 if (edac_pci_get_log_pe())
553 edac_pci_printk(pci, KERN_WARNING, 583 edac_pci_printk(pci, KERN_WARNING,
554 "Parity Error ctl: %s %d: %s\n", 584 "Parity Error ctl: %s %d: %s\n",
555 pci->ctl_name, pci->pci_idx, msg); 585 pci->ctl_name, pci->pci_idx, msg);
@@ -568,7 +598,7 @@ void edac_pci_handle_npe(struct edac_pci_ctl_info *pci, const char *msg)
568 /* global NPE counter incremented by edac_pci_do_parity_check() */ 598 /* global NPE counter incremented by edac_pci_do_parity_check() */
569 atomic_inc(&pci->counters.npe_count); 599 atomic_inc(&pci->counters.npe_count);
570 600
571 if (log_pci_errs) 601 if (edac_pci_get_log_npe())
572 edac_pci_printk(pci, KERN_WARNING, 602 edac_pci_printk(pci, KERN_WARNING,
573 "Non-Parity Error ctl: %s %d: %s\n", 603 "Non-Parity Error ctl: %s %d: %s\n",
574 pci->ctl_name, pci->pci_idx, msg); 604 pci->ctl_name, pci->pci_idx, msg);
@@ -585,8 +615,10 @@ EXPORT_SYMBOL_GPL(edac_pci_handle_npe);
585 * Define the PCI parameter to the module 615 * Define the PCI parameter to the module
586 */ 616 */
587module_param(check_pci_errors, int, 0644); 617module_param(check_pci_errors, int, 0644);
588MODULE_PARM_DESC(check_pci_errors, "Check for PCI bus parity errors: 0=off 1=on"); 618MODULE_PARM_DESC(check_pci_errors,
589module_param(panic_on_pci_parity, int, 0644); 619 "Check for PCI bus parity errors: 0=off 1=on");
590MODULE_PARM_DESC(panic_on_pci_parity, "Panic on PCI Bus Parity error: 0=off 1=on"); 620module_param(edac_pci_panic_on_pe, int, 0644);
621MODULE_PARM_DESC(edac_pci_panic_on_pe,
622 "Panic on PCI Bus Parity error: 0=off 1=on");
591 623
592#endif /* CONFIG_PCI */ 624#endif /* CONFIG_PCI */