aboutsummaryrefslogtreecommitdiffstats
path: root/lib/xarray.c
diff options
context:
space:
mode:
authorNathan Lynch <[email protected]>2021-03-15 08:00:45 +0000
committerMichael Ellerman <[email protected]>2021-03-22 22:25:12 +0000
commit274cb1ca2e7ce02cab56f5f4c61a74aeb566f931 (patch)
tree2d7560711667736ecb0664d10b44be597fdfcece /lib/xarray.c
parentpowerpc/pseries/mobility: use struct for shared state (diff)
downloadkernel-274cb1ca2e7ce02cab56f5f4c61a74aeb566f931.tar.gz
kernel-274cb1ca2e7ce02cab56f5f4c61a74aeb566f931.zip
powerpc/pseries/mobility: handle premature return from H_JOIN
The pseries join/suspend sequence in its current form was written with the assumption that it was the only user of H_PROD and that it needn't handle spurious successful returns from H_JOIN. That's wrong; powerpc's paravirt spinlock code uses H_PROD, and CPUs entering do_join() can be woken prematurely from H_JOIN with a status of H_SUCCESS as a result. This causes all CPUs to exit the sequence early, preventing suspend from occurring at all. Add a 'done' boolean flag to the pseries_suspend_info struct, and have the waking thread set it before waking the other threads. Threads which receive H_SUCCESS from H_JOIN retry if the 'done' flag is still unset. Fixes: 9327dc0aeef3 ("powerpc/pseries/mobility: use stop_machine for join/suspend") Signed-off-by: Nathan Lynch <[email protected]> Signed-off-by: Michael Ellerman <[email protected]> Link: https://lore.kernel.org/r/[email protected]
Diffstat (limited to 'lib/xarray.c')
0 files changed, 0 insertions, 0 deletions