]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ALSA: pcm: Unify snd_pcm_group initialization
authorTakashi Iwai <tiwai@suse.de>
Sun, 13 Jan 2019 08:35:17 +0000 (09:35 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 21 Jan 2019 15:39:35 +0000 (16:39 +0100)
There are multiple open codes that initialize the same object.
Create a common helper function instead.

Also, use kzalloc() to be safer at creating a group object, and move
the initialization out of the critical section.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/pcm.c
sound/core/pcm_local.h
sound/core/pcm_native.c

index 01b9d62eef14db9f22bd1fb67bcaf5456f791d38..88a2998f4f9bd88c09522869bd62e8354c6e2f16 100644 (file)
@@ -753,9 +753,7 @@ int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count)
                        }
                }
                substream->group = &substream->self_group;
-               spin_lock_init(&substream->self_group.lock);
-               mutex_init(&substream->self_group.mutex);
-               INIT_LIST_HEAD(&substream->self_group.substreams);
+               snd_pcm_group_init(&substream->self_group);
                list_add_tail(&substream->link_list, &substream->self_group.substreams);
                atomic_set(&substream->mmap_count, 0);
                prev = substream;
index c515612969a474485b2a843591a15a42605e8a0a..0b4b5dfaec181924423eff390866ab95ec8044c3 100644 (file)
@@ -66,5 +66,6 @@ static inline void snd_pcm_timer_done(struct snd_pcm_substream *substream) {}
 #endif
 
 void __snd_pcm_xrun(struct snd_pcm_substream *substream);
+void snd_pcm_group_init(struct snd_pcm_group *group);
 
 #endif /* __SOUND_CORE_PCM_LOCAL_H */
index c72dfd1fc1ed94b36d4dbf52394f03df0da001e3..9e4e289e57034a70bc0d0adf271835f48417ef87 100644 (file)
@@ -100,6 +100,13 @@ static inline void down_write_nonfifo(struct rw_semaphore *lock)
                msleep(1);
 }
 
+void snd_pcm_group_init(struct snd_pcm_group *group)
+{
+       spin_lock_init(&group->lock);
+       mutex_init(&group->mutex);
+       INIT_LIST_HEAD(&group->substreams);
+}
+
 #define PCM_LOCK_DEFAULT       0
 #define PCM_LOCK_IRQ   1
 #define PCM_LOCK_IRQSAVE       2
@@ -1969,11 +1976,12 @@ static int snd_pcm_link(struct snd_pcm_substream *substream, int fd)
        }
        pcm_file = f.file->private_data;
        substream1 = pcm_file->substream;
-       group = kmalloc(sizeof(*group), GFP_KERNEL);
+       group = kzalloc(sizeof(*group), GFP_KERNEL);
        if (!group) {
                res = -ENOMEM;
                goto _nolock;
        }
+       snd_pcm_group_init(group);
        down_write_nonfifo(&snd_pcm_link_rwsem);
        write_lock_irq(&snd_pcm_link_rwlock);
        if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN ||
@@ -1989,9 +1997,6 @@ static int snd_pcm_link(struct snd_pcm_substream *substream, int fd)
        if (!snd_pcm_stream_linked(substream)) {
                substream->group = group;
                group = NULL;
-               spin_lock_init(&substream->group->lock);
-               mutex_init(&substream->group->mutex);
-               INIT_LIST_HEAD(&substream->group->substreams);
                list_add_tail(&substream->link_list, &substream->group->substreams);
                substream->group->count = 1;
        }