Atsushi Nemoto wrote: > On Thu, 17 Aug 2006 15:57:28 +0200, Franck Bui-Huu <vagabon.xyz@xxxxxxxxx> wrote: >> This array was used to 'cache' some frame info about scheduler >> functions to speed up get_wchan(). This array was 1Ko size and >> was only used when CONFIG_KALLSYMS was set but declared for all >> configs. >> >> Rather than make the array statement conditional, this patches >> removes this array and its uses. Indeed the common case doesn't >> seem to use this array and get_wchan() is not a critical path >> anyways. > > It looks good basically, but a few fixes are required. > >> static int __init frame_info_init(void) >> { >> - int i; >> + unsigned long size = 0; > > You must pass some non-zero size even if CONFIG_KALLSYMS was not set. > Otherwise schedule_mfi will not be initialized as expected. Actually, > this is not a problem of this patch, but we missed this point on > previous cleanups for the get_frame_info()... > or maybe we can just fix get_frame_info() and make it more robust ? >> +unsigned long get_wchan(struct task_struct *task) >> +{ >> + unsigned long stack_page = (unsigned long)task_stack_page(task); > > This should be done after "if (!task ..." check. > >> + unsigned long pc = 0; >> +#ifdef CONFIG_KALLSYMS >> + unsigned long sp = task->thread.reg29; > > Same. And you missed one stack level. > > sp = task->thread.reg29 + schedule_mfi.frame_size; > Absolutely. I'll cook up a new patch and will send it today. Thanks Franck