[alsa-devel] ASoC: davinci-mcasp: Set rule constraints if implicit BCLK divider is used

Dan Carpenter dan.carpenter at oracle.com
Mon Apr 13 15:58:20 CEST 2015


On Mon, Apr 13, 2015 at 04:32:24PM +0300, Jyri Sarha wrote:
> On 04/13/15 15:16, Dan Carpenter wrote:
> >Thanks for looking at this.  I haven't double checked your analysis, but
> >512 means the stack is 2k and that's too high.  I think there is
> >supposed to be a build warning if we use more than 1k of stack in a
> >function?
> >
> >It's better to allocate it with kmalloc() and free it at the end.
> >
> >regards,
> >dan carpenter
> >
> 
> The function may get called hundreds or even thousands of times when
> an audio stream is started. How heavy is kmalloc/free cycle?
> 
> Using kmalloc just feels a bit stupid since in any remotely feasible
> case the maximum number of channels is 8. But maybe I just should
> not care.

I'm a total newbie to this specific so I can't really advise you.  I
did find the limit where GCC prints a warning:

home/kisskb/slave/src/net/rds/iw_rdma.c: warning: the frame size of 1052 bytes is larger than 1024 bytes [-Wframe-larger-than=]: 200:1 =>

Since this could go up to 2k that's pretty huge.  One idea is to just
say:

	int small_buffer[64];
	int size = ci->max - ci->min + 1;
	int *list = &small_buffer;

	if (size > 64)
		list = kmalloc();

	...

free:
	if (size > 64)
		kfree(list);

If you've looked at the call trees which call this function and we can't
actually run out of space then that's probably fine too.  I don't think
there are any arches which still use 4k stacks.

regards,
dan carpenter



More information about the Alsa-devel mailing list