Skip to content
  • Tejun Heo's avatar
    stop_machine: implement stop_machine_from_inactive_cpu() · f740e6cd
    Tejun Heo authored
    
    
    Currently, mtrr wants stop_machine functionality while a CPU is being
    brought up.  As stop_machine() requires the calling CPU to be active,
    mtrr implements its own stop_machine using stop_one_cpu() on each
    online CPU.  This doesn't only unnecessarily duplicate complex logic
    but also introduces a possibility of deadlock when it races against
    the generic stop_machine().
    
    This patch implements stop_machine_from_inactive_cpu() to serve such
    use cases.  Its functionality is basically the same as stop_machine();
    however, it should be called from a CPU which isn't active and doesn't
    depend on working scheduling on the calling CPU.
    
    This is achieved by using busy loops for synchronization and
    open-coding stop_cpus queuing and waiting with direct invocation of
    fn() for local CPU inbetween.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Link: http://lkml.kernel.org/r/20110623182056.982526827@sbsiddha-MOBL3.sc.intel.com
    
    
    Signed-off-by: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
    f740e6cd