From: Jon Hunter <jonathanh@nvidia.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: linux-tegra@vger.kernel.org, alsa-devel@alsa-project.org,
Sameer Pujar <spujar@nvidia.com>
Subject: Re: [PROBLEM] ALSA: hda: PCM streams are suspended while opening
Date: Wed, 20 Mar 2019 17:59:58 +0000 [thread overview]
Message-ID: <446faef9-a114-1b28-5636-a30bae04fa53@nvidia.com> (raw)
In-Reply-To: <s5hzhppqx8q.wl-tiwai@suse.de>
On 20/03/2019 17:19, Takashi Iwai wrote:
> On Wed, 20 Mar 2019 17:04:14 +0100,
> Jon Hunter wrote:
>>
>> From: Jonathan Hunter <jonathanh@nvidia.com>
>>
>> This issue is not observed on the latest mainline kernel since the
>> 'ALSA: PCM suspend cleanup' series has been applied and the
>> snd_pcm_suspend_all() function call in the HDA codec driver has been
>> removed. However, this issue impacts stable kernel branches and so I
>> am trying to find a solution for these branches.
>>
>> When stress testing audio playback across multiple HDA streams
>> simultaneously, the following failure is sometimes observed when
>> starting playback ...
>>
>> Unable to set hw params for playback: File descriptor in bad state
>>
>> The problem is caused because ...
>> 1. Playback is starting for one HDA codec and so the chip->open_mutex
>> in azx_pcm_open() has been acquired.
>> 2. Playback for another HDA codec is starting but is blocked waiting to
>> acquire the chip->open_mutex in azx_pcm_open().
>> 3. For the HDA codec that is blocked, its runtime-pm status is still
>> enabled from a previous playback session that has since completed and
>> been closed, however its autosuspend timeout has not expired yet.
>> 4. For the HDA codec that is blocked, the runtime-pm autosuspend timeout
>> now occurs calling the runtime-pm suspend callback and this calls
>> snd_pcm_suspend_all() placing all PCM streams in the suspended state.
>> 5. The block HDA codec is now unblocked and fails to set the HW params
>> because the PCM stream is in the suspended state.
>>
>> The above has been observed on Tegra platforms where the autosuspend
>> delay is set to 1 second and there is a delay to an AZX command. This
>> highlights that there is a window of time where autosuspend can place
>> the HDA PCM stream in the suspended state while opening the stream
>> and cause playback to fail.
>>
>> Looking at commit 3d21ef0b49f8 ('ALSA: pcm: Suspend streams globally via
>> device type PM ops') it appears that the call to snd_pcm_suspend_all()
>> has now been moved to the to the suspend handler for PCM streams and so
>> I am wondering if it would be equivalent to make the following change to
>> the HDA codec driver to achieve the same behaviour but only for the HDA
>> driver. So far the issue has not been observed with this change.
>>
>> Please note that I am not sending this as a formal patch as I wanted to
>> get some feedback/comments on the above.
>
> I guess just backporting 3d21ef0b49f8 should be OK even for older
> kernels. This assures the PCM stream gets suspended before entering
> any parent device suspend call.
>
> The remaining changes (except for the one for atiixp) are merely
> cleanup of superfluous calls, and keeping them are harmless.
>
> Could you check whether my theory above correct?
I believe that you will need that change and 17bc4815de58 because we
need to prevent snd_pcm_suspend_all() being called in the pm-runtime
suspend callback. Applying only 3d21ef0b49f8 will means that at runtime
snd_pcm_suspend_all() can still be called from within the HDA codec
driver when the autosuspend timeout occurs. I will test this and
confirm. Maybe both could be backported?
Cheers
Jon
--
nvpublic
next prev parent reply other threads:[~2019-03-20 17:59 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-20 16:04 [PROBLEM] ALSA: hda: PCM streams are suspended while opening Jon Hunter
2019-03-20 17:19 ` Takashi Iwai
2019-03-20 17:59 ` Jon Hunter [this message]
2019-03-21 14:28 ` Jon Hunter
2019-03-25 9:59 ` Takashi Iwai
2019-03-25 10:19 ` Jon Hunter
2019-03-25 10:29 ` Takashi Iwai
2019-03-25 15:31 ` Jon Hunter
2019-03-25 15:36 ` Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=446faef9-a114-1b28-5636-a30bae04fa53@nvidia.com \
--to=jonathanh@nvidia.com \
--cc=alsa-devel@alsa-project.org \
--cc=linux-tegra@vger.kernel.org \
--cc=spujar@nvidia.com \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox