diff options
author | Borislav Petkov <bp@suse.de> | 2015-09-22 06:16:05 -0400 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2015-09-22 12:10:22 -0400 |
commit | 4397bcb4fa1dd285a2c6d583d1f1cbc6bd423f97 (patch) | |
tree | d215da1571321864e4fcb082c1d28820a1bc8dd9 /drivers/edac | |
parent | 7ac8bf9bc9ba82aea763ef30671a34c6a2a39922 (diff) |
EDAC: Add debugfs wrappers
Later patches will convert EDAC users to those.
Signed-off-by: Borislav Petkov <bp@suse.de>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/debugfs.c | 60 | ||||
-rw-r--r-- | drivers/edac/edac_module.h | 34 |
2 files changed, 88 insertions, 6 deletions
diff --git a/drivers/edac/debugfs.c b/drivers/edac/debugfs.c index bcd558d5cb48..4864703115cc 100644 --- a/drivers/edac/debugfs.c +++ b/drivers/edac/debugfs.c | |||
@@ -101,3 +101,63 @@ nomem: | |||
101 | debugfs_remove(mci->debugfs); | 101 | debugfs_remove(mci->debugfs); |
102 | return -ENOMEM; | 102 | return -ENOMEM; |
103 | } | 103 | } |
104 | |||
105 | /* Create a toplevel dir under EDAC's debugfs hierarchy */ | ||
106 | struct dentry *edac_debugfs_create_dir(const char *dirname) | ||
107 | { | ||
108 | if (!edac_debugfs) | ||
109 | return NULL; | ||
110 | |||
111 | return debugfs_create_dir(dirname, edac_debugfs); | ||
112 | } | ||
113 | EXPORT_SYMBOL_GPL(edac_debugfs_create_dir); | ||
114 | |||
115 | /* Create a toplevel dir under EDAC's debugfs hierarchy with parent @parent */ | ||
116 | struct dentry * | ||
117 | edac_debugfs_create_dir_at(const char *dirname, struct dentry *parent) | ||
118 | { | ||
119 | return debugfs_create_dir(dirname, parent); | ||
120 | } | ||
121 | EXPORT_SYMBOL_GPL(edac_debugfs_create_dir_at); | ||
122 | |||
123 | /* | ||
124 | * Create a file under EDAC's hierarchy or a sub-hierarchy: | ||
125 | * | ||
126 | * @name: file name | ||
127 | * @mode: file permissions | ||
128 | * @parent: parent dentry. If NULL, it becomes the toplevel EDAC dir | ||
129 | * @data: private data of caller | ||
130 | * @fops: file operations of this file | ||
131 | */ | ||
132 | struct dentry * | ||
133 | edac_debugfs_create_file(const char *name, umode_t mode, struct dentry *parent, | ||
134 | void *data, const struct file_operations *fops) | ||
135 | { | ||
136 | if (!parent) | ||
137 | parent = edac_debugfs; | ||
138 | |||
139 | return debugfs_create_file(name, mode, parent, data, fops); | ||
140 | } | ||
141 | EXPORT_SYMBOL_GPL(edac_debugfs_create_file); | ||
142 | |||
143 | /* Wrapper for debugfs_create_x8() */ | ||
144 | struct dentry *edac_debugfs_create_x8(const char *name, umode_t mode, | ||
145 | struct dentry *parent, u8 *value) | ||
146 | { | ||
147 | if (!parent) | ||
148 | parent = edac_debugfs; | ||
149 | |||
150 | return debugfs_create_x8(name, mode, parent, value); | ||
151 | } | ||
152 | EXPORT_SYMBOL_GPL(edac_debugfs_create_x8); | ||
153 | |||
154 | /* Wrapper for debugfs_create_x16() */ | ||
155 | struct dentry *edac_debugfs_create_x16(const char *name, umode_t mode, | ||
156 | struct dentry *parent, u16 *value) | ||
157 | { | ||
158 | if (!parent) | ||
159 | parent = edac_debugfs; | ||
160 | |||
161 | return debugfs_create_x16(name, mode, parent, value); | ||
162 | } | ||
163 | EXPORT_SYMBOL_GPL(edac_debugfs_create_x16); | ||
diff --git a/drivers/edac/edac_module.h b/drivers/edac/edac_module.h index 79a6c6e20819..b95a48fc723d 100644 --- a/drivers/edac/edac_module.h +++ b/drivers/edac/edac_module.h | |||
@@ -60,17 +60,39 @@ extern void *edac_align_ptr(void **p, unsigned size, int n_elems); | |||
60 | /* | 60 | /* |
61 | * EDAC debugfs functions | 61 | * EDAC debugfs functions |
62 | */ | 62 | */ |
63 | |||
64 | #define edac_debugfs_remove_recursive debugfs_remove_recursive | ||
65 | #define edac_debugfs_remove debugfs_remove | ||
63 | #ifdef CONFIG_EDAC_DEBUG | 66 | #ifdef CONFIG_EDAC_DEBUG |
64 | int edac_debugfs_init(void); | 67 | int edac_debugfs_init(void); |
65 | void edac_debugfs_exit(void); | 68 | void edac_debugfs_exit(void); |
66 | int edac_create_debugfs_nodes(struct mem_ctl_info *mci); | 69 | int edac_create_debugfs_nodes(struct mem_ctl_info *mci); |
70 | struct dentry *edac_debugfs_create_dir(const char *dirname); | ||
71 | struct dentry * | ||
72 | edac_debugfs_create_dir_at(const char *dirname, struct dentry *parent); | ||
73 | struct dentry * | ||
74 | edac_debugfs_create_file(const char *name, umode_t mode, struct dentry *parent, | ||
75 | void *data, const struct file_operations *fops); | ||
76 | struct dentry * | ||
77 | edac_debugfs_create_x8(const char *name, umode_t mode, struct dentry *parent, u8 *value); | ||
78 | struct dentry * | ||
79 | edac_debugfs_create_x16(const char *name, umode_t mode, struct dentry *parent, u16 *value); | ||
67 | #else | 80 | #else |
68 | static inline int edac_debugfs_init(void) | 81 | static inline int edac_debugfs_init(void) { return -ENODEV; } |
69 | { | 82 | static inline void edac_debugfs_exit(void) { } |
70 | return -ENODEV; | 83 | static inline int edac_create_debugfs_nodes(struct mem_ctl_info *mci) { return 0; } |
71 | } | 84 | static inline struct dentry *edac_debugfs_create_dir(const char *dirname) { return NULL; } |
72 | static inline void edac_debugfs_exit(void) {} | 85 | static inline struct dentry * |
73 | static inline int edac_create_debugfs_nodes(struct mem_ctl_info *mci) { return 0; } | 86 | edac_debugfs_create_dir_at(const char *dirname, struct dentry *parent) { return NULL; } |
87 | static inline struct dentry * | ||
88 | edac_debugfs_create_file(const char *name, umode_t mode, struct dentry *parent, | ||
89 | void *data, const struct file_operations *fops) { return NULL; } | ||
90 | static inline struct dentry * | ||
91 | edac_debugfs_create_x8(const char *name, umode_t mode, | ||
92 | struct dentry *parent, u8 *value) { return NULL; } | ||
93 | static inline struct dentry * | ||
94 | edac_debugfs_create_x16(const char *name, umode_t mode, | ||
95 | struct dentry *parent, u16 *value) { return NULL; } | ||
74 | #endif | 96 | #endif |
75 | 97 | ||
76 | /* | 98 | /* |