mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Nenghua Cao <nhcao@marvell.com>
Cc: Liam Girdwood <liam.r.girdwood@linux.intel.com>,
	"alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	Mark Brown <broonie@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [alsa-devel] [PATCH] ASoC: dpcm: don't do hw_param when BE has done	hw_param
Date: Fri, 10 Jan 2014 14:34:09 +0100	[thread overview]
Message-ID: <s5heh4gx8oe.wl%tiwai@suse.de> (raw)
In-Reply-To: <52CFE623.7090403@marvell.com>

At Fri, 10 Jan 2014 20:22:59 +0800,
Nenghua Cao wrote:
> 
> On 01/10/2014 08:01 PM, Takashi Iwai wrote:
> > At Fri, 10 Jan 2014 19:59:42 +0800,
> > Nenghua Cao wrote:
> >>
> >> On 01/10/2014 07:47 PM, Liam Girdwood wrote:
> >>> On Fri, 2014-01-10 at 19:21 +0800, Nenghua Cao wrote:
> >>>> On 01/10/2014 06:55 PM, Takashi Iwai wrote:
> >>>>> [Corrected mail addresses of both Mark and Liam]
> >>>>>
> >>>> Hi, Takashi:
> >>>> Thanks for correcting my mistake.
> >>>>> At Fri, 10 Jan 2014 13:36:35 +0800,
> >>>>> Nenghua Cao wrote:
> >>>>>>
> >>>>>> From: Nenghua Cao <nhcao@marvell.com>
> >>>>>>
> >>>>>>     It fixes the following case:
> >>>>>>     Two FEs connects the same BE; FE1 & BE path has been opened and hw_paramed.
> >>>>>> At this momment, FE2 & BE path is being opened and hw_paramed. The BE
> >>>>>> dai will do hw_param again even if it has done hw_param. It is not
> >>>>>> reasonable.
> >>>>>> FE1------------>BE
> >>>>>> FE2-------------^
> >>>>>
> >>>>> What happens if FE2 tries to set up an incompatible hw_params?
> >>>>> (Through a quick glance, it won't work properly well, too, though...)
> >>>>>
> >>>
> >>> The intention in this case would be for the DSP FE driver to determine
> >>> if it can perform format conversion or SRC to the running BE. If the DSP
> >>> cant do the conversion then it should fail.
> >>>
> >>>> If FE2 uses an incompatible param, it will make FE1 doesn't work. Maybe
> >>>> FE2 works well.
> >>>> If FE2 uses the same param, BE hw_param function will be called twice
> >>>> (This is the most happening case).
> >>>> So we can't get benefits from it.
> >>>
> >>> We shouldn't be calling the hw_params() on the BE when it's already
> >>> configured in this case. So this seems like a bug. However :-
> >>>
> >>> /* only allow hw_params() if no connected FEs are running */
> >>> 		if (!snd_soc_dpcm_can_be_params(fe, be, stream))
> >>> 			continue;
> >>>
> >>> 		if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN) &&
> >>> 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
> >>> 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE))
> >>> 			continue;
> >>>
> >>> We do do a test to check if any connected FEs are running (i.e.
> >>> triggered) prior to calling hw_params() on the BE. Can you confirm if
> >>> the FE was running in your case ?
> >>>
> >> Hi, Liam:
> >>    I am so glad to hear from you. In my case, FE1 has called hw_param,
> >> and before FE1 calls prepare/trigger function, the scheduler switches to
> >> do FE2 open, hw_param. So hw_param is called twice.
> > 
> > So basically the current implementation is racy about this.
> > 
> > OTOH, not calling hw_params twice is also buggy.  hw_params may be
> > called multiple times without hw_free for the same stream if user
> > wants to re-setup/update the parameters.  OSS emulation layer does it,
> > for example.
> >
> Hi, Takashi
> 
>   On current alsa framework, the hw_param can be called multiple time.
> Here, FE1 also can call do it.

But it won't any longer if your patch is applied, no?


Takashi

> But here we should add constraint to
> avoid another FE call it due to FE1 has choose it priority.
> 
> > 
> > Takashi
> > 
> >>
> >>> Thanks
> >>>
> >>> Liam
> >>>
> >>>>>
> >>>>> Takashi
> >>>>>
> >>>>>>
> >>>>>> Signed-off-by: Nenghua Cao <nhcao@marvell.com>
> >>>>>> ---
> >>>>>>  sound/soc/soc-pcm.c |    1 -
> >>>>>>  1 files changed, 0 insertions(+), 1 deletions(-)
> >>>>>>
> >>>>>> diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
> >>>>>> index 891b9a9..ec07e37 100644
> >>>>>> --- a/sound/soc/soc-pcm.c
> >>>>>> +++ b/sound/soc/soc-pcm.c
> >>>>>> @@ -1339,7 +1339,6 @@ static int dpcm_be_dai_hw_params(struct snd_soc_pcm_runtime *fe, int stream)
> >>>>>>  			continue;
> >>>>>>  
> >>>>>>  		if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN) &&
> >>>>>> -		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
> >>>>>>  		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE))
> >>>>>>  			continue;
> >>>>>>  
> >>>>>> -- 
> >>>>>> 1.7.0.4
> >>>>>>
> >>>>>> _______________________________________________
> >>>>>> Alsa-devel mailing list
> >>>>>> Alsa-devel@alsa-project.org
> >>>>>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> >>>>>>
> >>>>
> >>>
> >>>
> >>>
> >>
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 

  reply	other threads:[~2014-01-10 13:34 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-10  5:36 Nenghua Cao
2014-01-10 10:55 ` [alsa-devel] " Takashi Iwai
2014-01-10 11:21   ` Nenghua Cao
2014-01-10 11:47     ` Liam Girdwood
2014-01-10 11:59       ` Nenghua Cao
2014-01-10 12:01         ` Takashi Iwai
2014-01-10 12:22           ` Nenghua Cao
2014-01-10 13:34             ` Takashi Iwai [this message]
2014-01-10 12:29           ` Liam Girdwood
2014-01-10 12:51             ` Nenghua Cao
2014-01-10 13:46             ` Takashi Iwai
2014-01-10 18:43               ` Liam Girdwood
2014-01-11  9:35                 ` Takashi Iwai
2014-01-11 12:08                   ` Mark Brown
2014-01-13 10:48                   ` Liam Girdwood
2014-01-13 10:57                     ` 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=s5heh4gx8oe.wl%tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=liam.r.girdwood@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nhcao@marvell.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®