diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-01-29 12:29:22 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-03-25 13:42:55 +0100 |
commit | 3c9b8aaf95bb4de3d8ac9fd83d4aca2c97bd9f2a (patch) | |
tree | 652b38a29be128c42ed64dda883728baaad008a0 /drivers/base | |
parent | 07afb6ace3bde4ffdce26befa6b2f38c5d708dd0 (diff) | |
download | lwn-3c9b8aaf95bb4de3d8ac9fd83d4aca2c97bd9f2a.tar.gz lwn-3c9b8aaf95bb4de3d8ac9fd83d4aca2c97bd9f2a.zip |
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')
-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, } static DEVICE_ATTR(distance, S_IRUGO, node_read_distance, NULL); +static struct attribute *node_dev_attrs[] = { + &dev_attr_cpumap.attr, + &dev_attr_cpulist.attr, + &dev_attr_meminfo.attr, + &dev_attr_numastat.attr, + &dev_attr_distance.attr, + &dev_attr_vmstat.attr, + NULL +}; + +static struct attribute_group node_dev_attr_group = { + .attrs = node_dev_attrs, +}; + +static const struct attribute_group *node_dev_attr_groups[] = { + &node_dev_attr_group, + NULL +}; + #ifdef CONFIG_HUGETLBFS /* * hugetlbfs per node attributes registration interface: @@ -273,16 +292,10 @@ static int register_node(struct node *node, int num, struct node *parent) node->dev.id = num; node->dev.bus = &node_subsys; node->dev.release = node_device_release; + node->dev.groups = node_dev_attr_groups; error = device_register(&node->dev); if (!error){ - device_create_file(&node->dev, &dev_attr_cpumap); - device_create_file(&node->dev, &dev_attr_cpulist); - device_create_file(&node->dev, &dev_attr_meminfo); - device_create_file(&node->dev, &dev_attr_numastat); - device_create_file(&node->dev, &dev_attr_distance); - device_create_file(&node->dev, &dev_attr_vmstat); - hugetlb_register_node(node); compaction_register_node(node); @@ -299,13 +312,6 @@ static int register_node(struct node *node, int num, struct node *parent) */ void unregister_node(struct node *node) { - device_remove_file(&node->dev, &dev_attr_cpumap); - device_remove_file(&node->dev, &dev_attr_cpulist); - device_remove_file(&node->dev, &dev_attr_meminfo); - device_remove_file(&node->dev, &dev_attr_numastat); - device_remove_file(&node->dev, &dev_attr_distance); - device_remove_file(&node->dev, &dev_attr_vmstat); - hugetlb_unregister_node(node); /* no-op, if memoryless node */ device_unregister(&node->dev); |