Skip to content

Commit

Permalink
s390/smp: cleanup target CPU callback starting
Browse files Browse the repository at this point in the history
[ Upstream commit dc2ab23 ]

Macro mem_assign_absolute() is used to initialize a target
CPU lowcore callback parameters. But despite the macro name
it writes to the absolute lowcore only if the target CPU is
offline. In case the CPU is online the macro does implicitly
write to the normal memory.

That behaviour is correct, but extremely subtle. Sacrifice
few program bits in favour of clarity and distinguish between
online vs offline CPUs and normal vs absolute lowcore pointer.

Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Alexander Gordeev authored and gregkh committed Aug 17, 2022
1 parent 9287df4 commit a002b86
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions arch/s390/kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -328,10 +328,17 @@ static void pcpu_delegate(struct pcpu *pcpu,
/* Stop target cpu (if func returns this stops the current cpu). */
pcpu_sigp_retry(pcpu, SIGP_STOP, 0);
/* Restart func on the target cpu and stop the current cpu. */
mem_assign_absolute(lc->restart_stack, stack);
mem_assign_absolute(lc->restart_fn, (unsigned long) func);
mem_assign_absolute(lc->restart_data, (unsigned long) data);
mem_assign_absolute(lc->restart_source, source_cpu);
if (lc) {
lc->restart_stack = stack;
lc->restart_fn = (unsigned long)func;
lc->restart_data = (unsigned long)data;
lc->restart_source = source_cpu;
} else {
mem_assign_absolute(lc->restart_stack, stack);
mem_assign_absolute(lc->restart_fn, (unsigned long)func);
mem_assign_absolute(lc->restart_data, (unsigned long)data);
mem_assign_absolute(lc->restart_source, source_cpu);
}
__bpon();
asm volatile(
"0: sigp 0,%0,%2 # sigp restart to target cpu\n"
Expand Down

0 comments on commit a002b86

Please sign in to comment.