diff mbox

[1/2] ALSA: hda - Create AFG sysfs node at last

Message ID 1428504299-19763-1-git-send-email-tiwai@suse.de (mailing list archive)
State Accepted
Commit 142267c9e026827ca5fa622f1f13780b6db26cf8
Headers show

Commit Message

Takashi Iwai April 8, 2015, 2:44 p.m. UTC
... 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>
---
 sound/hda/hdac_sysfs.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)
diff mbox

Patch

diff --git a/sound/hda/hdac_sysfs.c b/sound/hda/hdac_sysfs.c
index b358d5157802..18aea43d230d 100644
--- a/sound/hda/hdac_sysfs.c
+++ b/sound/hda/hdac_sysfs.c
@@ -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);
@@ -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)
@@ -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;
 }