Commit 644dbd64 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: core: Manage asound root directory with snd_info_entry

Using snd_info_entry for /proc/asound root makes easier to release the
all children, too.  Further cleanups will follow.
Acked-by: default avatarJaroslav Kysela <perex@perex.cz>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent c560a679
...@@ -78,14 +78,13 @@ struct snd_info_private_data { ...@@ -78,14 +78,13 @@ struct snd_info_private_data {
}; };
static int snd_info_version_init(void); static int snd_info_version_init(void);
static int snd_info_version_done(void);
static void snd_info_disconnect(struct snd_info_entry *entry); static void snd_info_disconnect(struct snd_info_entry *entry);
/* /*
*/ */
static struct proc_dir_entry *snd_proc_root; static struct snd_info_entry *snd_proc_root;
struct snd_info_entry *snd_seq_root; struct snd_info_entry *snd_seq_root;
EXPORT_SYMBOL(snd_seq_root); EXPORT_SYMBOL(snd_seq_root);
...@@ -462,14 +461,17 @@ static struct snd_info_entry *create_subdir(struct module *mod, ...@@ -462,14 +461,17 @@ static struct snd_info_entry *create_subdir(struct module *mod,
return entry; return entry;
} }
static struct snd_info_entry *snd_info_create_entry(const char *name);
int __init snd_info_init(void) int __init snd_info_init(void)
{ {
struct proc_dir_entry *p; snd_proc_root = snd_info_create_entry("asound");
if (!snd_proc_root)
p = proc_mkdir("asound", NULL);
if (p == NULL)
return -ENOMEM; return -ENOMEM;
snd_proc_root = p; snd_proc_root->mode = S_IFDIR | S_IRUGO | S_IXUGO;
snd_proc_root->p = proc_mkdir("asound", NULL);
if (!snd_proc_root->p)
goto error;
#ifdef CONFIG_SND_OSSEMUL #ifdef CONFIG_SND_OSSEMUL
snd_oss_root = create_subdir(THIS_MODULE, "oss"); snd_oss_root = create_subdir(THIS_MODULE, "oss");
if (!snd_oss_root) if (!snd_oss_root)
...@@ -487,10 +489,7 @@ int __init snd_info_init(void) ...@@ -487,10 +489,7 @@ int __init snd_info_init(void)
return 0; return 0;
error: error:
#ifdef CONFIG_SND_OSSEMUL snd_info_free_entry(snd_proc_root);
snd_info_free_entry(snd_oss_root);
#endif
proc_remove(snd_proc_root);
return -ENOMEM; return -ENOMEM;
} }
...@@ -499,24 +498,10 @@ int __exit snd_info_done(void) ...@@ -499,24 +498,10 @@ int __exit snd_info_done(void)
snd_card_info_done(); snd_card_info_done();
snd_minor_info_oss_done(); snd_minor_info_oss_done();
snd_minor_info_done(); snd_minor_info_done();
snd_info_version_done(); snd_info_free_entry(snd_proc_root);
if (snd_proc_root) {
#if IS_ENABLED(CONFIG_SND_SEQUENCER)
snd_info_free_entry(snd_seq_root);
#endif
#ifdef CONFIG_SND_OSSEMUL
snd_info_free_entry(snd_oss_root);
#endif
proc_remove(snd_proc_root);
}
return 0; return 0;
} }
/*
*/
/* /*
* create a card proc file * create a card proc file
* called from init.c * called from init.c
...@@ -551,7 +536,7 @@ int snd_info_card_register(struct snd_card *card) ...@@ -551,7 +536,7 @@ int snd_info_card_register(struct snd_card *card)
if (!strcmp(card->id, card->proc_root->name)) if (!strcmp(card->id, card->proc_root->name))
return 0; return 0;
p = proc_symlink(card->id, snd_proc_root, card->proc_root->name); p = proc_symlink(card->id, snd_proc_root->p, card->proc_root->name);
if (p == NULL) if (p == NULL)
return -ENOMEM; return -ENOMEM;
card->proc_root_link = p; card->proc_root_link = p;
...@@ -570,7 +555,7 @@ void snd_info_card_id_change(struct snd_card *card) ...@@ -570,7 +555,7 @@ void snd_info_card_id_change(struct snd_card *card)
} }
if (strcmp(card->id, card->proc_root->name)) if (strcmp(card->id, card->proc_root->name))
card->proc_root_link = proc_symlink(card->id, card->proc_root_link = proc_symlink(card->id,
snd_proc_root, snd_proc_root->p,
card->proc_root->name); card->proc_root->name);
mutex_unlock(&info_mutex); mutex_unlock(&info_mutex);
} }
...@@ -815,7 +800,7 @@ int snd_info_register(struct snd_info_entry * entry) ...@@ -815,7 +800,7 @@ int snd_info_register(struct snd_info_entry * entry)
if (snd_BUG_ON(!entry)) if (snd_BUG_ON(!entry))
return -ENXIO; return -ENXIO;
root = entry->parent == NULL ? snd_proc_root : entry->parent->p; root = entry->parent == NULL ? snd_proc_root->p : entry->parent->p;
mutex_lock(&info_mutex); mutex_lock(&info_mutex);
if (S_ISDIR(entry->mode)) { if (S_ISDIR(entry->mode)) {
p = proc_mkdir_mode(entry->name, entry->mode, root); p = proc_mkdir_mode(entry->name, entry->mode, root);
...@@ -850,8 +835,6 @@ EXPORT_SYMBOL(snd_info_register); ...@@ -850,8 +835,6 @@ EXPORT_SYMBOL(snd_info_register);
*/ */
static struct snd_info_entry *snd_info_version_entry;
static void snd_info_version_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer) static void snd_info_version_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
{ {
snd_iprintf(buffer, snd_iprintf(buffer,
...@@ -871,13 +854,6 @@ static int __init snd_info_version_init(void) ...@@ -871,13 +854,6 @@ static int __init snd_info_version_init(void)
snd_info_free_entry(entry); snd_info_free_entry(entry);
return -ENOMEM; return -ENOMEM;
} }
snd_info_version_entry = entry;
return 0;
}
static int __exit snd_info_version_done(void)
{
snd_info_free_entry(snd_info_version_entry);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment