On Thu, 31 May 2018 09:43:10 +0200, Zengtao (B) wrote:
Hi Takashi:
Thank you for your reply.
-----Original Message----- From: Takashi Iwai [mailto:tiwai@suse.de] Sent: Sunday, May 13, 2018 6:40 PM To: Zengtao (B) prime.zeng@hisilicon.com Cc: perex@perex.cz; tiwai@suse.com; alsa-devel@alsa-project.org; linux-kernel@vger.kernel.org Subject: Re: [alsa-devel] Timeout issues in wait_for_avail function
On Mon, 07 May 2018 12:49:34 +0200, Zengtao (B) wrote:
Hi perex and tiwai:
I have met a timeout case when capture audio from snd-usb-audio device, when the host call the pcm_read and get into the wait_for_avail
function.
The following happends
- No available data for capture(maybe because of the late response
audio data by the uac device)
Hrm, in the case of capture, the data must be available. If it's not the case, something is wrong.
- The current thread falls into sleep state and no one wakes up it.
- The current thread will sleep 10s(schedule_timeout(1000)) and then
wakeup.
I have two question about the wait_for_avail:
- The timeout value too long, is it a reasonable value?
- Is there any mechanism to wake up the thread if there is data from the
hw.
The scenario above shouldn't happen, so no need for discussion. Rather we should check why it's woken up even though no data is available.
It really happens on my platform, and anyway 10 seconds timeout seems not a reasonable value.
The timeout isn't about guaranteeing anything. It's merely a last-resort safeguard. So it *has to* be long, per definition.
That is, if you hit this timeout, it means that something is already wrong. In that case, fix the real cause instead of tweaking the timeout.
Takashi
And I don't there is any guarantee that there must be avail data when we reach wait_for_avail, in fact, inside the wait_for_avail, there is branch when no data is available.
You can check the tracepoints to see the action of PCM stream, and confirm whether it's really no data, or it's just lost by some reason (or looks as if so).
I trace the data flow, we reach the wait_for_avail function before the usb snd data arrives, so we wait until 10 seconds timeout.
Takashi
Regards Zengtao