All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH] To avoid the divide by zero error during the first execution, initialize the data type.
       [not found] <1252527563-15074-1-git-send-email-avm@ti.com>
@ 2009-09-09 20:47 ` Troy Kisky
       [not found]   ` <4AA8144A.10105-Q5RJGjKts06CY9SHAMCTRUEOCMrvLtNR@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Troy Kisky @ 2009-09-09 20:47 UTC (permalink / raw)
  To: avm; +Cc: davinci-linux-open-source, Arun Mani, alsa-devel@alsa-project.org

avm@ti.com wrote:
> From: Arun Mani <a0270733@gtcx26221.gt.design.ti.com>
> 
> Signed-off-by: Arun Mani <a0270733@gtcx26221.gt.design.ti.com>
> ---
>  sound/soc/davinci/davinci-i2s.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
> 
> diff --git a/sound/soc/davinci/davinci-i2s.c b/sound/soc/davinci/davinci-i2s.c
> index b1ea52f..61b1763 100644
> --- a/sound/soc/davinci/davinci-i2s.c
> +++ b/sound/soc/davinci/davinci-i2s.c
> @@ -104,10 +104,12 @@ enum {
>  
>  static struct davinci_pcm_dma_params davinci_i2s_pcm_out = {
>  	.name = "I2S PCM Stereo out",
> +	.data_type = 2, //Initialize the data type for playback to avoid divide by zero

You should have ".acnt = 2" also for consistency.
>  };
>  
>  static struct davinci_pcm_dma_params davinci_i2s_pcm_in = {
>  	.name = "I2S PCM Stereo in",
> +	.data_type = 2, //Initialize the data type for playback to avoid divide by zero
>  };
>  
>  struct davinci_mcbsp_dev {

And if the 1st stream is an 8-bit audio stream, will it initialize it incorrectly ???
Of course, we have formats = SNDRV_PCM_FMTBIT_S16_LE, currently so it's not an issue yet...

I don't see how data_type is not being set in davinci_i2s_hw_params
before being used in davinci_pcm_prepare.

Can prepare be called before hw_params ?

There is a "return -EINVAL" in davinci_i2s_hw_params with a
"printk(KERN_WARNING "davinci-i2s: unsupported PCM format\n")" before it.

Do you see this message in your log ?


Thanks
Troy

^ permalink raw reply	[flat|nested] 3+ messages in thread

* RE: [PATCH] To avoid the divide by zero error during the first execution, initialize the data type.
       [not found]   ` <4AA8144A.10105-Q5RJGjKts06CY9SHAMCTRUEOCMrvLtNR@public.gmane.org>
@ 2009-09-09 21:07     ` Mani, Arun
  2009-09-10  0:39       ` Troy Kisky
  0 siblings, 1 reply; 3+ messages in thread
From: Mani, Arun @ 2009-09-09 21:07 UTC (permalink / raw)
  To: Troy Kisky
  Cc: davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org,
	Arun Mani, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org

It indeed gets initialized in the hw_params. But the runtime dma parameters are not populated with the substream private data information that is gets in hw_params for the first time. I am not sure why. Any ideas?



Thanks,
Arun.

> -----Original Message-----
> From: Troy Kisky [mailto:troy.kisky-Q5RJGjKts06CY9SHAMCTRUEOCMrvLtNR@public.gmane.org]
> Sent: Wednesday, September 09, 2009 4:47 PM
> To: Mani, Arun
> Cc: davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org; alsa-devel@alsa-
> project.org; Arun Mani
> Subject: Re: [PATCH] To avoid the divide by zero error during the first
> execution, initialize the data type.
> 
> avm-l0cyMroinI0@public.gmane.org wrote:
> > From: Arun Mani <a0270733-xHf0xn1KbjXtkKqbFX7TNUJdNcTp/5TL0E9HWUfgJXw@public.gmane.org>
> >
> > Signed-off-by: Arun Mani <a0270733-xHf0xn1KbjXtkKqbFX7TNUJdNcTp/5TL0E9HWUfgJXw@public.gmane.org>
> > ---
> >  sound/soc/davinci/davinci-i2s.c |    2 ++
> >  1 files changed, 2 insertions(+), 0 deletions(-)
> >
> > diff --git a/sound/soc/davinci/davinci-i2s.c
> b/sound/soc/davinci/davinci-i2s.c
> > index b1ea52f..61b1763 100644
> > --- a/sound/soc/davinci/davinci-i2s.c
> > +++ b/sound/soc/davinci/davinci-i2s.c
> > @@ -104,10 +104,12 @@ enum {
> >
> >  static struct davinci_pcm_dma_params davinci_i2s_pcm_out = {
> >  	.name = "I2S PCM Stereo out",
> > +	.data_type = 2, //Initialize the data type for playback to avoid
> divide by zero
> 
> You should have ".acnt = 2" also for consistency.
> >  };
> >
> >  static struct davinci_pcm_dma_params davinci_i2s_pcm_in = {
> >  	.name = "I2S PCM Stereo in",
> > +	.data_type = 2, //Initialize the data type for playback to avoid
> divide by zero
> >  };
> >
> >  struct davinci_mcbsp_dev {
> 
> And if the 1st stream is an 8-bit audio stream, will it initialize it
> incorrectly ???
> Of course, we have formats = SNDRV_PCM_FMTBIT_S16_LE, currently so it's
> not an issue yet...
> 
> I don't see how data_type is not being set in davinci_i2s_hw_params
> before being used in davinci_pcm_prepare.
> 
> Can prepare be called before hw_params ?
> 
> There is a "return -EINVAL" in davinci_i2s_hw_params with a
> "printk(KERN_WARNING "davinci-i2s: unsupported PCM format\n")" before it.
> 
> Do you see this message in your log ?
> 
> 
> Thanks
> Troy
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] To avoid the divide by zero error during the first execution, initialize the data type.
  2009-09-09 21:07     ` Mani, Arun
@ 2009-09-10  0:39       ` Troy Kisky
  0 siblings, 0 replies; 3+ messages in thread
From: Troy Kisky @ 2009-09-10  0:39 UTC (permalink / raw)
  To: Mani, Arun
  Cc: davinci-linux-open-source@linux.davincidsp.com, Mark Brown,
	alsa-devel@alsa-project.org

Mani, Arun wrote:
> It indeed gets initialized in the hw_params. But the runtime dma parameters are not populated with the substream private data information that is gets in hw_params for the first time. I am not sure why. Any ideas?
> 
> 
> 
> Thanks,
> Arun.
> 

The real bug is in the routine davinci_i2s_startup.

The line

	cpu_dai->dma_data = dev->dma_params[substream->stream];


This works, as long as both streams aren't open.

playback stream
davinci_i2s_startup: P0 dma_params=c03a7680
davinci_pcm_dma_request: P0 dma_data=c03a7680
^^ saves pointer

capture stream
davinci_i2s_startup: C1 dma_params=c03a769c
^^ changes cpu_dai pointer
davinci_pcm_dma_request: C1 dma_data=c03a769c
^^ saves pointer
davinci_i2s_hw_params: data_type=2 C1 dma_params=c03a769c
^^ capture data_type=2

davinci_pcm_enqueue_dma: data_type=2 C1 c03a769c
davinci_pcm_enqueue_dma: data_type=2 C1 c03a769c

playback stream
davinci_i2s_hw_params: data_type=2 P0 dma_params=c03a769c
^^ playback dma_params is WRONG should be c03a7680

davinci_pcm_enqueue_dma: data_type=0 P0 c03a7680
^^ This uses the save dma_params value, hence data_type is still 0

Division by zero in kernel.


It seems like a lot of drivers may have this bug.

Troy

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-09-10  0:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1252527563-15074-1-git-send-email-avm@ti.com>
2009-09-09 20:47 ` [PATCH] To avoid the divide by zero error during the first execution, initialize the data type Troy Kisky
     [not found]   ` <4AA8144A.10105-Q5RJGjKts06CY9SHAMCTRUEOCMrvLtNR@public.gmane.org>
2009-09-09 21:07     ` Mani, Arun
2009-09-10  0:39       ` Troy Kisky

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.