public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave McCracken <dmccr@us.ibm.com>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: Dave Jones <davej@suse.de>, Alan Cox <alan@lxorguk.ukuu.org.uk>,
	Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH 2.5.3] Third version of signal changes for thread groups
Date: Wed, 06 Feb 2002 12:21:06 -0600	[thread overview]
Message-ID: <17060000.1013019666@baldur> (raw)
In-Reply-To: <Pine.LNX.4.33.0202060914410.22843-100000@athlon.transmeta.com>
In-Reply-To: <Pine.LNX.4.33.0202060914410.22843-100000@athlon.transmeta.com>


--On Wednesday, February 06, 2002 09:40:05 -0800 Linus Torvalds <torvalds@transmeta.com> wrote:

> You seem to be using Mulberry, I'm sure there must be some way to fix it,
> but I don't know mb myself.

Yes, and I was under the mistaken belief that it worked reasonably.  I
think I've found a workaround now, with the help of other Mulberry
users here. Here's my latest attempt.

> (I can edit and hand-apply patches like these, but I hate to do it, and I
> really really hate to have developers with broken mail configurations, so
> I'd rather go through this several times to get it fixed than to work
> around it)

I absolutely agree.  I'm also anxious to get this nailed down.  Thanks
for putting up with my attempts.

Dave McCracken

======================================================================
Dave McCracken          IBM Linux Base Kernel Team      1-512-838-3059
dmccr@us.ibm.com                                        T/L   678-3059

-----------------------

--- linux-2.5.3/./kernel/fork.c	Mon Jan 28 17:11:45 2002
+++ linux-2.5.3-ngpt/./kernel/fork.c	Fri Feb  1 14:08:52 2002
@@ -724,10 +724,10 @@
 	/* Need tasklist lock for parent etc handling! */
 	write_lock_irq(&tasklist_lock);
 
-	/* CLONE_PARENT and CLONE_THREAD re-use the old parent */
+	/* CLONE_PARENT re-uses the old parent */
 	p->p_opptr = current->p_opptr;
 	p->p_pptr = current->p_pptr;
-	if (!(clone_flags & (CLONE_PARENT | CLONE_THREAD))) {
+	if (!(clone_flags & CLONE_PARENT)) {
 		p->p_opptr = current;
 		if (!(p->ptrace & PT_PTRACED))
 			p->p_pptr = current;
--- linux-2.5.3/./kernel/signal.c	Mon Jan 28 17:11:45 2002
+++ linux-2.5.3-ngpt/./kernel/signal.c	Wed Feb  6 09:44:33 2002
@@ -142,6 +142,35 @@
 	}
 }
 
+/*
+ * sig_exit - cause the current task to exit due to a signal.
+ */
+
+void
+sig_exit(int sig, int exit_code, struct siginfo *info)
+{
+	struct task_struct *t;
+
+	sigaddset(&current->pending.signal, sig);
+	recalc_sigpending(current);
+	current->flags |= PF_SIGNALED;
+
+	/* Propagate the signal to all the tasks in
+	 *  our thread group
+	 */
+	if (info && (unsigned long)info != 1
+	    && info->si_code != SI_TKILL) {
+		read_lock(&tasklist_lock);
+		for_each_thread(t) {
+			force_sig_info(sig, info, t);
+		}
+		read_unlock(&tasklist_lock);
+	}
+
+	do_exit(exit_code);
+	/* NOTREACHED */
+}
+
 /* Notify the system that a driver wants to block all signals for this
  * process, and wants to be notified if any signals at all were to be
  * sent/acted upon.  If the notifier routine returns non-zero, then the
@@ -589,7 +618,7 @@
 		retval = -ESRCH;
 		read_lock(&tasklist_lock);
 		for_each_task(p) {
-			if (p->pgrp == pgrp) {
+			if (p->pgrp == pgrp && thread_group_leader(p)) {
 				int err = send_sig_info(sig, info, p);
 				if (retval)
 					retval = err;
@@ -636,8 +665,15 @@
 	read_lock(&tasklist_lock);
 	p = find_task_by_pid(pid);
 	error = -ESRCH;
-	if (p)
+	if (p) {
+		if (!thread_group_leader(p)) {
+                       struct task_struct *tg;
+                       tg = find_task_by_pid(p->tgid);
+                       if (tg)
+                               p = tg;
+                }
 		error = send_sig_info(sig, info, p);
+	}
 	read_unlock(&tasklist_lock);
 	return error;
 }
@@ -660,7 +696,7 @@
 
 		read_lock(&tasklist_lock);
 		for_each_task(p) {
-			if (p->pid > 1 && p != current) {
+			if (p->pid > 1 && p != current && thread_group_leader(p)) {
 				int err = send_sig_info(sig, info, p);
 				++count;
 				if (err != -EPERM)
@@ -983,6 +1019,36 @@
 	info.si_uid = current->uid;
 
 	return kill_something_info(sig, &info, pid);
+}
+
+/*
+ *  Kill only one task, even if it's a CLONE_THREAD task.
+ */
+asmlinkage long
+sys_tkill(int pid, int sig)
+{
+       struct siginfo info;
+       int error;
+       struct task_struct *p;
+
+       /* This is only valid for single tasks */
+       if (pid <= 0)
+           return -EINVAL;
+
+       info.si_signo = sig;
+       info.si_errno = 0;
+       info.si_code = SI_TKILL;
+       info.si_pid = current->pid;
+       info.si_uid = current->uid;
+
+       read_lock(&tasklist_lock);
+       p = find_task_by_pid(pid);
+       error = -ESRCH;
+       if (p) {
+               error = send_sig_info(sig, &info, p);
+       }
+       read_unlock(&tasklist_lock);
+       return error;
 }
 
 asmlinkage long
--- linux-2.5.3/./include/linux/sched.h	Tue Jan 29 23:41:12 2002
+++ linux-2.5.3-ngpt/./include/linux/sched.h	Wed Feb  6 09:48:57 2002
@@ -564,6 +564,7 @@
 extern void proc_caches_init(void);
 extern void flush_signals(struct task_struct *);
 extern void flush_signal_handlers(struct task_struct *);
+extern void sig_exit(int, int, struct siginfo *);
 extern int dequeue_signal(sigset_t *, siginfo_t *);
 extern void block_all_signals(int (*notifier)(void *priv), void *priv,
 			      sigset_t *mask);
@@ -839,8 +840,13 @@
 #define for_each_task(p) \
 	for (p = &init_task ; (p = p->next_task) != &init_task ; )
 
+#define for_each_thread(task) \
+	for (task = next_thread(current) ; task != current ; task = next_thread(task))
+
 #define next_thread(p) \
 	list_entry((p)->thread_group.next, struct task_struct, thread_group)
+
+#define thread_group_leader(p)	(p->pid == p->tgid)
 
 static inline void unhash_process(struct task_struct *p)
 {
--- linux-2.5.3/./include/asm-i386/unistd.h	Tue Jan 29 20:46:00 2002
+++ linux-2.5.3-ngpt/./include/asm-i386/unistd.h	Fri Feb  1 13:15:08 2002
@@ -242,6 +242,7 @@
 #define __NR_removexattr	235
 #define __NR_lremovexattr	236
 #define __NR_fremovexattr	237
+#define __NR_tkill		238
 
 /* user-visible error numbers are in the range -1 - -124: see <asm-i386/errno.h> */
 
--- linux-2.5.3/./include/asm-i386/siginfo.h	Tue Jan 29 23:41:10 2002
+++ linux-2.5.3-ngpt/./include/asm-i386/siginfo.h	Fri Feb  1 14:07:04 2002
@@ -107,6 +107,7 @@
 #define SI_MESGQ	-3		/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
 #define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_TKILL	-6		/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-mips/unistd.h	Mon Jul  2 15:56:40 2001
+++ linux-2.5.3-ngpt/./include/asm-mips/unistd.h	Fri Feb  1 13:12:28 2002
@@ -233,6 +233,8 @@
 #define __NR_madvise			(__NR_Linux + 218)
 #define __NR_getdents64			(__NR_Linux + 219)
 #define __NR_fcntl64			(__NR_Linux + 220)
+#define __NR_gettid			(__NR_Linux + 221)
+#define __NR_tkill			(__NR_Linux + 222)
 
 /*
  * Offset of the last Linux flavoured syscall
--- linux-2.5.3/./include/asm-mips/siginfo.h	Wed May 24 20:38:26 2000
+++ linux-2.5.3-ngpt/./include/asm-mips/siginfo.h	Fri Feb  1 13:12:28 2002
@@ -127,6 +127,7 @@
 #define SI_TIMER __SI_CODE(__SI_TIMER,-3) /* sent by timer expiration */
 #define SI_MESGQ	-4	/* sent by real time mesq state change */
 #define SI_SIGIO	-5	/* sent by queued SIGIO */
+#define SI_TKILL	-6	/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-alpha/unistd.h	Fri Nov  9 15:45:35 2001
+++ linux-2.5.3-ngpt/./include/asm-alpha/unistd.h	Fri Feb  1 13:12:28 2002
@@ -318,6 +318,7 @@
 #define __NR_gettid			378
 #define __NR_readahead			379
 #define __NR_security			380 /* syscall for security modules */
+#define __NR_tkill			381
 
 #if defined(__GNUC__)
 
--- linux-2.5.3/./include/asm-alpha/siginfo.h	Wed May 24 20:38:26 2000
+++ linux-2.5.3-ngpt/./include/asm-alpha/siginfo.h	Fri Feb  1 13:12:28 2002
@@ -107,6 +107,7 @@
 #define SI_MESGQ	-3		/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
 #define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_TKILL	-6		/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-m68k/unistd.h	Thu Oct 25 15:53:55 2001
+++ linux-2.5.3-ngpt/./include/asm-m68k/unistd.h	Fri Feb  1 13:12:28 2002
@@ -222,6 +222,8 @@
 #define __NR_setfsuid32		215
 #define __NR_setfsgid32		216
 #define __NR_getdents64		220
+#define __NR_gettid		221
+#define __NR_tkill		222
 
 /* user-visible error numbers are in the range -1 - -122: see
    <asm-m68k/errno.h> */
--- linux-2.5.3/./include/asm-m68k/siginfo.h	Mon Nov 27 19:11:26 2000
+++ linux-2.5.3-ngpt/./include/asm-m68k/siginfo.h	Fri Feb  1 13:12:28 2002
@@ -117,6 +117,7 @@
 #define SI_MESGQ	-3		/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
 #define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_TKILL	-6		/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-sparc/unistd.h	Sun Oct 21 12:36:54 2001
+++ linux-2.5.3-ngpt/./include/asm-sparc/unistd.h	Fri Feb  1 13:12:29 2002
@@ -271,6 +271,7 @@
 #define __NR_fdatasync          253
 #define __NR_nfsservctl         254
 #define __NR_aplib              255
+#define __NR_tkill              257
 
 #define _syscall0(type,name) \
 type name(void) \
--- linux-2.5.3/./include/asm-sparc/siginfo.h	Mon Jun 19 19:59:39 2000
+++ linux-2.5.3-ngpt/./include/asm-sparc/siginfo.h	Fri Feb  1 13:12:29 2002
@@ -112,6 +112,7 @@
 #define SI_MESGQ	-3		/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
 #define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_TKILL	-6		/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-ppc/unistd.h	Fri Nov  2 19:43:54 2001
+++ linux-2.5.3-ngpt/./include/asm-ppc/unistd.h	Fri Feb  1 13:12:29 2002
@@ -215,6 +215,7 @@
 #define __NR_madvise		205
 #define __NR_mincore		206
 #define __NR_gettid		207
+#define __NR_tkill		208
 
 #define __NR(n)	#n
 
--- linux-2.5.3/./include/asm-ppc/siginfo.h	Mon May 21 17:02:06 2001
+++ linux-2.5.3-ngpt/./include/asm-ppc/siginfo.h	Fri Feb  1 13:12:29 2002
@@ -108,6 +108,7 @@
 #define SI_MESGQ	-3		/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
 #define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_TKILL	-6		/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-sparc64/unistd.h	Sun Oct 21 12:36:54 2001
+++ linux-2.5.3-ngpt/./include/asm-sparc64/unistd.h	Fri Feb  1 13:12:29 2002
@@ -273,6 +273,7 @@
 #define __NR_fdatasync          253
 #define __NR_nfsservctl         254
 #define __NR_aplib              255
+#define __NR_tkill              256
 
 #define _syscall0(type,name) \
 type name(void) \
--- linux-2.5.3/./include/asm-sparc64/siginfo.h	Wed May 24 20:38:26 2000
+++ linux-2.5.3-ngpt/./include/asm-sparc64/siginfo.h	Fri Feb  1 13:12:29 2002
@@ -172,6 +172,7 @@
 #define SI_MESGQ	-3		/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
 #define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_TKILL	-6		/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-arm/siginfo.h	Sun Aug 12 13:14:00 2001
+++ linux-2.5.3-ngpt/./include/asm-arm/siginfo.h	Fri Feb  1 13:12:28 2002
@@ -107,6 +107,7 @@
 #define SI_MESGQ	-3		/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
 #define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_TKILL        -6              /* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-sh/siginfo.h	Thu Jan  4 15:19:13 2001
+++ linux-2.5.3-ngpt/./include/asm-sh/siginfo.h	Fri Feb  1 13:12:29 2002
@@ -107,6 +107,7 @@
 #define SI_MESGQ	-3		/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
 #define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_TKILL	-6		/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-sh/unistd.h	Mon Oct  2 13:57:34 2000
+++ linux-2.5.3-ngpt/./include/asm-sh/unistd.h	Fri Feb  1 13:12:29 2002
@@ -231,6 +231,8 @@
 #define __NR_madvise		219
 #define __NR_getdents64		220
 #define __NR_fcntl64		221
+#define __NR_gettid		222
+#define __NR_tkill		223
 
 /* user-visible error numbers are in the range -1 - -125: see <asm-sh/errno.h> */
 
--- linux-2.5.3/./include/asm-ia64/siginfo.h	Thu Apr  5 14:51:47 2001
+++ linux-2.5.3-ngpt/./include/asm-ia64/siginfo.h	Fri Feb  1 13:16:25 2002
@@ -124,6 +124,7 @@
 #define SI_MESGQ	-3		/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
 #define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_TKILL	-6		/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-ia64/unistd.h	Fri Nov  9 16:26:17 2001
+++ linux-2.5.3-ngpt/./include/asm-ia64/unistd.h	Fri Feb  1 13:12:28 2002
@@ -206,6 +206,7 @@
 #define __NR_getdents64			1214
 #define __NR_getunwind			1215
 #define __NR_readahead			1216
+#define __NR_tkill			1217
 
 #if !defined(__ASSEMBLY__) && !defined(ASSEMBLER)
 
--- linux-2.5.3/./include/asm-mips64/siginfo.h	Wed Jul  4 13:50:39 2001
+++ linux-2.5.3-ngpt/./include/asm-mips64/siginfo.h	Fri Feb  1 13:12:28 2002
@@ -127,6 +127,7 @@
 #define SI_TIMER __SI_CODE(__SI_TIMER,-3) /* sent by timer expiration */
 #define SI_MESGQ	-4	/* sent by real time mesq state change */
 #define SI_SIGIO	-5	/* sent by queued SIGIO */
+#define SI_TKILL	-6	/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-mips64/unistd.h	Tue Nov 28 23:42:04 2000
+++ linux-2.5.3-ngpt/./include/asm-mips64/unistd.h	Fri Feb  1 13:12:28 2002
@@ -461,11 +461,13 @@
 #define __NR_mincore			(__NR_Linux + 211)
 #define __NR_madvise			(__NR_Linux + 212)
 #define __NR_getdents64			(__NR_Linux + 213)
+#define __NR_gettid			(__NR_Linux + 214)
+#define __NR_tkill			(__NR_Linux + 215)
 
 /*
  * Offset of the last Linux flavoured syscall
  */
-#define __NR_Linux_syscalls		213
+#define __NR_Linux_syscalls		215
 
 #ifndef _LANGUAGE_ASSEMBLY
 
--- linux-2.5.3/./include/asm-s390/siginfo.h	Tue Feb 13 16:13:44 2001
+++ linux-2.5.3-ngpt/./include/asm-s390/siginfo.h	Fri Feb  1 13:12:29 2002
@@ -115,6 +115,7 @@
 #define SI_MESGQ	-3	/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4	/* sent by AIO completion */
 #define SI_SIGIO	-5	/* sent by queued SIGIO */
+#define SI_TKILL	-6	/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-s390/unistd.h	Thu Oct 11 11:43:38 2001
+++ linux-2.5.3-ngpt/./include/asm-s390/unistd.h	Fri Feb  1 13:12:29 2002
@@ -211,6 +211,8 @@
 #define __NR_mincore            218
 #define __NR_madvise            219
 #define __NR_getdents64		220
+#define __NR_gettid		226
+#define __NR_tkill		227
 
 
 /* user-visible error numbers are in the range -1 - -122: see <asm-s390/errno.h> */
--- linux-2.5.3/./include/asm-parisc/siginfo.h	Tue Dec  5 14:29:39 2000
+++ linux-2.5.3-ngpt/./include/asm-parisc/siginfo.h	Fri Feb  1 13:12:29 2002
@@ -107,6 +107,7 @@
 #define SI_MESGQ	-3		/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
 #define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_TKILL	-6		/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-parisc/unistd.h	Tue Dec  5 14:29:39 2000
+++ linux-2.5.3-ngpt/./include/asm-parisc/unistd.h	Fri Feb  1 13:12:29 2002
@@ -689,8 +689,10 @@
 
 #define __NR_getpmsg            (__NR_Linux + 196)      /* some people actually want streams */
 #define __NR_putpmsg            (__NR_Linux + 197)      /* some people actually want streams */
+#define __NR_gettid             (__NR_Linux + 198)
+#define __NR_tkill              (__NR_Linux + 199)
 
-#define __NR_Linux_syscalls     197
+#define __NR_Linux_syscalls     199
 
 #define HPUX_GATEWAY_ADDR       0xC0000004
 #define LINUX_GATEWAY_ADDR      0x100
--- linux-2.5.3/./include/asm-cris/siginfo.h	Thu Feb  8 18:32:44 2001
+++ linux-2.5.3-ngpt/./include/asm-cris/siginfo.h	Fri Feb  1 13:12:28 2002
@@ -107,6 +107,7 @@
 #define SI_MESGQ	-3		/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
 #define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_TKILL	-6		/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./include/asm-cris/unistd.h	Mon Jan 21 18:00:39 2002
+++ linux-2.5.3-ngpt/./include/asm-cris/unistd.h	Fri Feb  1 13:12:28 2002
@@ -230,6 +230,7 @@
 #define __NR_security           223     /* syscall for security modules */
 #define __NR_gettid             224
 #define __NR_readahead          225
+#define __NR_tkill              226
 
 /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
 #define _syscall0(type,name) \
--- linux-2.5.3/./include/asm-s390x/unistd.h	Thu Oct 11 11:43:38 2001
+++ linux-2.5.3-ngpt/./include/asm-s390x/unistd.h	Fri Feb  1 13:12:29 2002
@@ -181,6 +181,8 @@
 #define __NR_mincore            218
 #define __NR_madvise            219
 #define __NR_getdents64         220
+#define __NR_gettid		226
+#define __NR_tkill 	        227
 
 
 /* user-visible error numbers are in the range -1 - -122: see <asm-s390/errno.h> */
--- linux-2.5.3/./include/asm-s390x/siginfo.h	Tue Feb 13 16:13:44 2001
+++ linux-2.5.3-ngpt/./include/asm-s390x/siginfo.h	Fri Feb  1 13:12:29 2002
@@ -115,6 +115,7 @@
 #define SI_MESGQ	-3	/* sent by real time mesq state change */
 #define SI_ASYNCIO	-4	/* sent by AIO completion */
 #define SI_SIGIO	-5	/* sent by queued SIGIO */
+#define SI_TKILL	-6	/* sent by tkill system call */
 
 #define SI_FROMUSER(siptr)	((siptr)->si_code <= 0)
 #define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0)
--- linux-2.5.3/./arch/i386/kernel/entry.S	Tue Jan 29 20:50:30 2002
+++ linux-2.5.3-ngpt/./arch/i386/kernel/entry.S	Fri Feb  1 13:14:11 2002
@@ -667,6 +667,7 @@
 	.long SYMBOL_NAME(sys_removexattr)	/* 235 */
 	.long SYMBOL_NAME(sys_lremovexattr)
 	.long SYMBOL_NAME(sys_fremovexattr)
+ 	.long SYMBOL_NAME(sys_tkill)
 
 	.rept NR_syscalls-(.-sys_call_table)/4
 		.long SYMBOL_NAME(sys_ni_syscall)
--- linux-2.5.3/./arch/i386/kernel/signal.c	Mon Jan 28 17:11:45 2002
+++ linux-2.5.3-ngpt/./arch/i386/kernel/signal.c	Wed Feb  6 09:47:45 2002
@@ -683,10 +683,7 @@
 				/* FALLTHRU */
 
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/alpha/kernel/entry.S	Mon Jan 28 17:14:22 2002
+++ linux-2.5.3-ngpt/./arch/alpha/kernel/entry.S	Fri Feb  1 13:12:28 2002
@@ -1148,3 +1148,4 @@
 	.quad sys_gettid
 	.quad sys_readahead
 	.quad sys_ni_syscall			/* 380, sys_security */
+	.quad sys_tkill
--- linux-2.5.3/./arch/alpha/kernel/signal.c	Fri Nov  9 15:45:35 2001
+++ linux-2.5.3-ngpt/./arch/alpha/kernel/signal.c	Wed Feb  6 10:02:10 2002
@@ -717,9 +717,7 @@
 
 			default:
 				lock_kernel();
-				sigaddset(&current->pending.signal, signr);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 			continue;
--- linux-2.5.3/./arch/sparc/kernel/signal.c	Mon Jan 14 12:10:44 2002
+++ linux-2.5.3-ngpt/./arch/sparc/kernel/signal.c	Wed Feb  6 10:02:31 2002
@@ -1280,10 +1280,7 @@
 #endif
 				/* fall through */
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOT REACHED */
 			}
 		}
--- linux-2.5.3/./arch/sparc/kernel/systbls.S	Sun Oct 21 12:36:54 2001
+++ linux-2.5.3-ngpt/./arch/sparc/kernel/systbls.S	Fri Feb  1 13:12:28 2002
@@ -70,7 +70,7 @@
 /*240*/	.long sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler
 /*245*/	.long sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys_sched_rr_get_interval, sys_nanosleep
 /*250*/	.long sparc_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_nfsservctl
-/*255*/	.long sys_nis_syscall, sys_nis_syscall
+/*255*/	.long sys_nis_syscall, sys_nis_syscall, sys_tkill
 
 #ifdef CONFIG_SUNOS_EMUL
 	/* Now the SunOS syscall table. */
--- linux-2.5.3/./arch/mips/kernel/signal.c	Sun Sep  9 12:43:01 2001
+++ linux-2.5.3-ngpt/./arch/mips/kernel/signal.c	Wed Feb  6 10:02:48 2002
@@ -661,10 +661,7 @@
 				/* FALLTHRU */
 
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/mips/kernel/syscalls.h	Mon Oct  8 12:39:18 2001
+++ linux-2.5.3-ngpt/./arch/mips/kernel/syscalls.h	Fri Feb  1 13:12:28 2002
@@ -235,3 +235,5 @@
 SYS(sys_madvise, 3)
 SYS(sys_getdents64, 3)
 SYS(sys_fcntl64, 3)				/* 4220 */
+SYS(sys_gettid, 0)
+SYS(sys_tkill, 2)
--- linux-2.5.3/./arch/ppc/kernel/misc.S	Fri Nov  2 19:43:54 2001
+++ linux-2.5.3-ngpt/./arch/ppc/kernel/misc.S	Fri Feb  1 13:12:28 2002
@@ -1121,6 +1121,7 @@
 	.long sys_madvise	/* 205 */
 	.long sys_mincore
 	.long sys_gettid
+	.long sys_tkill
 	.rept NR_syscalls-(.-sys_call_table)/4
 		.long sys_ni_syscall
 	.endr
--- linux-2.5.3/./arch/ppc/kernel/signal.c	Mon May 21 19:04:47 2001
+++ linux-2.5.3-ngpt/./arch/ppc/kernel/signal.c	Wed Feb  6 10:03:06 2002
@@ -641,10 +641,7 @@
 				/* FALLTHRU */
 
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/m68k/kernel/entry.S	Mon Oct  8 12:39:18 2001
+++ linux-2.5.3-ngpt/./arch/m68k/kernel/entry.S	Fri Feb  1 13:12:28 2002
@@ -646,6 +646,8 @@
 	.long SYMBOL_NAME(sys_ni_syscall)
 	.long SYMBOL_NAME(sys_ni_syscall)
 	.long SYMBOL_NAME(sys_getdents64)	/* 220 */
+	.long SYMBOL_NAME(sys_gettid)
+	.long SYMBOL_NAME(sys_tkill)
 
 	.rept NR_syscalls-(.-SYMBOL_NAME(sys_call_table))/4
 		.long SYMBOL_NAME(sys_ni_syscall)
--- linux-2.5.3/./arch/m68k/kernel/signal.c	Wed Jan 24 17:21:28 2001
+++ linux-2.5.3-ngpt/./arch/m68k/kernel/signal.c	Wed Feb  6 10:03:22 2002
@@ -1135,10 +1135,7 @@
 				/* FALLTHRU */
 
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/sparc64/kernel/signal32.c	Mon Jan 14 12:10:44 2002
+++ linux-2.5.3-ngpt/./arch/sparc64/kernel/signal32.c	Wed Feb  6 10:03:43 2002
@@ -1479,10 +1479,7 @@
 #endif
 				/* fall through */
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOT REACHED */
 			}
 		}
--- linux-2.5.3/./arch/sparc64/kernel/systbls.S	Sun Oct 21 12:36:54 2001
+++ linux-2.5.3-ngpt/./arch/sparc64/kernel/systbls.S	Fri Feb  1 13:12:28 2002
@@ -70,7 +70,7 @@
 /*240*/	.word sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler
 	.word sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys32_sched_rr_get_interval, sys32_nanosleep
 /*250*/	.word sys32_mremap, sys32_sysctl, sys_getsid, sys_fdatasync, sys32_nfsservctl
-	.word sys_aplib
+	.word sys_aplib, sys_tkill
 
 	/* Now the 64-bit native Linux syscall table. */
 
@@ -129,7 +129,7 @@
 /*240*/	.word sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler
 	.word sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys_sched_rr_get_interval, sys_nanosleep
 /*250*/	.word sys64_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_nfsservctl
-	.word sys_aplib
+	.word sys_aplib, sys_tkill
 
 #if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \
     defined(CONFIG_SOLARIS_EMUL_MODULE)
--- linux-2.5.3/./arch/sparc64/kernel/signal.c	Mon Jan 14 12:10:44 2002
+++ linux-2.5.3-ngpt/./arch/sparc64/kernel/signal.c	Wed Feb  6 10:03:54 2002
@@ -807,10 +807,7 @@
 #endif
 				/* fall through */
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOT REACHED */
 			}
 		}
--- linux-2.5.3/./arch/arm/kernel/calls.S	Mon Oct  8 12:39:18 2001
+++ linux-2.5.3-ngpt/./arch/arm/kernel/calls.S	Fri Feb  1 13:12:28 2002
@@ -236,6 +236,8 @@
 		.long	SYMBOL_NAME(sys_mincore)
 /* 220 */	.long	SYMBOL_NAME(sys_madvise)
 		.long	SYMBOL_NAME(sys_fcntl64)
+		.long	SYMBOL_NAME(sys_gettid)
+		.long	SYMBOL_NAME(sys_tkill)
 __syscall_end:
 
 		.rept	NR_syscalls - (__syscall_end - __syscall_start) / 4
--- linux-2.5.3/./arch/arm/kernel/signal.c	Sat Jan  5 15:04:30 2002
+++ linux-2.5.3-ngpt/./arch/arm/kernel/signal.c	Wed Feb  6 10:04:08 2002
@@ -637,10 +637,7 @@
 				/* FALLTHRU */
 
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/sh/kernel/entry.S	Mon Jan 28 17:14:23 2002
+++ linux-2.5.3-ngpt/./arch/sh/kernel/entry.S	Fri Feb  1 13:12:28 2002
@@ -1195,6 +1195,8 @@
 	.long SYMBOL_NAME(sys_madvise)
 	.long SYMBOL_NAME(sys_getdents64)	/* 220 */
 	.long SYMBOL_NAME(sys_fcntl64)
+	.long SYMBOL_NAME(sys_gettid)
+	.long SYMBOL_NAME(sys_tkill)
 
 	/*
 	 * NOTE!! This doesn't have to be exact - we just have
--- linux-2.5.3/./arch/sh/kernel/signal.c	Thu Jan 24 14:08:15 2002
+++ linux-2.5.3-ngpt/./arch/sh/kernel/signal.c	Wed Feb  6 10:42:28 2002
@@ -673,10 +673,7 @@
 				/* FALLTHRU */
 
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/ia64/kernel/entry.S	Mon Jan 28 17:14:22 2002
+++ linux-2.5.3-ngpt/./arch/ia64/kernel/entry.S	Fri Feb  1 13:12:28 2002
@@ -1130,6 +1130,7 @@
 	data8 sys_getdents64
 	data8 sys_getunwind			// 1215
 	data8 sys_readahead
+	data8 sys_tkill
 	data8 ia64_ni_syscall
 	data8 ia64_ni_syscall
 	data8 ia64_ni_syscall
--- linux-2.5.3/./arch/ia64/kernel/signal.c	Fri Nov  9 16:26:17 2001
+++ linux-2.5.3-ngpt/./arch/ia64/kernel/signal.c	Wed Feb  6 10:44:10 2002
@@ -578,10 +578,7 @@
 				/* FALLTHRU */
 
 			      default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/mips64/kernel/scall_64.S	Mon Jan 28 17:14:22 2002
+++ linux-2.5.3-ngpt/./arch/mips64/kernel/scall_64.S	Fri Feb  1 13:12:28 2002
@@ -347,3 +347,5 @@
 	PTR	sys_mincore
 	PTR	sys_madvise
 	PTR	sys_getdents64
+	PTR	sys_gettid
+	PTR	sys_tkill
--- linux-2.5.3/./arch/mips64/kernel/scall_o32.S	Mon Jan 28 17:14:23 2002
+++ linux-2.5.3-ngpt/./arch/mips64/kernel/scall_o32.S	Fri Feb  1 13:12:28 2002
@@ -454,6 +454,8 @@
 	sys	sys_madvise	3
 	sys	sys_getdents64	3
 	sys	sys32_fcntl64	3			/* 4220 */
+	sys	sys32_gettid	0
+	sys	sys32_tkill	2
 	.endm
 
 	.macro	sys function, nargs
--- linux-2.5.3/./arch/mips64/kernel/signal.c	Sun Sep  9 12:43:01 2001
+++ linux-2.5.3-ngpt/./arch/mips64/kernel/signal.c	Wed Feb  6 10:04:45 2002
@@ -685,10 +685,7 @@
 				/* FALLTHRU */
 
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/mips64/kernel/signal32.c	Sun Sep  9 12:43:01 2001
+++ linux-2.5.3-ngpt/./arch/mips64/kernel/signal32.c	Wed Feb  6 10:04:57 2002
@@ -757,10 +757,7 @@
 				/* FALLTHRU */
 
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/s390/kernel/entry.S	Mon Jan 28 17:14:23 2002
+++ linux-2.5.3-ngpt/./arch/s390/kernel/entry.S	Fri Feb  1 13:12:28 2002
@@ -602,6 +602,8 @@
 	.long  sys_ni_syscall		 /* 224 - reserved for posix_acl */
 	.rept  255-224
 	.long  sys_ni_syscall
+	.long  sys_gettid		/* 226 */
+	.long  sys_tkill		/* 227 */
 	.endr
 
 /*
--- linux-2.5.3/./arch/s390/kernel/signal.c	Thu Oct 11 11:04:57 2001
+++ linux-2.5.3-ngpt/./arch/s390/kernel/signal.c	Wed Feb  6 10:44:27 2002
@@ -563,10 +563,7 @@
                                 /* FALLTHRU */
 
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/parisc/kernel/signal.c	Wed Dec  6 13:46:39 2000
+++ linux-2.5.3-ngpt/./arch/parisc/kernel/signal.c	Wed Feb  6 10:44:41 2002
@@ -581,11 +581,7 @@
 				/* FALLTHRU */
 
 			default:
-				lock_kernel();
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/parisc/kernel/syscall.S	Mon Oct  8 12:39:18 2001
+++ linux-2.5.3-ngpt/./arch/parisc/kernel/syscall.S	Fri Feb  1 13:12:28 2002
@@ -552,6 +552,8 @@
 	ENTRY_UHOH(shmctl)		/* 195 */
 	ENTRY_SAME(ni_syscall)		/* streams1 */
 	ENTRY_SAME(ni_syscall)		/* streams2 */
+	ENTRY_SAME(gettid)
+	ENTRY_SAME(tkill)
 
 .end
 
--- linux-2.5.3/./arch/cris/kernel/entry.S	Mon Jan 21 18:00:39 2002
+++ linux-2.5.3-ngpt/./arch/cris/kernel/entry.S	Fri Feb  1 13:12:28 2002
@@ -1015,6 +1015,7 @@
         .long SYMBOL_NAME(sys_ni_syscall)       /* Reserved for Security */
         .long SYMBOL_NAME(sys_gettid)
         .long SYMBOL_NAME(sys_readahead)        /* 225 */
+        .long SYMBOL_NAME(sys_tkill)
 
         /*
          * NOTE!! This doesn't have to be exact - we just have
--- linux-2.5.3/./arch/cris/kernel/signal.c	Mon Oct  8 13:43:54 2001
+++ linux-2.5.3-ngpt/./arch/cris/kernel/signal.c	Wed Feb  6 10:44:53 2002
@@ -679,10 +679,7 @@
 
 			default:
 				lock_kernel();
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/s390x/kernel/entry.S	Mon Jan 28 17:14:23 2002
+++ linux-2.5.3-ngpt/./arch/s390x/kernel/entry.S	Fri Feb  1 13:12:28 2002
@@ -635,6 +635,8 @@
 	.long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 224 - reserved for posix_acl */
         .rept  255-224
 	.long  SYSCALL(sys_ni_syscall,sys_ni_syscall)
+	.long  SYSCALL(sys_gettid,sys_gettid)
+	.long  SYSCALL(sys_tkill,sys_tkill)
 	.endr
 
 /*
--- linux-2.5.3/./arch/s390x/kernel/signal.c	Thu Oct 11 11:04:57 2001
+++ linux-2.5.3-ngpt/./arch/s390x/kernel/signal.c	Wed Feb  6 10:05:16 2002
@@ -569,10 +569,7 @@
                                 /* FALLTHRU */
 
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}
--- linux-2.5.3/./arch/s390x/kernel/signal32.c	Thu Oct 11 11:04:57 2001
+++ linux-2.5.3-ngpt/./arch/s390x/kernel/signal32.c	Wed Feb  6 10:05:34 2002
@@ -699,10 +699,7 @@
                                 /* FALLTHRU */
 
 			default:
-				sigaddset(&current->pending.signal, signr);
-				recalc_sigpending(current);
-				current->flags |= PF_SIGNALED;
-				do_exit(exit_code);
+				sig_exit(signr, exit_code, &info);
 				/* NOTREACHED */
 			}
 		}


  reply	other threads:[~2002-02-06 18:21 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-02-01 21:08 [PATCH 2.5.3] Changes to signal to better support thread groups Dave McCracken
2002-02-06  1:26 ` Linus Torvalds
2002-02-06  1:33 ` Linus Torvalds
2002-02-06 17:02   ` [PATCH 2.5.3] Second version of signal changes for " Dave McCracken
2002-02-06 17:40     ` Linus Torvalds
2002-02-06 18:21       ` Dave McCracken [this message]
2002-02-06 18:40         ` [PATCH 2.5.3] Third " Linus Torvalds

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=17060000.1013019666@baldur \
    --to=dmccr@us.ibm.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=davej@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@transmeta.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox