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