• Hidetoshi Seto's avatar
    ia64, kexec: Make INIT safe while transition to · c4b08890
    Hidetoshi Seto authored
    kdump/kexec kernel
    
    Summary:
    
      Asserting INIT on the beginning of kdump/kexec kernel will result
      in unexpected behavior because INIT handler for previous kernel is
      invoked on new kernel.
    
    Description:
    
      In panic situation, we can receive INIT while kernel transition,
      i.e. from beginning of panic to bootstrap of kdump kernel.
      Since we initialize registers on leave from current kernel, no
      longer monarch/slave handlers of current kernel in virtual mode are
      called safely.  (In fact system goes hang as far as I confirmed)
    
    How to Reproduce:
    
      Start kdump
        # echo c > /proc/sysrq-trigger
      Then assert INIT while kdump kernel is booting, before new INIT
      handler for kdump kernel is registered.
    
    Expected(Desirable) result:
    
      kdump kernel boots without any problem, crashdump retrieved
    
    Actual result:
    
      INIT handler for previous kernel is invoked on kdump kernel
      => panic, hang etc. (unexpected)
    
    Proposed fix:
    
      We can unregister these init handlers from SAL before jumping into
      new kernel, however then the INIT will fallback to default behavior,
      result in warmboot by SAL (according to the SAL specification) and
      we cannot retrieve the crashdump.
    
      Therefore this patch introduces a NOP init handler and register it
      to SAL before leave from current kernel, to start kdump safely by
      preventing INITs from entering virtual mode and resulting in warmboot.
    
      On the other hand, in case of kexec that not for kdump, it also
      has same problem with INIT while kernel transition.
      This patch handles this case differently, because for kexec
      unregistering handlers will be preferred than registering NOP
      handler, since the situation "no handlers registered" is usual
      state for kernel's entry.
    Signed-off-by: default avatarHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Cc: Haren Myneni <hbabu@us.ibm.com>
    Cc: kexec@lists.infradead.org
    Acked-by: default avatarFenghua Yu <fenghua.yu@intel.com>
    c4b08890
mca.h 5.76 KB