Skip to content
  • Sebastian Andrzej Siewior's avatar
    cpu/hotplug: Fix rollback during error-out in __cpu_disable() · 3b9d6da6
    Sebastian Andrzej Siewior authored
    The recent introduction of the hotplug thread which invokes the callbacks on
    the plugged cpu, cased the following regression:
    
    If takedown_cpu() fails, then we run into several issues:
    
     1) The rollback of the target cpu states is not invoked. That leaves the smp
        threads and the hotplug thread in disabled state.
    
     2) notify_online() is executed due to a missing skip_onerr flag. That causes
        that both CPU_DOWN_FAILED and CPU_ONLINE notifications are invoked which
        confuses quite some notifiers.
    
     3) The CPU_DOWN_FAILED notification is not invoked on the target CPU. That's
        not an issue per se, but it is inconsistent and in consequence blocks the
        patches which rely on these states being invoked on the target CPU and not
        on the controlling cpu. It also does not preserve the strict call order on
        rollback which is problematic for the ongoing state machine conversion as
        well.
    
    To fix this we add a rollback flag to the remote callback machinery and invoke
    the rollback including the CPU_DOWN_FAILED notification on the remote
    cpu. Further mark the notify online state with 'skip_onerr' so we don't get a
    double invokation.
    
    This workaround will go away once we moved the unplug invocation to the target
    cpu itself.
    
    [ tglx: Massaged changelog and moved the CPU_DOWN_FAILED notifiaction to the
      	target cpu ]
    
    Fixes: 4cb28ced
    
     ("cpu/hotplug: Create hotplug threads")
    Reported-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: linux-s390@vger.kernel.org
    Cc: rt@linutronix.de
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Cc: Anna-Maria Gleixner <anna-maria@linutronix.de>
    Link: http://lkml.kernel.org/r/20160408124015.GA21960@linutronix.de
    
    
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    3b9d6da6