]> git.neil.brown.name Git - history.git/commitdiff
Import 2.1.48 2.1.48
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:13:43 +0000 (15:13 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:13:43 +0000 (15:13 -0500)
arch/alpha/kernel/ptrace.c
arch/alpha/kernel/signal.c
arch/i386/kernel/ptrace.c
arch/i386/kernel/signal.c
arch/ppc/ignore [deleted file]
include/linux/sched.h
kernel/exit.c

index c388f0b5133db29682cd7564365e6f5b2355fbb0..84cde1b4f1f7b83b0cfa0666430de877c51b1188 100644 (file)
@@ -650,7 +650,7 @@ asmlinkage void syscall_trace(void)
                goto out;
        current->exit_code = SIGTRAP;
        current->state = TASK_STOPPED;
-       notify_parent(current);
+       notify_parent(current, SIGCHLD);
        schedule();
        /*
         * this isn't the same as continuing with a signal, but it will do
index 5c3eb79ef2cf0f529da598f47536db9c4bf77bd0..9f71e614602f94f4a4664593b9ea7d58005d162d 100644 (file)
@@ -315,7 +315,7 @@ asmlinkage int do_signal(unsigned long oldmask,
                if ((current->flags & PF_PTRACED) && signr != SIGKILL) {
                        current->exit_code = signr;
                        current->state = TASK_STOPPED;
-                       notify_parent(current);
+                       notify_parent(current, SIGCHLD);
                        schedule();
                        single_stepping |= ptrace_cancel_bpt(current);
                        if (!(signr = current->exit_code))
@@ -354,7 +354,7 @@ asmlinkage int do_signal(unsigned long oldmask,
                                current->exit_code = signr;
                                if (!(current->p_pptr->sig->action[SIGCHLD-1].sa_flags & 
                                                SA_NOCLDSTOP))
-                                       notify_parent(current);
+                                       notify_parent(current, SIGCHLD);
                                schedule();
                                single_stepping |= ptrace_cancel_bpt(current);
                                continue;
index 0dfffd672abca15c654232ce6122a95e3074b33a..c8a7f986eb300d789e5bfec44dee5f21119d7d12 100644 (file)
@@ -577,7 +577,7 @@ asmlinkage void syscall_trace(void)
                return;
        current->exit_code = SIGTRAP;
        current->state = TASK_STOPPED;
-       notify_parent(current);
+       notify_parent(current, SIGCHLD);
        schedule();
        /*
         * this isn't the same as continuing with a signal, but it will do
index 3141c5318ca9725106ccb5b84265dbf101442397..f5af47201fb46c6e7cac0a327d16f772fd63a156 100644 (file)
@@ -346,7 +346,7 @@ asmlinkage int do_signal(unsigned long oldmask, struct pt_regs * regs)
                if ((current->flags & PF_PTRACED) && signr != SIGKILL) {
                        current->exit_code = signr;
                        current->state = TASK_STOPPED;
-                       notify_parent(current);
+                       notify_parent(current, SIGCHLD);
                        schedule();
                        if (!(signr = current->exit_code))
                                continue;
@@ -386,7 +386,7 @@ asmlinkage int do_signal(unsigned long oldmask, struct pt_regs * regs)
                                current->exit_code = signr;
                                if (!(current->p_pptr->sig->action[SIGCHLD-1].sa_flags & 
                                                SA_NOCLDSTOP))
-                                       notify_parent(current);
+                                       notify_parent(current, SIGCHLD);
                                schedule();
                                continue;
 
diff --git a/arch/ppc/ignore b/arch/ppc/ignore
deleted file mode 100644 (file)
index 693fff6..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-.config
-compile.h
-.version
-.objects
-.blurb
-*.cort
-*.paul
-*.old
-.defines
-version.h
-find_name
-checks
-#*
-.objects
-.object_files
-System.map
-asm
-.menuconfig*
-CVS
-ppc_defs.h
-mk_defs
-mkprep
-*.s
-.depend
-.hdepend
-*~
-*.o
-znetboot
-zvmlinux
-vmlinux
-zImage
-hack-coff
-coffboot
-vmlinux.coff
-.depend
-.cvsignore
-RCS
-SCCS
-CVS.adm
-RCSLOG
-cvslog.*
-tags
-TAGS
-.make.state
-.nse_depinfo
-*~
-#*
-.#*
-,*
-_$*
-*$
-*.old
-*.bak
-*.BAK
-*.orig
-*.rej
-*.a
-*.olb
-*.o
-*.obj
-*.so
-*.exe
-*.Z
-*.elc
-*.ln
index ffca93266fdd321f45d96a4ec110f9e541f8799e..14c9e4fcb2db8cf5378de392e7592236dd5273c6 100644 (file)
@@ -444,7 +444,7 @@ extern void wake_up(struct wait_queue ** p);
 extern void wake_up_interruptible(struct wait_queue ** p);
 extern void wake_up_process(struct task_struct * tsk);
 
-extern void notify_parent(struct task_struct * tsk);
+extern void notify_parent(struct task_struct * tsk, int signal);
 extern void force_sig(unsigned long sig,struct task_struct * p);
 extern int send_sig(unsigned long sig,struct task_struct * p,int priv);
 extern int in_group_p(gid_t grp);
index 8aa0bfc3787f28c58861cbac41b2d3eab14811fd..a9b9543b784427ffe8e53a6dcab0316fbecc623d 100644 (file)
@@ -119,12 +119,12 @@ int send_sig(unsigned long sig,struct task_struct * p,int priv)
        return 0;
 }
 
-void notify_parent(struct task_struct * tsk)
+void notify_parent(struct task_struct * tsk, int signal)
 {
-       if (tsk->p_pptr == task[smp_num_cpus])          /* Init */
-               tsk->exit_signal = SIGCHLD;
-       send_sig(tsk->exit_signal, tsk->p_pptr, 1);
-       wake_up_interruptible(&tsk->p_pptr->wait_chldexit);
+       struct task_struct * parent = tsk->p_pptr;
+
+       send_sig(signal, parent, 1);
+       wake_up_interruptible(&parent->wait_chldexit);
 }
 
 static void release(struct task_struct * p)
@@ -346,11 +346,10 @@ static inline void forget_original_parent(struct task_struct * father)
 
        read_lock(&tasklist_lock);
        for_each_task(p) {
-               if (p->p_opptr == father)
-                       if (task[smp_num_cpus]) /* init */
-                               p->p_opptr = task[smp_num_cpus];
-                       else
-                               p->p_opptr = task[0];
+               if (p->p_opptr == father) {
+                       p->exit_signal = SIGCHLD;
+                       p->p_opptr = task[smp_num_cpus] ? : task[0];    /* init */
+               }
        }
        read_unlock(&tasklist_lock);
 }
@@ -488,7 +487,7 @@ static void exit_notify(void)
                kill_pg(current->pgrp,SIGCONT,1);
        }
        /* Let father know we died */
-       notify_parent(current);
+       notify_parent(current, current->exit_signal);
 
        /*
         * This loop does two things:
@@ -502,15 +501,13 @@ static void exit_notify(void)
                current->p_cptr = p->p_osptr;
                p->p_ysptr = NULL;
                p->flags &= ~(PF_PTRACED|PF_TRACESYS);
-               if (task[smp_num_cpus] && task[smp_num_cpus] != current) /* init */
-                       p->p_pptr = task[smp_num_cpus];
-               else
-                       p->p_pptr = task[0];
+
+               p->p_pptr = p->p_opptr;
                p->p_osptr = p->p_pptr->p_cptr;
                p->p_osptr->p_ysptr = p;
                p->p_pptr->p_cptr = p;
                if (p->state == TASK_ZOMBIE)
-                       notify_parent(p);
+                       notify_parent(p, p->exit_signal);
                /*
                 * process group orphan check
                 * Case ii: Our child is in a different pgrp
@@ -651,7 +648,7 @@ repeat:
                                        REMOVE_LINKS(p);
                                        p->p_pptr = p->p_opptr;
                                        SET_LINKS(p);
-                                       notify_parent(p);
+                                       notify_parent(p, SIGCHLD);
                                } else
                                        release(p);
 #ifdef DEBUG_PROC_TREE