.. | .. |
---|
30 | 30 | #include <asm/ucontext.h> |
---|
31 | 31 | #include <asm/rt_sigframe.h> |
---|
32 | 32 | #include <linux/uaccess.h> |
---|
33 | | -#include <asm/pgalloc.h> |
---|
34 | 33 | #include <asm/cacheflush.h> |
---|
35 | 34 | #include <asm/asm-offsets.h> |
---|
36 | 35 | |
---|
.. | .. |
---|
65 | 64 | #define INSN_LDI_R25_1 0x34190002 /* ldi 1,%r25 (in_syscall=1) */ |
---|
66 | 65 | #define INSN_LDI_R20 0x3414015a /* ldi __NR_rt_sigreturn,%r20 */ |
---|
67 | 66 | #define INSN_BLE_SR2_R0 0xe4008200 /* be,l 0x100(%sr2,%r0),%sr0,%r31 */ |
---|
68 | | -#define INSN_NOP 0x08000240 /* nop */ |
---|
69 | 67 | /* For debugging */ |
---|
70 | 68 | #define INSN_DIE_HORRIBLY 0x68000ccc /* stw %r0,0x666(%sr0,%r0) */ |
---|
71 | 69 | |
---|
.. | .. |
---|
165 | 163 | |
---|
166 | 164 | give_sigsegv: |
---|
167 | 165 | DBG(1,"sys_rt_sigreturn: Sending SIGSEGV\n"); |
---|
168 | | - force_sig(SIGSEGV, current); |
---|
| 166 | + force_sig(SIGSEGV); |
---|
169 | 167 | return; |
---|
170 | 168 | } |
---|
171 | 169 | |
---|
.. | .. |
---|
510 | 508 | regs->gr[28] = -EINTR; |
---|
511 | 509 | break; |
---|
512 | 510 | } |
---|
513 | | - /* fallthrough */ |
---|
| 511 | + fallthrough; |
---|
514 | 512 | case -ERESTARTNOINTR: |
---|
515 | 513 | check_syscallno_in_delay_branch(regs); |
---|
516 | 514 | break; |
---|
.. | .. |
---|
611 | 609 | |
---|
612 | 610 | void do_notify_resume(struct pt_regs *regs, long in_syscall) |
---|
613 | 611 | { |
---|
614 | | - if (test_thread_flag(TIF_SIGPENDING)) |
---|
| 612 | + if (test_thread_flag(TIF_SIGPENDING) || |
---|
| 613 | + test_thread_flag(TIF_NOTIFY_SIGNAL)) |
---|
615 | 614 | do_signal(regs, in_syscall); |
---|
616 | 615 | |
---|
617 | | - if (test_thread_flag(TIF_NOTIFY_RESUME)) { |
---|
618 | | - clear_thread_flag(TIF_NOTIFY_RESUME); |
---|
| 616 | + if (test_thread_flag(TIF_NOTIFY_RESUME)) |
---|
619 | 617 | tracehook_notify_resume(regs); |
---|
620 | | - } |
---|
621 | 618 | } |
---|