All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Jon Hunter <jonathanh@nvidia.com>
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 18:19:49 +0100	[thread overview]
Message-ID: <s5hzhppqx8q.wl-tiwai@suse.de> (raw)
In-Reply-To: <1553097854-10287-1-git-send-email-jonathanh@nvidia.com>

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?


thanks,

Takashi

  reply	other threads:[~2019-03-20 17:19 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 [this message]
2019-03-20 17:59   ` Jon Hunter
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=s5hzhppqx8q.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=jonathanh@nvidia.com \
    --cc=linux-tegra@vger.kernel.org \
    --cc=spujar@nvidia.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.