aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/node.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2015-01-29 06:29:22 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-03-25 08:42:55 -0400
commit3c9b8aaf95bb4de3d8ac9fd83d4aca2c97bd9f2a (patch)
tree652b38a29be128c42ed64dda883728baaad008a0 /drivers/base/node.c
parent07afb6ace3bde4ffdce26befa6b2f38c5d708dd0 (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.c34
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}
201static DEVICE_ATTR(distance, S_IRUGO, node_read_distance, NULL); 201static DEVICE_ATTR(distance, S_IRUGO, node_read_distance, NULL);
202 202
203static 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
213static struct attribute_group node_dev_attr_group = {
214 .attrs = node_dev_attrs,
215};
216
217static 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 */
300void unregister_node(struct node *node) 313void 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);