Commit e7930ba49e469d9ce7374a788336caf955f8d7e2
Committed by
Mauro Carvalho Chehab
1 parent
c10538396b
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
edac: create top-level debugfs directory
Create a single, top-level "edac" directory for debugfs. An "mc[0-N]" directory is then created for each memory controller. Individual drivers can create additional entries such as h/w error injection control. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Showing 3 changed files with 39 additions and 1 deletions Side-by-side Diff
drivers/edac/edac_mc_sysfs.c
... | ... | @@ -899,13 +899,33 @@ |
899 | 899 | }; |
900 | 900 | |
901 | 901 | #ifdef CONFIG_EDAC_DEBUG |
902 | +static struct dentry *edac_debugfs; | |
903 | + | |
904 | +int __init edac_debugfs_init(void) | |
905 | +{ | |
906 | + edac_debugfs = debugfs_create_dir("edac", NULL); | |
907 | + if (IS_ERR(edac_debugfs)) { | |
908 | + edac_debugfs = NULL; | |
909 | + return -ENOMEM; | |
910 | + } | |
911 | + return 0; | |
912 | +} | |
913 | + | |
914 | +void __exit edac_debugfs_exit(void) | |
915 | +{ | |
916 | + debugfs_remove(edac_debugfs); | |
917 | +} | |
918 | + | |
902 | 919 | int edac_create_debug_nodes(struct mem_ctl_info *mci) |
903 | 920 | { |
904 | 921 | struct dentry *d, *parent; |
905 | 922 | char name[80]; |
906 | 923 | int i; |
907 | 924 | |
908 | - d = debugfs_create_dir(mci->dev.kobj.name, mci->debugfs); | |
925 | + if (!edac_debugfs) | |
926 | + return -ENODEV; | |
927 | + | |
928 | + d = debugfs_create_dir(mci->dev.kobj.name, edac_debugfs); | |
909 | 929 | if (!d) |
910 | 930 | return -ENOMEM; |
911 | 931 | parent = d; |
... | ... | @@ -930,6 +950,7 @@ |
930 | 950 | if (!d) |
931 | 951 | goto nomem; |
932 | 952 | |
953 | + mci->debugfs = parent; | |
933 | 954 | return 0; |
934 | 955 | nomem: |
935 | 956 | debugfs_remove(mci->debugfs); |
drivers/edac/edac_module.c
... | ... | @@ -94,6 +94,8 @@ |
94 | 94 | if (err) |
95 | 95 | goto error; |
96 | 96 | |
97 | + edac_debugfs_init(); | |
98 | + | |
97 | 99 | /* Setup/Initialize the workq for this core */ |
98 | 100 | err = edac_workqueue_setup(); |
99 | 101 | if (err) { |
... | ... | @@ -118,6 +120,7 @@ |
118 | 120 | /* tear down the various subsystems */ |
119 | 121 | edac_workqueue_teardown(); |
120 | 122 | edac_mc_sysfs_exit(); |
123 | + edac_debugfs_exit(); | |
121 | 124 | } |
122 | 125 | |
123 | 126 | /* |
drivers/edac/edac_module.h
... | ... | @@ -57,6 +57,20 @@ |
57 | 57 | extern void *edac_align_ptr(void **p, unsigned size, int n_elems); |
58 | 58 | |
59 | 59 | /* |
60 | + * EDAC debugfs functions | |
61 | + */ | |
62 | +#ifdef CONFIG_EDAC_DEBUG | |
63 | +int edac_debugfs_init(void); | |
64 | +void edac_debugfs_exit(void); | |
65 | +#else | |
66 | +static inline int edac_debugfs_init(void) | |
67 | +{ | |
68 | + return -ENODEV; | |
69 | +} | |
70 | +static inline void edac_debugfs_exit(void) {} | |
71 | +#endif | |
72 | + | |
73 | +/* | |
60 | 74 | * EDAC PCI functions |
61 | 75 | */ |
62 | 76 | #ifdef CONFIG_PCI |