Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6fd84c08 authored by Al Viro's avatar Al Viro
Browse files

TIF_RESTORE_SIGMASK can be set only when TIF_SIGPENDING is set



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent bf343dfd
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -281,7 +281,7 @@ syscall_exit_work:
	ld.w	r1, r0[TI_flags]
	rjmp	1b

2:	mov	r2, _TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NOTIFY_RESUME
2:	mov	r2, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME
	tst	r1, r2
	breq	3f
	unmask_interrupts
@@ -587,7 +587,7 @@ fault_exit_work:
	ld.w	r1, r0[TI_flags]
	rjmp	fault_exit_work

1:	mov	r2, _TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NOTIFY_RESUME
1:	mov	r2, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME
	tst	r1, r2
	breq	2f
	unmask_interrupts
+1 −1
Original line number Diff line number Diff line
@@ -303,7 +303,7 @@ asmlinkage void do_notify_resume(struct pt_regs *regs, struct thread_info *ti)
	if ((sysreg_read(SR) & MODE_MASK) == MODE_SUPERVISOR)
		syscall = 1;

	if (ti->flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK))
	if (ti->flags & _TIF_SIGPENDING))
		do_signal(regs, syscall);

	if (ti->flags & _TIF_NOTIFY_RESUME) {
+1 −1
Original line number Diff line number Diff line
@@ -307,7 +307,7 @@ asmlinkage void do_signal(struct pt_regs *regs)
 */
asmlinkage void do_notify_resume(struct pt_regs *regs)
{
	if (test_thread_flag(TIF_SIGPENDING) || test_thread_flag(TIF_RESTORE_SIGMASK))
	if (test_thread_flag(TIF_SIGPENDING))
		do_signal(regs);

	if (test_thread_flag(TIF_NOTIFY_RESUME)) {
+0 −2
Original line number Diff line number Diff line
@@ -711,8 +711,6 @@ ENTRY(_system_call)
	jump .Lresume_userspace_1;

.Lsyscall_sigpending:
	cc = BITTST(r7, TIF_RESTORE_SIGMASK);
	if cc jump .Lsyscall_do_signals;
	cc = BITTST(r7, TIF_SIGPENDING);
	if cc jump .Lsyscall_do_signals;
	cc = BITTST(r7, TIF_NOTIFY_RESUME);
+1 −2
Original line number Diff line number Diff line
@@ -335,8 +335,7 @@ asmlinkage void do_notify_resume(struct pt_regs *regs, u32 thread_info_flags,
				 int syscall)
{
	/* deal with pending signal delivery */
	if (thread_info_flags & ((1 << TIF_SIGPENDING) |
				 (1 << TIF_RESTORE_SIGMASK)))
	if (thread_info_flags & (1 << TIF_SIGPENDING))
		do_signal(regs, syscall);

	if (thread_info_flags & (1 << TIF_NOTIFY_RESUME)) {
Loading