Skip to content
  • Jarrett Farnitano's avatar
    kexec: yield to scheduler when loading kimage segments · a8311f64
    Jarrett Farnitano authored
    Without yielding while loading kimage segments, a large initrd will
    block all other work on the CPU performing the load until it is
    completed.  For example loading an initrd of 200MB on a low power single
    core system will lock up the system for a few seconds.
    
    To increase system responsiveness to other tasks at that time, call
    cond_resched() in both the crash kernel and normal kernel segment
    loading loops.
    
    I did run into a practical problem.  Hardware watchdogs on embedded
    systems can have short timers on the order of seconds.  If the system is
    locked up for a few seconds with only a single core available, the
    watchdog may not be pet in a timely fashion.  If this happens, the
    hardware watchdog will fire and reset the system.
    
    This really only becomes a problem when you are working with a single
    core, a decently sized initrd, and have a constrained hardware watchdog.
    
    Link: http://lkml.kernel.org/r/1528738546-3328-1-git-send-email-jmf@amazon.com
    Signe...
    a8311f64