On Wed, Mar 30, 2011 at 12:35 AM, Takao Indoh <indou.takao at jp.fujitsu.com> wrote: > Hi all, > > This patch renames init_call_single_data() to call_function_init() and > calls it in start_kernel() so that call_single_queue can be initialized > before enabling interrupt. > > There is a problem that kdump(2nd kernel) sometimes hangs up due to > pending IPI from 1st kernel. Kernel panic occurs because IPI comes > before call_single_queue is initialized. The details are as follows. > (1) 2nd kernel boot up > (2) A pending IPI from 1st kernel comes when irqs are first enabled > ? ?in start_kernel(). > (3) Kernel tries to handle the interrupt, but call_single_queue is not > ? ?initialized yet at this point. As a result, in the > ? ?generic_smp_call_function_single_interrupt(), NULL pointer > ? ?dereference occurs when list_replace_init() tries to access > ? ?&q->list.next. > Therefore this patch changes the name of init_call_single_data() to > call_function_init() and calls it before local_irq_enable() in > start_kernel(). > > v2: > - Rename init_call_single_data() to call_function_init() and calls it in > ?start_kernel() > - Change insert position in start_kernel(). > - Adjust for CONFIG_SMP/CONFIG_USE_GENERIC_SMP_HELPERS options > - Rebased to Linus's latest tree > Looks good to my eyes, Reviewed-by: WANG Cong <xiyou.wangcong at gmail.com> Thanks.