Commit 0f541cc2 authored by Heiko Carstens's avatar Heiko Carstens Committed by Vasily Gorbik

s390/smp: use call_on_stack() macro

Reviewed-by: default avatarSven Schnelle <svens@linux.ibm.com>
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent 845370f4
...@@ -300,24 +300,28 @@ static void pcpu_start_fn(struct pcpu *pcpu, void (*func)(void *), void *data) ...@@ -300,24 +300,28 @@ static void pcpu_start_fn(struct pcpu *pcpu, void (*func)(void *), void *data)
pcpu_sigp_retry(pcpu, SIGP_RESTART, 0); pcpu_sigp_retry(pcpu, SIGP_RESTART, 0);
} }
typedef void (pcpu_delegate_fn)(void *);
/* /*
* Call function via PSW restart on pcpu and stop the current cpu. * Call function via PSW restart on pcpu and stop the current cpu.
*/ */
static void __pcpu_delegate(void (*func)(void*), void *data) static void __pcpu_delegate(pcpu_delegate_fn *func, void *data)
{ {
func(data); /* should not return */ func(data); /* should not return */
} }
static void __no_sanitize_address pcpu_delegate(struct pcpu *pcpu, static void __no_sanitize_address pcpu_delegate(struct pcpu *pcpu,
void (*func)(void *), pcpu_delegate_fn *func,
void *data, unsigned long stack) void *data, unsigned long stack)
{ {
struct lowcore *lc = lowcore_ptr[pcpu - pcpu_devices]; struct lowcore *lc = lowcore_ptr[pcpu - pcpu_devices];
unsigned long source_cpu = stap(); unsigned long source_cpu = stap();
__load_psw_mask(PSW_KERNEL_BITS | PSW_MASK_DAT); __load_psw_mask(PSW_KERNEL_BITS | PSW_MASK_DAT);
if (pcpu->address == source_cpu) if (pcpu->address == source_cpu) {
CALL_ON_STACK(__pcpu_delegate, stack, 2, func, data); call_on_stack(2, stack, void, __pcpu_delegate,
pcpu_delegate_fn *, func, void *, data);
}
/* Stop target cpu (if func returns this stops the current cpu). */ /* Stop target cpu (if func returns this stops the current cpu). */
pcpu_sigp_retry(pcpu, SIGP_STOP, 0); pcpu_sigp_retry(pcpu, SIGP_STOP, 0);
/* Restart func on the target cpu and stop the current cpu. */ /* Restart func on the target cpu and stop the current cpu. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment