Skip to content
  • Takao Indoh's avatar
    generic-ipi: Fix kexec boot crash by initializing call_single_queue before enabling interrupts · d8ad7d11
    Takao Indoh authored
    There is a problem that kdump(2nd kernel) sometimes hangs up due
    to a pending IPI from 1st kernel. Kernel panic occurs because IPI
    comes before call_single_queue is initialized.
    
    To fix the crash, rename init_call_single_data() to call_function_init()
    and call it in start_kernel() so that call_single_queue can be
    initialized before enabling interrupts.
    
    The details of the crash are:
    
     (1) 2nd kernel boots 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_ker...
    d8ad7d11