mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 11:03:43 +02:00
sound fixes for 5.4-rc8 or final
A few small last-minute fixes for USB-audio and HD-audio as well
as for PCM core:
- A race fix for PCM core between stopping and closing a stream
- USB-audio regressions in the recent descriptor validation code
and relevant changes
- A read of uninitialized value in USB-audio spotted by fuzzer
- A fix for USB-audio race at stopping a stream
- Intel HD-audio platform fixes
-----BEGIN PGP SIGNATURE-----
iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAl3OeB0OHHRpd2FpQHN1
c2UuZGUACgkQLtJE4w1nLE9o3A//dMLovdLBlPVw29a2xdL5vbfDn/DB81Hh1nKl
c7h4MSae5anqVG3Q9dCysPbENanx9sggVsFILhaHVF/h+ux8GLih6kwIrHr0PUy7
lTfdRwiUH7QdsubQmXO6iGefDGX26Bdr4gO5LLHbvFj5vv1CKESHIzcCLsShKCV3
FfFEaYjdo/w/A5RALaW9ZEdPWcI8oerYeOmXa3ixxAlhuGn8BahBHa4Dwztdylag
o/cWeErkwdVyQBM9FjOxDnh8ufU7qEUPo1NrcFXRi6y3iajRGwEh7JMD0s2n6ikK
qg+xaxpa+BJbPYWwen+AC+5FFNlR9JIcftf9YsXfDtpX0b6xuoh7lWbAX5mi+pCd
LbY/JnSSg3u9hUQfy1a26SGx9an2RLqqowg1tJPRbGi6B30tMySmG9DcPozn9eDQ
ZSR/V5TZ3JJW6c7hnC5mGLh4HLXqeKq1CVyvdwzDC05cUZR9q1cKHqeEbQ0BSXVg
87ZKOj3U2/UNjWjuU96s0H+F/CzUzj+KE/6S9tZyJHvZpxRUoDkY1LbBaHSj5RtF
G5fPPlgB2LhrtOBnkCYjTtiIJmXwhp7B3YARgJXHGGpy48vrsN8OCnnTxBxGj5FG
Er+sFzPydxauFf+vnZS9AggoCbA8HNrN+cFyQYztCdY57VhIYsA0dmqCozPqGVHx
BuT83oY=
=Xx2C
-----END PGP SIGNATURE-----
Merge tag 'sound-5.4-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai:
"A few small last-minute fixes for USB-audio and HD-audio as well as
for PCM core:
- A race fix for PCM core between stopping and closing a stream
- USB-audio regressions in the recent descriptor validation code and
relevant changes
- A read of uninitialized value in USB-audio spotted by fuzzer
- A fix for USB-audio race at stopping a stream
- Intel HD-audio platform fixes"
* tag 'sound-5.4-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: usb-audio: Fix incorrect size check for processing/extension units
ALSA: usb-audio: Fix incorrect NULL check in create_yamaha_midi_quirk()
ALSA: pcm: Fix stream lock usage in snd_pcm_period_elapsed()
ALSA: usb-audio: not submit urb for stopped endpoint
ALSA: hda: hdmi - fix pin setup on Tigerlake
ALSA: hda: Add Cometlake-S PCI ID
ALSA: usb-audio: Fix missing error check at mixer resolution test
This commit is contained in:
commit
11ac7cc88b
|
|
@ -1782,11 +1782,14 @@ void snd_pcm_period_elapsed(struct snd_pcm_substream *substream)
|
|||
struct snd_pcm_runtime *runtime;
|
||||
unsigned long flags;
|
||||
|
||||
if (PCM_RUNTIME_CHECK(substream))
|
||||
if (snd_BUG_ON(!substream))
|
||||
return;
|
||||
runtime = substream->runtime;
|
||||
|
||||
snd_pcm_stream_lock_irqsave(substream, flags);
|
||||
if (PCM_RUNTIME_CHECK(substream))
|
||||
goto _unlock;
|
||||
runtime = substream->runtime;
|
||||
|
||||
if (!snd_pcm_running(substream) ||
|
||||
snd_pcm_update_hw_ptr0(substream, 1) < 0)
|
||||
goto _end;
|
||||
|
|
@ -1797,6 +1800,7 @@ void snd_pcm_period_elapsed(struct snd_pcm_substream *substream)
|
|||
#endif
|
||||
_end:
|
||||
kill_fasync(&runtime->fasync, SIGIO, POLL_IN);
|
||||
_unlock:
|
||||
snd_pcm_stream_unlock_irqrestore(substream, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(snd_pcm_period_elapsed);
|
||||
|
|
|
|||
|
|
@ -2396,6 +2396,9 @@ static const struct pci_device_id azx_ids[] = {
|
|||
/* CometLake-H */
|
||||
{ PCI_DEVICE(0x8086, 0x06C8),
|
||||
.driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
|
||||
/* CometLake-S */
|
||||
{ PCI_DEVICE(0x8086, 0xa3f0),
|
||||
.driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
|
||||
/* Icelake */
|
||||
{ PCI_DEVICE(0x8086, 0x34c8),
|
||||
.driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
|
||||
|
|
|
|||
|
|
@ -46,10 +46,12 @@ MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info");
|
|||
((codec)->core.vendor_id == 0x80862800))
|
||||
#define is_cannonlake(codec) ((codec)->core.vendor_id == 0x8086280c)
|
||||
#define is_icelake(codec) ((codec)->core.vendor_id == 0x8086280f)
|
||||
#define is_tigerlake(codec) ((codec)->core.vendor_id == 0x80862812)
|
||||
#define is_haswell_plus(codec) (is_haswell(codec) || is_broadwell(codec) \
|
||||
|| is_skylake(codec) || is_broxton(codec) \
|
||||
|| is_kabylake(codec) || is_geminilake(codec) \
|
||||
|| is_cannonlake(codec) || is_icelake(codec))
|
||||
|| is_cannonlake(codec) || is_icelake(codec) \
|
||||
|| is_tigerlake(codec))
|
||||
#define is_valleyview(codec) ((codec)->core.vendor_id == 0x80862882)
|
||||
#define is_cherryview(codec) ((codec)->core.vendor_id == 0x80862883)
|
||||
#define is_valleyview_plus(codec) (is_valleyview(codec) || is_cherryview(codec))
|
||||
|
|
|
|||
|
|
@ -388,6 +388,9 @@ static void snd_complete_urb(struct urb *urb)
|
|||
}
|
||||
|
||||
prepare_outbound_urb(ep, ctx);
|
||||
/* can be stopped during prepare callback */
|
||||
if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags)))
|
||||
goto exit_clear;
|
||||
} else {
|
||||
retire_inbound_urb(ep, ctx);
|
||||
/* can be stopped during retire callback */
|
||||
|
|
|
|||
|
|
@ -1229,7 +1229,8 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
|
|||
if (cval->min + cval->res < cval->max) {
|
||||
int last_valid_res = cval->res;
|
||||
int saved, test, check;
|
||||
get_cur_mix_raw(cval, minchn, &saved);
|
||||
if (get_cur_mix_raw(cval, minchn, &saved) < 0)
|
||||
goto no_res_check;
|
||||
for (;;) {
|
||||
test = saved;
|
||||
if (test < cval->max)
|
||||
|
|
@ -1249,6 +1250,7 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
|
|||
snd_usb_set_cur_mix_value(cval, minchn, 0, saved);
|
||||
}
|
||||
|
||||
no_res_check:
|
||||
cval->initialized = 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -248,8 +248,8 @@ static int create_yamaha_midi_quirk(struct snd_usb_audio *chip,
|
|||
NULL, USB_MS_MIDI_OUT_JACK);
|
||||
if (!injd && !outjd)
|
||||
return -ENODEV;
|
||||
if (!(injd && snd_usb_validate_midi_desc(injd)) ||
|
||||
!(outjd && snd_usb_validate_midi_desc(outjd)))
|
||||
if ((injd && !snd_usb_validate_midi_desc(injd)) ||
|
||||
(outjd && !snd_usb_validate_midi_desc(outjd)))
|
||||
return -ENODEV;
|
||||
if (injd && (injd->bLength < 5 ||
|
||||
(injd->bJackType != USB_MS_EMBEDDED &&
|
||||
|
|
|
|||
|
|
@ -81,9 +81,9 @@ static bool validate_processing_unit(const void *p,
|
|||
switch (v->protocol) {
|
||||
case UAC_VERSION_1:
|
||||
default:
|
||||
/* bNrChannels, wChannelConfig, iChannelNames, bControlSize */
|
||||
len += 1 + 2 + 1 + 1;
|
||||
if (d->bLength < len) /* bControlSize */
|
||||
/* bNrChannels, wChannelConfig, iChannelNames */
|
||||
len += 1 + 2 + 1;
|
||||
if (d->bLength < len + 1) /* bControlSize */
|
||||
return false;
|
||||
m = hdr[len];
|
||||
len += 1 + m + 1; /* bControlSize, bmControls, iProcessing */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user