mirror of
https://github.com/torvalds/linux
synced 2024-09-16 00:58:07 +00:00
ALSA: usb-audio: Apply mutex around snd_usb_endpoint_set_params()
The protection with chip->mutex was lost after splitting
snd_usb_endpoint_set_params() and snd_usb_endpoint_prepare().
Apply the same mutex again to the former function.
Fixes: 2be79d5864
("ALSA: usb-audio: Split endpoint setups for hw_params and prepare (take#2)")
Link: https://lore.kernel.org/r/20221009104212.18877-3-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
9902b303b5
commit
a74f8d0aa9
|
@ -1337,10 +1337,11 @@ int snd_usb_endpoint_set_params(struct snd_usb_audio *chip,
|
||||||
const struct audioformat *fmt = ep->cur_audiofmt;
|
const struct audioformat *fmt = ep->cur_audiofmt;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
mutex_lock(&chip->mutex);
|
||||||
/* release old buffers, if any */
|
/* release old buffers, if any */
|
||||||
err = release_urbs(ep, false);
|
err = release_urbs(ep, false);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
goto unlock;
|
||||||
|
|
||||||
ep->datainterval = fmt->datainterval;
|
ep->datainterval = fmt->datainterval;
|
||||||
ep->maxpacksize = fmt->maxpacksize;
|
ep->maxpacksize = fmt->maxpacksize;
|
||||||
|
@ -1378,13 +1379,16 @@ int snd_usb_endpoint_set_params(struct snd_usb_audio *chip,
|
||||||
usb_audio_dbg(chip, "Set up %d URBS, ret=%d\n", ep->nurbs, err);
|
usb_audio_dbg(chip, "Set up %d URBS, ret=%d\n", ep->nurbs, err);
|
||||||
|
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
goto unlock;
|
||||||
|
|
||||||
/* some unit conversions in runtime */
|
/* some unit conversions in runtime */
|
||||||
ep->maxframesize = ep->maxpacksize / ep->cur_frame_bytes;
|
ep->maxframesize = ep->maxpacksize / ep->cur_frame_bytes;
|
||||||
ep->curframesize = ep->curpacksize / ep->cur_frame_bytes;
|
ep->curframesize = ep->curpacksize / ep->cur_frame_bytes;
|
||||||
|
|
||||||
return update_clock_ref_rate(chip, ep);
|
err = update_clock_ref_rate(chip, ep);
|
||||||
|
unlock:
|
||||||
|
mutex_unlock(&chip->mutex);
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int init_sample_rate(struct snd_usb_audio *chip,
|
static int init_sample_rate(struct snd_usb_audio *chip,
|
||||||
|
|
Loading…
Reference in a new issue