Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 681789d5 authored by Takashi Iwai's avatar Takashi Iwai Committed by Greg Kroah-Hartman
Browse files

ALSA: timer: Simplify error path in snd_timer_open()



[ Upstream commit 41672c0c24a62699d20aab53b98d843b16483053 ]

Just a minor refactoring to use the standard goto for error paths in
snd_timer_open() instead of open code.  The first mutex_lock() is
moved to the beginning of the function to make the code clearer.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent cdf8ae78
Loading
Loading
Loading
Loading
+20 −19
Original line number Diff line number Diff line
@@ -253,19 +253,20 @@ int snd_timer_open(struct snd_timer_instance **ti,
	struct snd_timer_instance *timeri = NULL;
	int err;

	mutex_lock(&register_mutex);
	if (tid->dev_class == SNDRV_TIMER_CLASS_SLAVE) {
		/* open a slave instance */
		if (tid->dev_sclass <= SNDRV_TIMER_SCLASS_NONE ||
		    tid->dev_sclass > SNDRV_TIMER_SCLASS_OSS_SEQUENCER) {
			pr_debug("ALSA: timer: invalid slave class %i\n",
				 tid->dev_sclass);
			return -EINVAL;
			err = -EINVAL;
			goto unlock;
		}
		mutex_lock(&register_mutex);
		timeri = snd_timer_instance_new(owner, NULL);
		if (!timeri) {
			mutex_unlock(&register_mutex);
			return -ENOMEM;
			err = -ENOMEM;
			goto unlock;
		}
		timeri->slave_class = tid->dev_sclass;
		timeri->slave_id = tid->device;
@@ -276,13 +277,10 @@ int snd_timer_open(struct snd_timer_instance **ti,
			snd_timer_close_locked(timeri);
			timeri = NULL;
		}
		mutex_unlock(&register_mutex);
		*ti = timeri;
		return err;
		goto unlock;
	}

	/* open a master instance */
	mutex_lock(&register_mutex);
	timer = snd_timer_find(tid);
#ifdef CONFIG_MODULES
	if (!timer) {
@@ -293,25 +291,26 @@ int snd_timer_open(struct snd_timer_instance **ti,
	}
#endif
	if (!timer) {
		mutex_unlock(&register_mutex);
		return -ENODEV;
		err = -ENODEV;
		goto unlock;
	}
	if (!list_empty(&timer->open_list_head)) {
		timeri = list_entry(timer->open_list_head.next,
				    struct snd_timer_instance, open_list);
		if (timeri->flags & SNDRV_TIMER_IFLG_EXCLUSIVE) {
			mutex_unlock(&register_mutex);
			return -EBUSY;
			err = -EBUSY;
			timeri = NULL;
			goto unlock;
		}
	}
	if (timer->num_instances >= timer->max_instances) {
		mutex_unlock(&register_mutex);
		return -EBUSY;
		err = -EBUSY;
		goto unlock;
	}
	timeri = snd_timer_instance_new(owner, timer);
	if (!timeri) {
		mutex_unlock(&register_mutex);
		return -ENOMEM;
		err = -ENOMEM;
		goto unlock;
	}
	/* take a card refcount for safe disconnection */
	if (timer->card)
@@ -320,16 +319,16 @@ int snd_timer_open(struct snd_timer_instance **ti,
	timeri->slave_id = slave_id;

	if (list_empty(&timer->open_list_head) && timer->hw.open) {
		int err = timer->hw.open(timer);
		err = timer->hw.open(timer);
		if (err) {
			kfree(timeri->owner);
			kfree(timeri);
			timeri = NULL;

			if (timer->card)
				put_device(&timer->card->card_dev);
			module_put(timer->module);
			mutex_unlock(&register_mutex);
			return err;
			goto unlock;
		}
	}

@@ -340,6 +339,8 @@ int snd_timer_open(struct snd_timer_instance **ti,
		snd_timer_close_locked(timeri);
		timeri = NULL;
	}

 unlock:
	mutex_unlock(&register_mutex);
	*ti = timeri;
	return err;