diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-01-29 06:29:22 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-03-25 08:42:55 -0400 |
commit | 3c9b8aaf95bb4de3d8ac9fd83d4aca2c97bd9f2a (patch) | |
tree | 652b38a29be128c42ed64dda883728baaad008a0 /drivers/base/node.c | |
parent | 07afb6ace3bde4ffdce26befa6b2f38c5d708dd0 (diff) |
drivers/base/node: Avoid manual device_create_file() calls
Instead of manual calls of multiple device_create_file() and
device_remove_file(), use the static attribute groups assigned to the
new device. This also fixes the possible races, too.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base/node.c')
-rw-r--r-- | drivers/base/node.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/drivers/base/node.c b/drivers/base/node.c index 36fabe43cd44..06dce51e42e7 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c | |||
@@ -200,6 +200,25 @@ static ssize_t node_read_distance(struct device *dev, | |||
200 | } | 200 | } |
201 | static DEVICE_ATTR(distance, S_IRUGO, node_read_distance, NULL); | 201 | static DEVICE_ATTR(distance, S_IRUGO, node_read_distance, NULL); |
202 | 202 | ||
203 | static struct attribute *node_dev_attrs[] = { | ||
204 | &dev_attr_cpumap.attr, | ||
205 | &dev_attr_cpulist.attr, | ||
206 | &dev_attr_meminfo.attr, | ||
207 | &dev_attr_numastat.attr, | ||
208 | &dev_attr_distance.attr, | ||
209 | &dev_attr_vmstat.attr, | ||
210 | NULL | ||
211 | }; | ||
212 | |||
213 | static struct attribute_group node_dev_attr_group = { | ||
214 | .attrs = node_dev_attrs, | ||
215 | }; | ||
216 | |||
217 | static const struct attribute_group *node_dev_attr_groups[] = { | ||
218 | &node_dev_attr_group, | ||
219 | NULL | ||
220 | }; | ||
221 | |||
203 | #ifdef CONFIG_HUGETLBFS | 222 | #ifdef CONFIG_HUGETLBFS |
204 | /* | 223 | /* |
205 | * hugetlbfs per node attributes registration interface: | 224 | * hugetlbfs per node attributes registration interface: |
@@ -273,16 +292,10 @@ static int register_node(struct node *node, int num, struct node *parent) | |||
273 | node->dev.id = num; | 292 | node->dev.id = num; |
274 | node->dev.bus = &node_subsys; | 293 | node->dev.bus = &node_subsys; |
275 | node->dev.release = node_device_release; | 294 | node->dev.release = node_device_release; |
295 | node->dev.groups = node_dev_attr_groups; | ||
276 | error = device_register(&node->dev); | 296 | error = device_register(&node->dev); |
277 | 297 | ||
278 | if (!error){ | 298 | if (!error){ |
279 | device_create_file(&node->dev, &dev_attr_cpumap); | ||
280 | device_create_file(&node->dev, &dev_attr_cpulist); | ||
281 | device_create_file(&node->dev, &dev_attr_meminfo); | ||
282 | device_create_file(&node->dev, &dev_attr_numastat); | ||
283 | device_create_file(&node->dev, &dev_attr_distance); | ||
284 | device_create_file(&node->dev, &dev_attr_vmstat); | ||
285 | |||
286 | hugetlb_register_node(node); | 299 | hugetlb_register_node(node); |
287 | 300 | ||
288 | compaction_register_node(node); | 301 | compaction_register_node(node); |
@@ -299,13 +312,6 @@ static int register_node(struct node *node, int num, struct node *parent) | |||
299 | */ | 312 | */ |
300 | void unregister_node(struct node *node) | 313 | void unregister_node(struct node *node) |
301 | { | 314 | { |
302 | device_remove_file(&node->dev, &dev_attr_cpumap); | ||
303 | device_remove_file(&node->dev, &dev_attr_cpulist); | ||
304 | device_remove_file(&node->dev, &dev_attr_meminfo); | ||
305 | device_remove_file(&node->dev, &dev_attr_numastat); | ||
306 | device_remove_file(&node->dev, &dev_attr_distance); | ||
307 | device_remove_file(&node->dev, &dev_attr_vmstat); | ||
308 | |||
309 | hugetlb_unregister_node(node); /* no-op, if memoryless node */ | 315 | hugetlb_unregister_node(node); /* no-op, if memoryless node */ |
310 | 316 | ||
311 | device_unregister(&node->dev); | 317 | device_unregister(&node->dev); |