mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 18:52:02 +00:00
ALSA: pcm: Allow drivers to set R/W wait time.
Currently ALSA core blocks userspace for about 10 seconds for PCM R/W IO. This needs to be configurable for modern hardware like DSPs where no pointer update in milliseconds can indicate terminal DSP errors. Add a substream variable to set the wait time in ms. This allows userspace and drivers to recover more quickly from terminal DSP errors. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
e647f5a5c5
commit
d64c5cf8e8
@ -462,6 +462,7 @@ struct snd_pcm_substream {
|
||||
/* -- timer section -- */
|
||||
struct snd_timer *timer; /* timer */
|
||||
unsigned timer_running: 1; /* time is running */
|
||||
long wait_time; /* time in ms for R/W to wait for avail */
|
||||
/* -- next substream -- */
|
||||
struct snd_pcm_substream *next;
|
||||
/* -- linked substreams -- */
|
||||
|
@ -1833,12 +1833,19 @@ static int wait_for_avail(struct snd_pcm_substream *substream,
|
||||
if (runtime->no_period_wakeup)
|
||||
wait_time = MAX_SCHEDULE_TIMEOUT;
|
||||
else {
|
||||
wait_time = 10;
|
||||
if (runtime->rate) {
|
||||
long t = runtime->period_size * 2 / runtime->rate;
|
||||
wait_time = max(t, wait_time);
|
||||
/* use wait time from substream if available */
|
||||
if (substream->wait_time) {
|
||||
wait_time = substream->wait_time;
|
||||
} else {
|
||||
wait_time = 10;
|
||||
|
||||
if (runtime->rate) {
|
||||
long t = runtime->period_size * 2 /
|
||||
runtime->rate;
|
||||
wait_time = max(t, wait_time);
|
||||
}
|
||||
wait_time = msecs_to_jiffies(wait_time * 1000);
|
||||
}
|
||||
wait_time = msecs_to_jiffies(wait_time * 1000);
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
|
Loading…
Reference in New Issue
Block a user