aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/kernel/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/kernel/signal.c')
-rw-r--r--arch/mips/kernel/signal.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
index 6b4d9be31615..b9d358e05214 100644
--- a/arch/mips/kernel/signal.c
+++ b/arch/mips/kernel/signal.c
@@ -424,15 +424,11 @@ void do_signal(struct pt_regs *regs)
424 if (!user_mode(regs)) 424 if (!user_mode(regs))
425 return; 425 return;
426 426
427 if (try_to_freeze())
428 goto no_signal;
429
430 if (test_thread_flag(TIF_RESTORE_SIGMASK)) 427 if (test_thread_flag(TIF_RESTORE_SIGMASK))
431 oldset = &current->saved_sigmask; 428 oldset = &current->saved_sigmask;
432 else 429 else
433 oldset = &current->blocked; 430 oldset = &current->blocked;
434 431
435
436 signr = get_signal_to_deliver(&info, &ka, regs, NULL); 432 signr = get_signal_to_deliver(&info, &ka, regs, NULL);
437 if (signr > 0) { 433 if (signr > 0) {
438 /* Whee! Actually deliver the signal. */ 434 /* Whee! Actually deliver the signal. */
@@ -446,9 +442,10 @@ void do_signal(struct pt_regs *regs)
446 if (test_thread_flag(TIF_RESTORE_SIGMASK)) 442 if (test_thread_flag(TIF_RESTORE_SIGMASK))
447 clear_thread_flag(TIF_RESTORE_SIGMASK); 443 clear_thread_flag(TIF_RESTORE_SIGMASK);
448 } 444 }
445
446 return;
449 } 447 }
450 448
451no_signal:
452 /* 449 /*
453 * Who's code doesn't conform to the restartable syscall convention 450 * Who's code doesn't conform to the restartable syscall convention
454 * dies here!!! The li instruction, a single machine instruction, 451 * dies here!!! The li instruction, a single machine instruction,
@@ -466,6 +463,7 @@ no_signal:
466 regs->regs[7] = regs->regs[26]; 463 regs->regs[7] = regs->regs[26];
467 regs->cp0_epc -= 4; 464 regs->cp0_epc -= 4;
468 } 465 }
466 regs->regs[0] = 0; /* Don't deal with this again. */
469 } 467 }
470 468
471 /* 469 /*