Skip to content

Commit

Permalink
ALSA: hda - Create AFG sysfs node at last
Browse files Browse the repository at this point in the history
... so that user-space can know that the whole nodes have been
created.  Unfortunately, this can't be implemented easily in race-free
way, so it's a kind of compromise.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Takashi Iwai committed Apr 8, 2015
1 parent e1e62b9 commit 142267c
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions sound/hda/hdac_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,12 +313,12 @@ static void widget_tree_free(struct hdac_device *codec)

if (!tree)
return;
free_widget_node(tree->afg, &widget_afg_group);
if (tree->nodes) {
for (p = tree->nodes; *p; p++)
free_widget_node(*p, &widget_node_group);
kfree(tree->nodes);
}
free_widget_node(tree->afg, &widget_afg_group);
if (tree->root)
kobject_put(tree->root);
kfree(tree);
Expand Down Expand Up @@ -362,13 +362,6 @@ static int widget_tree_create(struct hdac_device *codec)
if (!tree->root)
return -ENOMEM;

if (codec->afg) {
err = add_widget_node(tree->root, codec->afg,
&widget_afg_group, &tree->afg);
if (err < 0)
return err;
}

tree->nodes = kcalloc(codec->num_nodes + 1, sizeof(*tree->nodes),
GFP_KERNEL);
if (!tree->nodes)
Expand All @@ -381,6 +374,13 @@ static int widget_tree_create(struct hdac_device *codec)
return err;
}

if (codec->afg) {
err = add_widget_node(tree->root, codec->afg,
&widget_afg_group, &tree->afg);
if (err < 0)
return err;
}

kobject_uevent(tree->root, KOBJ_CHANGE);
return 0;
}
Expand Down

0 comments on commit 142267c

Please sign in to comment.