diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/edac/edac_mc.c | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c index 262e44544dc8..9c205274c1cb 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c | |||
@@ -38,6 +38,12 @@ | |||
38 | 38 | ||
39 | #define EDAC_MC_VERSION "edac_mc Ver: 2.0.0 " __DATE__ | 39 | #define EDAC_MC_VERSION "edac_mc Ver: 2.0.0 " __DATE__ |
40 | 40 | ||
41 | /* For now, disable the EDAC sysfs code. The sysfs interface that EDAC | ||
42 | * presents to user space needs more thought, and is likely to change | ||
43 | * substantially. | ||
44 | */ | ||
45 | #define DISABLE_EDAC_SYSFS | ||
46 | |||
41 | #ifdef CONFIG_EDAC_DEBUG | 47 | #ifdef CONFIG_EDAC_DEBUG |
42 | /* Values of 0 to 4 will generate output */ | 48 | /* Values of 0 to 4 will generate output */ |
43 | int edac_debug_level = 1; | 49 | int edac_debug_level = 1; |
@@ -47,7 +53,7 @@ EXPORT_SYMBOL(edac_debug_level); | |||
47 | /* EDAC Controls, setable by module parameter, and sysfs */ | 53 | /* EDAC Controls, setable by module parameter, and sysfs */ |
48 | static int log_ue = 1; | 54 | static int log_ue = 1; |
49 | static int log_ce = 1; | 55 | static int log_ce = 1; |
50 | static int panic_on_ue = 1; | 56 | static int panic_on_ue; |
51 | static int poll_msec = 1000; | 57 | static int poll_msec = 1000; |
52 | 58 | ||
53 | static int check_pci_parity = 0; /* default YES check PCI parity */ | 59 | static int check_pci_parity = 0; /* default YES check PCI parity */ |
@@ -77,6 +83,8 @@ static int pci_whitelist_count ; | |||
77 | 83 | ||
78 | /* START sysfs data and methods */ | 84 | /* START sysfs data and methods */ |
79 | 85 | ||
86 | #ifndef DISABLE_EDAC_SYSFS | ||
87 | |||
80 | static const char *mem_types[] = { | 88 | static const char *mem_types[] = { |
81 | [MEM_EMPTY] = "Empty", | 89 | [MEM_EMPTY] = "Empty", |
82 | [MEM_RESERVED] = "Reserved", | 90 | [MEM_RESERVED] = "Reserved", |
@@ -241,6 +249,7 @@ static struct kobj_type ktype_memctrl = { | |||
241 | .default_attrs = (struct attribute **) memctrl_attr, | 249 | .default_attrs = (struct attribute **) memctrl_attr, |
242 | }; | 250 | }; |
243 | 251 | ||
252 | #endif /* DISABLE_EDAC_SYSFS */ | ||
244 | 253 | ||
245 | /* Initialize the main sysfs entries for edac: | 254 | /* Initialize the main sysfs entries for edac: |
246 | * /sys/devices/system/edac | 255 | * /sys/devices/system/edac |
@@ -251,6 +260,11 @@ static struct kobj_type ktype_memctrl = { | |||
251 | * !0 FAILURE | 260 | * !0 FAILURE |
252 | */ | 261 | */ |
253 | static int edac_sysfs_memctrl_setup(void) | 262 | static int edac_sysfs_memctrl_setup(void) |
263 | #ifdef DISABLE_EDAC_SYSFS | ||
264 | { | ||
265 | return 0; | ||
266 | } | ||
267 | #else | ||
254 | { | 268 | { |
255 | int err=0; | 269 | int err=0; |
256 | 270 | ||
@@ -283,6 +297,7 @@ static int edac_sysfs_memctrl_setup(void) | |||
283 | 297 | ||
284 | return err; | 298 | return err; |
285 | } | 299 | } |
300 | #endif /* DISABLE_EDAC_SYSFS */ | ||
286 | 301 | ||
287 | /* | 302 | /* |
288 | * MC teardown: | 303 | * MC teardown: |
@@ -290,6 +305,7 @@ static int edac_sysfs_memctrl_setup(void) | |||
290 | */ | 305 | */ |
291 | static void edac_sysfs_memctrl_teardown(void) | 306 | static void edac_sysfs_memctrl_teardown(void) |
292 | { | 307 | { |
308 | #ifndef DISABLE_EDAC_SYSFS | ||
293 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 309 | debugf0("MC: " __FILE__ ": %s()\n", __func__); |
294 | 310 | ||
295 | /* Unregister the MC's kobject */ | 311 | /* Unregister the MC's kobject */ |
@@ -300,8 +316,11 @@ static void edac_sysfs_memctrl_teardown(void) | |||
300 | 316 | ||
301 | /* Unregister the 'edac' object */ | 317 | /* Unregister the 'edac' object */ |
302 | sysdev_class_unregister(&edac_class); | 318 | sysdev_class_unregister(&edac_class); |
319 | #endif /* DISABLE_EDAC_SYSFS */ | ||
303 | } | 320 | } |
304 | 321 | ||
322 | #ifndef DISABLE_EDAC_SYSFS | ||
323 | |||
305 | /* | 324 | /* |
306 | * /sys/devices/system/edac/pci; | 325 | * /sys/devices/system/edac/pci; |
307 | * data structures and methods | 326 | * data structures and methods |
@@ -554,11 +573,18 @@ static struct kobj_type ktype_edac_pci = { | |||
554 | .default_attrs = (struct attribute **) edac_pci_attr, | 573 | .default_attrs = (struct attribute **) edac_pci_attr, |
555 | }; | 574 | }; |
556 | 575 | ||
576 | #endif /* DISABLE_EDAC_SYSFS */ | ||
577 | |||
557 | /** | 578 | /** |
558 | * edac_sysfs_pci_setup() | 579 | * edac_sysfs_pci_setup() |
559 | * | 580 | * |
560 | */ | 581 | */ |
561 | static int edac_sysfs_pci_setup(void) | 582 | static int edac_sysfs_pci_setup(void) |
583 | #ifdef DISABLE_EDAC_SYSFS | ||
584 | { | ||
585 | return 0; | ||
586 | } | ||
587 | #else | ||
562 | { | 588 | { |
563 | int err; | 589 | int err; |
564 | 590 | ||
@@ -582,16 +608,20 @@ static int edac_sysfs_pci_setup(void) | |||
582 | } | 608 | } |
583 | return err; | 609 | return err; |
584 | } | 610 | } |
585 | 611 | #endif /* DISABLE_EDAC_SYSFS */ | |
586 | 612 | ||
587 | static void edac_sysfs_pci_teardown(void) | 613 | static void edac_sysfs_pci_teardown(void) |
588 | { | 614 | { |
615 | #ifndef DISABLE_EDAC_SYSFS | ||
589 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 616 | debugf0("MC: " __FILE__ ": %s()\n", __func__); |
590 | 617 | ||
591 | kobject_unregister(&edac_pci_kobj); | 618 | kobject_unregister(&edac_pci_kobj); |
592 | kobject_put(&edac_pci_kobj); | 619 | kobject_put(&edac_pci_kobj); |
620 | #endif | ||
593 | } | 621 | } |
594 | 622 | ||
623 | #ifndef DISABLE_EDAC_SYSFS | ||
624 | |||
595 | /* EDAC sysfs CSROW data structures and methods */ | 625 | /* EDAC sysfs CSROW data structures and methods */ |
596 | 626 | ||
597 | /* Set of more detailed csrow<id> attribute show/store functions */ | 627 | /* Set of more detailed csrow<id> attribute show/store functions */ |
@@ -1045,6 +1075,8 @@ static struct kobj_type ktype_mci = { | |||
1045 | .default_attrs = (struct attribute **) mci_attr, | 1075 | .default_attrs = (struct attribute **) mci_attr, |
1046 | }; | 1076 | }; |
1047 | 1077 | ||
1078 | #endif /* DISABLE_EDAC_SYSFS */ | ||
1079 | |||
1048 | #define EDAC_DEVICE_SYMLINK "device" | 1080 | #define EDAC_DEVICE_SYMLINK "device" |
1049 | 1081 | ||
1050 | /* | 1082 | /* |
@@ -1056,6 +1088,11 @@ static struct kobj_type ktype_mci = { | |||
1056 | * !0 Failure | 1088 | * !0 Failure |
1057 | */ | 1089 | */ |
1058 | static int edac_create_sysfs_mci_device(struct mem_ctl_info *mci) | 1090 | static int edac_create_sysfs_mci_device(struct mem_ctl_info *mci) |
1091 | #ifdef DISABLE_EDAC_SYSFS | ||
1092 | { | ||
1093 | return 0; | ||
1094 | } | ||
1095 | #else | ||
1059 | { | 1096 | { |
1060 | int i; | 1097 | int i; |
1061 | int err; | 1098 | int err; |
@@ -1124,12 +1161,14 @@ fail: | |||
1124 | 1161 | ||
1125 | return err; | 1162 | return err; |
1126 | } | 1163 | } |
1164 | #endif /* DISABLE_EDAC_SYSFS */ | ||
1127 | 1165 | ||
1128 | /* | 1166 | /* |
1129 | * remove a Memory Controller instance | 1167 | * remove a Memory Controller instance |
1130 | */ | 1168 | */ |
1131 | static void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci) | 1169 | static void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci) |
1132 | { | 1170 | { |
1171 | #ifndef DISABLE_EDAC_SYSFS | ||
1133 | int i; | 1172 | int i; |
1134 | 1173 | ||
1135 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 1174 | debugf0("MC: " __FILE__ ": %s()\n", __func__); |
@@ -1146,6 +1185,7 @@ static void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci) | |||
1146 | 1185 | ||
1147 | kobject_unregister(&mci->edac_mci_kobj); | 1186 | kobject_unregister(&mci->edac_mci_kobj); |
1148 | kobject_put(&mci->edac_mci_kobj); | 1187 | kobject_put(&mci->edac_mci_kobj); |
1188 | #endif /* DISABLE_EDAC_SYSFS */ | ||
1149 | } | 1189 | } |
1150 | 1190 | ||
1151 | /* END OF sysfs data and methods */ | 1191 | /* END OF sysfs data and methods */ |