Commit 75cdf416 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'sound-5.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:

 - A further fix for syzcaller issues with USB-audio, addressing NULL
   dereference that was introduced by the recent fix

 - Avoid a long delay at boot with HD-audio when i915 module was built
   but not installed, found on some Debian systems

 - A fix of small race window at PCM draining

* tag 'sound-5.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: usb-audio: Fix gpf in snd_usb_pipe_sanity_check
  ALSA: pcm: fix lost wakeup event scenarios in snd_pcm_drain
  ALSA: hda: Fix 1-minute detection delay when i915 module is not available
parents f26dbb23 5d78e1c2
...@@ -1873,6 +1873,7 @@ static int snd_pcm_drain(struct snd_pcm_substream *substream, ...@@ -1873,6 +1873,7 @@ static int snd_pcm_drain(struct snd_pcm_substream *substream,
if (!to_check) if (!to_check)
break; /* all drained */ break; /* all drained */
init_waitqueue_entry(&wait, current); init_waitqueue_entry(&wait, current);
set_current_state(TASK_INTERRUPTIBLE);
add_wait_queue(&to_check->sleep, &wait); add_wait_queue(&to_check->sleep, &wait);
snd_pcm_stream_unlock_irq(substream); snd_pcm_stream_unlock_irq(substream);
if (runtime->no_period_wakeup) if (runtime->no_period_wakeup)
...@@ -1885,7 +1886,7 @@ static int snd_pcm_drain(struct snd_pcm_substream *substream, ...@@ -1885,7 +1886,7 @@ static int snd_pcm_drain(struct snd_pcm_substream *substream,
} }
tout = msecs_to_jiffies(tout * 1000); tout = msecs_to_jiffies(tout * 1000);
} }
tout = schedule_timeout_interruptible(tout); tout = schedule_timeout(tout);
snd_pcm_stream_lock_irq(substream); snd_pcm_stream_lock_irq(substream);
group = snd_pcm_stream_group_ref(substream); group = snd_pcm_stream_group_ref(substream);
......
...@@ -136,10 +136,12 @@ int snd_hdac_i915_init(struct hdac_bus *bus) ...@@ -136,10 +136,12 @@ int snd_hdac_i915_init(struct hdac_bus *bus)
if (!acomp) if (!acomp)
return -ENODEV; return -ENODEV;
if (!acomp->ops) { if (!acomp->ops) {
request_module("i915"); if (!IS_ENABLED(CONFIG_MODULES) ||
/* 60s timeout */ !request_module("i915")) {
wait_for_completion_timeout(&bind_complete, /* 60s timeout */
msecs_to_jiffies(60 * 1000)); wait_for_completion_timeout(&bind_complete,
msecs_to_jiffies(60 * 1000));
}
} }
if (!acomp->ops) { if (!acomp->ops) {
dev_info(bus->dev, "couldn't bind with audio component\n"); dev_info(bus->dev, "couldn't bind with audio component\n");
......
...@@ -72,7 +72,7 @@ int snd_usb_pipe_sanity_check(struct usb_device *dev, unsigned int pipe) ...@@ -72,7 +72,7 @@ int snd_usb_pipe_sanity_check(struct usb_device *dev, unsigned int pipe)
struct usb_host_endpoint *ep; struct usb_host_endpoint *ep;
ep = usb_pipe_endpoint(dev, pipe); ep = usb_pipe_endpoint(dev, pipe);
if (usb_pipetype(pipe) != pipetypes[usb_endpoint_type(&ep->desc)]) if (!ep || usb_pipetype(pipe) != pipetypes[usb_endpoint_type(&ep->desc)])
return -EINVAL; return -EINVAL;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment