diff options
author | Paul Mackerras <paulus@samba.org> | 2005-04-16 18:24:14 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:24:14 -0400 |
commit | 16acbc624e2b7b750570cb672341d05a816051f4 (patch) | |
tree | ca337baa5a2950ae6a3ff8eb19ac5ae15cbb70c5 /arch/ppc/kernel | |
parent | 0c9b79429c83a404a04908be65baa9d97836bbb6 (diff) |
[PATCH] ppc32: fix bogosity in process-freezing code
The code that went into arch/ppc/kernel/signal.c recently to handle process
freezing seems to contain a dubious assumption: that a process that calls
do_signal when PF_FREEZE is set will have entered the kernel because of a
system call. This patch removes that assumption.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/ppc/kernel')
-rw-r--r-- | arch/ppc/kernel/signal.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/arch/ppc/kernel/signal.c b/arch/ppc/kernel/signal.c index 9567d3041ea7..645eae19805c 100644 --- a/arch/ppc/kernel/signal.c +++ b/arch/ppc/kernel/signal.c | |||
@@ -708,7 +708,6 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs) | |||
708 | if (current->flags & PF_FREEZE) { | 708 | if (current->flags & PF_FREEZE) { |
709 | refrigerator(PF_FREEZE); | 709 | refrigerator(PF_FREEZE); |
710 | signr = 0; | 710 | signr = 0; |
711 | ret = regs->gpr[3]; | ||
712 | if (!signal_pending(current)) | 711 | if (!signal_pending(current)) |
713 | goto no_signal; | 712 | goto no_signal; |
714 | } | 713 | } |
@@ -719,7 +718,7 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs) | |||
719 | newsp = frame = 0; | 718 | newsp = frame = 0; |
720 | 719 | ||
721 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); | 720 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); |
722 | 721 | no_signal: | |
723 | if (TRAP(regs) == 0x0C00 /* System Call! */ | 722 | if (TRAP(regs) == 0x0C00 /* System Call! */ |
724 | && regs->ccr & 0x10000000 /* error signalled */ | 723 | && regs->ccr & 0x10000000 /* error signalled */ |
725 | && ((ret = regs->gpr[3]) == ERESTARTSYS | 724 | && ((ret = regs->gpr[3]) == ERESTARTSYS |
@@ -735,7 +734,6 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs) | |||
735 | regs->gpr[3] = EINTR; | 734 | regs->gpr[3] = EINTR; |
736 | /* note that the cr0.SO bit is already set */ | 735 | /* note that the cr0.SO bit is already set */ |
737 | } else { | 736 | } else { |
738 | no_signal: | ||
739 | regs->nip -= 4; /* Back up & retry system call */ | 737 | regs->nip -= 4; /* Back up & retry system call */ |
740 | regs->result = 0; | 738 | regs->result = 0; |
741 | regs->trap = 0; | 739 | regs->trap = 0; |