mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 03:50:53 +07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: ALSA: remove unneeded power_mutex lock in snd_pcm_drop ALSA: fix locking in snd_pcm_open*() and snd_rawmidi_open*()
This commit is contained in:
commit
94715da363
@ -781,7 +781,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream,
|
||||
return -ENODEV;
|
||||
|
||||
card = pcm->card;
|
||||
down_read(&card->controls_rwsem);
|
||||
read_lock(&card->ctl_files_rwlock);
|
||||
list_for_each_entry(kctl, &card->ctl_files, list) {
|
||||
if (kctl->pid == current->pid) {
|
||||
prefer_subdevice = kctl->prefer_pcm_subdevice;
|
||||
@ -789,7 +789,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream,
|
||||
break;
|
||||
}
|
||||
}
|
||||
up_read(&card->controls_rwsem);
|
||||
read_unlock(&card->ctl_files_rwlock);
|
||||
|
||||
switch (stream) {
|
||||
case SNDRV_PCM_STREAM_PLAYBACK:
|
||||
|
@ -1546,16 +1546,10 @@ static int snd_pcm_drop(struct snd_pcm_substream *substream)
|
||||
card = substream->pcm->card;
|
||||
|
||||
if (runtime->status->state == SNDRV_PCM_STATE_OPEN ||
|
||||
runtime->status->state == SNDRV_PCM_STATE_DISCONNECTED)
|
||||
runtime->status->state == SNDRV_PCM_STATE_DISCONNECTED ||
|
||||
runtime->status->state == SNDRV_PCM_STATE_SUSPENDED)
|
||||
return -EBADFD;
|
||||
|
||||
snd_power_lock(card);
|
||||
if (runtime->status->state == SNDRV_PCM_STATE_SUSPENDED) {
|
||||
result = snd_power_wait(card, SNDRV_CTL_POWER_D0);
|
||||
if (result < 0)
|
||||
goto _unlock;
|
||||
}
|
||||
|
||||
snd_pcm_stream_lock_irq(substream);
|
||||
/* resume pause */
|
||||
if (runtime->status->state == SNDRV_PCM_STATE_PAUSED)
|
||||
@ -1564,8 +1558,7 @@ static int snd_pcm_drop(struct snd_pcm_substream *substream)
|
||||
snd_pcm_stop(substream, SNDRV_PCM_STATE_SETUP);
|
||||
/* runtime->control->appl_ptr = runtime->status->hw_ptr; */
|
||||
snd_pcm_stream_unlock_irq(substream);
|
||||
_unlock:
|
||||
snd_power_unlock(card);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -418,7 +418,7 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file)
|
||||
mutex_lock(&rmidi->open_mutex);
|
||||
while (1) {
|
||||
subdevice = -1;
|
||||
down_read(&card->controls_rwsem);
|
||||
read_lock(&card->ctl_files_rwlock);
|
||||
list_for_each_entry(kctl, &card->ctl_files, list) {
|
||||
if (kctl->pid == current->pid) {
|
||||
subdevice = kctl->prefer_rawmidi_subdevice;
|
||||
@ -426,7 +426,7 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file)
|
||||
break;
|
||||
}
|
||||
}
|
||||
up_read(&card->controls_rwsem);
|
||||
read_unlock(&card->ctl_files_rwlock);
|
||||
err = snd_rawmidi_kernel_open(rmidi->card, rmidi->device,
|
||||
subdevice, fflags, rawmidi_file);
|
||||
if (err >= 0)
|
||||
|
Loading…
Reference in New Issue
Block a user