• Nathan Lynch's avatar
    powerpc/rtas: rtas_ibm_suspend_me -> rtas_ibm_suspend_me_unsafe · 7049b288
    Nathan Lynch authored
    The pseries partition suspend sequence requires that all active CPUs
    call H_JOIN, which suspends all but one of them with interrupts
    disabled. The "chosen" CPU is then to call ibm,suspend-me to complete
    the suspend. Upon returning from ibm,suspend-me, the chosen CPU is to
    use H_PROD to wake the joined CPUs.
    
    Using on_each_cpu() for this, as rtas_ibm_suspend_me() does to
    implement partition migration, is susceptible to deadlock with other
    users of on_each_cpu() and with users of stop_machine APIs. The
    callback passed to on_each_cpu() is not allowed to synchronize with
    other CPUs in the way it is used here.
    
    Complicating the fix is the fact that rtas_ibm_suspend_me() also
    occupies the function name that should be used to provide a more
    conventional wrapper for ibm,suspend-me. Rename rtas_ibm_suspend_me()
    to rtas_ibm_suspend_me_unsafe() to free up the name and indicate that
    it should not gain users.
    Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20201207215200.1785968-4-nathanl@linux.ibm.com
    7049b288
rtas.c 32.3 KB