[alsa-devel] [PATCH 00/11] ALSA: procfs cleanups

Takashi Iwai tiwai at suse.de
Tue Feb 5 16:58:15 CET 2019


On Mon, 04 Feb 2019 16:20:25 +0100,
Takashi Iwai wrote:
> 
> Hi,
> 
> this is a patchset for cleaning up the procfs handling.
> 
> The first three patches are to remove the superfluous
> snd_info_register() calls (which are done eventually at the card
> creation time), and the rest patches are for introducing new helpers
> and cleaning up with them.  The latter has no functional changes but
> only reducing lots of codes.

I forgot to include the patch below in the previous submission;
otherwise this series would hit a creation-before-registration and
sysfs warning.  This has to be applied before others.

Also, I found a few other superfluous snd_info_register() calls in the
whole tree.  Will submit those patches soon later.

FYI, the latest patches are found in topic/proc-fixes branch of sound
git tree.


thanks,

Takashi

-- 8< --
From: Takashi Iwai <tiwai at suse.de>
Subject: [PATCH] ALSA: info: Always register entries recursively

Make sure that all children entries are registered by a single call of
snd_info_register().  OTOH, don't register if a parent isn't
registered yet.

This allows us to create the whole procfs tree in a shot at the last
stage of card registration phase in a later patch.

Signed-off-by: Takashi Iwai <tiwai at suse.de>
---
 sound/core/info.c | 65 +++++++++++++++++++++++++++++--------------------------
 1 file changed, 34 insertions(+), 31 deletions(-)

diff --git a/sound/core/info.c b/sound/core/info.c
index 2dfb6389c084..5cd00629c0f5 100644
--- a/sound/core/info.c
+++ b/sound/core/info.c
@@ -523,27 +523,6 @@ int snd_info_card_create(struct snd_card *card)
 	return 0;
 }
 
-/* register all pending info entries */
-static int snd_info_register_recursive(struct snd_info_entry *entry)
-{
-	struct snd_info_entry *p;
-	int err;
-
-	if (!entry->p) {
-		err = snd_info_register(entry);
-		if (err < 0)
-			return err;
-	}
-
-	list_for_each_entry(p, &entry->children, list) {
-		err = snd_info_register_recursive(p);
-		if (err < 0)
-			return err;
-	}
-
-	return 0;
-}
-
 /*
  * register the card proc file
  * called from init.c
@@ -557,7 +536,7 @@ int snd_info_card_register(struct snd_card *card)
 	if (snd_BUG_ON(!card))
 		return -ENXIO;
 
-	err = snd_info_register_recursive(card->proc_root);
+	err = snd_info_register(card->proc_root);
 	if (err < 0)
 		return err;
 
@@ -821,15 +800,7 @@ void snd_info_free_entry(struct snd_info_entry * entry)
 }
 EXPORT_SYMBOL(snd_info_free_entry);
 
-/**
- * snd_info_register - register the info entry
- * @entry: the info entry
- *
- * Registers the proc info entry.
- *
- * Return: Zero if successful, or a negative error code on failure.
- */
-int snd_info_register(struct snd_info_entry * entry)
+static int __snd_info_register(struct snd_info_entry *entry)
 {
 	struct proc_dir_entry *root, *p = NULL;
 
@@ -837,6 +808,8 @@ int snd_info_register(struct snd_info_entry * entry)
 		return -ENXIO;
 	root = entry->parent == NULL ? snd_proc_root->p : entry->parent->p;
 	mutex_lock(&info_mutex);
+	if (entry->p || !root)
+		goto unlock;
 	if (S_ISDIR(entry->mode)) {
 		p = proc_mkdir_mode(entry->name, entry->mode, root);
 		if (!p) {
@@ -858,9 +831,39 @@ int snd_info_register(struct snd_info_entry * entry)
 		proc_set_size(p, entry->size);
 	}
 	entry->p = p;
+ unlock:
 	mutex_unlock(&info_mutex);
 	return 0;
 }
+
+/**
+ * snd_info_register - register the info entry
+ * @entry: the info entry
+ *
+ * Registers the proc info entry.
+ * The all children entries are registered recursively.
+ *
+ * Return: Zero if successful, or a negative error code on failure.
+ */
+int snd_info_register(struct snd_info_entry *entry)
+{
+	struct snd_info_entry *p;
+	int err;
+
+	if (!entry->p) {
+		err = __snd_info_register(entry);
+		if (err < 0)
+			return err;
+	}
+
+	list_for_each_entry(p, &entry->children, list) {
+		err = snd_info_register(p);
+		if (err < 0)
+			return err;
+	}
+
+	return 0;
+}
 EXPORT_SYMBOL(snd_info_register);
 
 /*
-- 
2.16.4



More information about the Alsa-devel mailing list