diff options
Diffstat (limited to 'arch/s390/kernel/signal.c')
-rw-r--r-- | arch/s390/kernel/signal.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c index 028cc46cb82a..d82562cf0a0e 100644 --- a/arch/s390/kernel/signal.c +++ b/arch/s390/kernel/signal.c | |||
@@ -331,13 +331,13 @@ static int setup_frame(int sig, struct k_sigaction *ka, | |||
331 | /* Set up to return from userspace. If provided, use a stub | 331 | /* Set up to return from userspace. If provided, use a stub |
332 | already in userspace. */ | 332 | already in userspace. */ |
333 | if (ka->sa.sa_flags & SA_RESTORER) { | 333 | if (ka->sa.sa_flags & SA_RESTORER) { |
334 | restorer = (unsigned long) ka->sa.sa_restorer | PSW_ADDR_AMODE; | 334 | restorer = (unsigned long) ka->sa.sa_restorer; |
335 | } else { | 335 | } else { |
336 | /* Signal frame without vector registers are short ! */ | 336 | /* Signal frame without vector registers are short ! */ |
337 | __u16 __user *svc = (void __user *) frame + frame_size - 2; | 337 | __u16 __user *svc = (void __user *) frame + frame_size - 2; |
338 | if (__put_user(S390_SYSCALL_OPCODE | __NR_sigreturn, svc)) | 338 | if (__put_user(S390_SYSCALL_OPCODE | __NR_sigreturn, svc)) |
339 | return -EFAULT; | 339 | return -EFAULT; |
340 | restorer = (unsigned long) svc | PSW_ADDR_AMODE; | 340 | restorer = (unsigned long) svc; |
341 | } | 341 | } |
342 | 342 | ||
343 | /* Set up registers for signal handler */ | 343 | /* Set up registers for signal handler */ |
@@ -347,7 +347,7 @@ static int setup_frame(int sig, struct k_sigaction *ka, | |||
347 | regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA | | 347 | regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA | |
348 | (PSW_USER_BITS & PSW_MASK_ASC) | | 348 | (PSW_USER_BITS & PSW_MASK_ASC) | |
349 | (regs->psw.mask & ~PSW_MASK_ASC); | 349 | (regs->psw.mask & ~PSW_MASK_ASC); |
350 | regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE; | 350 | regs->psw.addr = (unsigned long) ka->sa.sa_handler; |
351 | 351 | ||
352 | regs->gprs[2] = sig; | 352 | regs->gprs[2] = sig; |
353 | regs->gprs[3] = (unsigned long) &frame->sc; | 353 | regs->gprs[3] = (unsigned long) &frame->sc; |
@@ -394,13 +394,12 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
394 | /* Set up to return from userspace. If provided, use a stub | 394 | /* Set up to return from userspace. If provided, use a stub |
395 | already in userspace. */ | 395 | already in userspace. */ |
396 | if (ksig->ka.sa.sa_flags & SA_RESTORER) { | 396 | if (ksig->ka.sa.sa_flags & SA_RESTORER) { |
397 | restorer = (unsigned long) | 397 | restorer = (unsigned long) ksig->ka.sa.sa_restorer; |
398 | ksig->ka.sa.sa_restorer | PSW_ADDR_AMODE; | ||
399 | } else { | 398 | } else { |
400 | __u16 __user *svc = &frame->svc_insn; | 399 | __u16 __user *svc = &frame->svc_insn; |
401 | if (__put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn, svc)) | 400 | if (__put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn, svc)) |
402 | return -EFAULT; | 401 | return -EFAULT; |
403 | restorer = (unsigned long) svc | PSW_ADDR_AMODE; | 402 | restorer = (unsigned long) svc; |
404 | } | 403 | } |
405 | 404 | ||
406 | /* Create siginfo on the signal stack */ | 405 | /* Create siginfo on the signal stack */ |
@@ -426,7 +425,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
426 | regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA | | 425 | regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA | |
427 | (PSW_USER_BITS & PSW_MASK_ASC) | | 426 | (PSW_USER_BITS & PSW_MASK_ASC) | |
428 | (regs->psw.mask & ~PSW_MASK_ASC); | 427 | (regs->psw.mask & ~PSW_MASK_ASC); |
429 | regs->psw.addr = (unsigned long) ksig->ka.sa.sa_handler | PSW_ADDR_AMODE; | 428 | regs->psw.addr = (unsigned long) ksig->ka.sa.sa_handler; |
430 | 429 | ||
431 | regs->gprs[2] = ksig->sig; | 430 | regs->gprs[2] = ksig->sig; |
432 | regs->gprs[3] = (unsigned long) &frame->info; | 431 | regs->gprs[3] = (unsigned long) &frame->info; |