linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall
@ 2008-09-30 19:48 Thomas Gleixner
  2008-09-30 19:48 ` [RFC patch 1/3] signals: split do_tkill Thomas Gleixner
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Thomas Gleixner @ 2008-09-30 19:48 UTC (permalink / raw)
  To: LKML
  Cc: Ingo Molnar, Ulrich Drepper, Roland McGrath, Oleg Nesterov,
	Michael Kerrisk

sys_kill has a counterpart sys_tgkill which allows to send signals to
a particular thread. sys_rt_sigqueueinfo is lacking such a counterpart.

Aside of the asymetry it is a show stopper for migrating applications
from other unix-alike RTOSes.

The following patch series implements rt_tgsigqueueinfo and hooks it
up for x86.

Find below the raw documentation.

Thanks,

	tglx
----

NAME
       rt_tgsigqueueinfo - Send signal information to a signal to a thread

SYNOPSIS
       long sys_rt_tgsigqueueinfo (int tgid, int tid, int sig, siginfo_t *uinfo);

DESCRIPTION

       rt_tgsigqueueinfo sends signal sig information uinfo to the
       thread with the thread ID tid in the thread group tgid.  (By
       contrast, rt_sigqueueinfo(2) can only be used to send a signal
       info to a process (i.e., thread group) as a whole, and the
       signal will be delivered to an arbitrary thread within that
       process.)

RETURN VALUE

       rt_tgsigqueueinfo returns 0 on success; otherwise,
       rt_sigqueueinfo returns one of the errors listed in the
       "Errors" section.

ERRORS
       -EFAULT
              An invalid value for uinfo was specified.

       -EINVAL
	      An invalid TID, TGID or signal was specified.

       -EPERM 
              Permission denied.  For the required permissions,
              see rt_sigqueueinfo(2).

       -ESRCH 
       	      No process with the specified thread ID and thread group
              ID exists.

 



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [RFC patch 1/3] signals: split do_tkill
  2008-09-30 19:48 [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall Thomas Gleixner
@ 2008-09-30 19:48 ` Thomas Gleixner
  2008-09-30 19:49 ` [RFC patch 2/3] signals: implement sys_rt_tgsigqueueinfo Thomas Gleixner
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Thomas Gleixner @ 2008-09-30 19:48 UTC (permalink / raw)
  To: LKML
  Cc: Ingo Molnar, Ulrich Drepper, Roland McGrath, Oleg Nesterov,
	Michael Kerrisk

[-- Attachment #1: signals-split-do-tkill.patch --]
[-- Type: text/plain, Size: 2132 bytes --]

Split out the code from do_tkill to make it reusable by the follow up
patch which implements sys_rt_tgsigqueueinfo

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 kernel/signal.c |   31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)

Index: linux-2.6-tip/kernel/signal.c
===================================================================
--- linux-2.6-tip.orig/kernel/signal.c
+++ linux-2.6-tip/kernel/signal.c
@@ -2212,24 +2212,20 @@ sys_kill(pid_t pid, int sig)
 	return kill_something_info(sig, &info, pid);
 }
 
-static int do_tkill(pid_t tgid, pid_t pid, int sig)
+static int
+do_send_specific(pid_t tgid, pid_t pid, int sig, struct siginfo *info)
 {
-	int error;
-	struct siginfo info;
 	struct task_struct *p;
 	unsigned long flags;
+	int error = -ESRCH;
 
-	error = -ESRCH;
-	info.si_signo = sig;
-	info.si_errno = 0;
-	info.si_code = SI_TKILL;
-	info.si_pid = task_tgid_vnr(current);
-	info.si_uid = current->uid;
+	info->si_pid = task_tgid_vnr(current);
+	info->si_uid = current->uid;
 
 	rcu_read_lock();
 	p = find_task_by_vpid(pid);
 	if (p && (tgid <= 0 || task_tgid_vnr(p) == tgid)) {
-		error = check_kill_permission(sig, &info, p);
+		error = check_kill_permission(sig, info, p);
 		/*
 		 * The null signal is a permissions and process existence
 		 * probe.  No signal is actually delivered.
@@ -2239,7 +2235,7 @@ static int do_tkill(pid_t tgid, pid_t pi
 		 * signal is private anyway.
 		 */
 		if (!error && sig && lock_task_sighand(p, &flags)) {
-			error = specific_send_sig_info(sig, &info, p);
+			error = specific_send_sig_info(sig, info, p);
 			unlock_task_sighand(p, &flags);
 		}
 	}
@@ -2248,6 +2244,19 @@ static int do_tkill(pid_t tgid, pid_t pi
 	return error;
 }
 
+static int do_tkill(pid_t tgid, pid_t pid, int sig)
+{
+	struct siginfo info;
+
+	info.si_signo = sig;
+	info.si_errno = 0;
+	info.si_code = SI_TKILL;
+	info.si_pid = task_tgid_vnr(current);
+	info.si_uid = current->uid;
+
+	return do_send_specific(tgid, pid, sig, &info);
+}
+
 /**
  *  sys_tgkill - send signal to one specific thread
  *  @tgid: the thread group ID of the thread



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [RFC patch 2/3] signals: implement sys_rt_tgsigqueueinfo
  2008-09-30 19:48 [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall Thomas Gleixner
  2008-09-30 19:48 ` [RFC patch 1/3] signals: split do_tkill Thomas Gleixner
@ 2008-09-30 19:49 ` Thomas Gleixner
  2008-09-30 19:49 ` [RFC patch 3/3] x86: hookup sys_rt_tgsigqueueinfo Thomas Gleixner
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Thomas Gleixner @ 2008-09-30 19:49 UTC (permalink / raw)
  To: LKML
  Cc: Ingo Molnar, Ulrich Drepper, Roland McGrath, Oleg Nesterov,
	Michael Kerrisk

[-- Attachment #1: signals-implement-rt-tgsigqueueinfo.patch --]
[-- Type: text/plain, Size: 1319 bytes --]

sys_kill has the per thread counterpart sys_tgkill. sigqueueinfo is
missing a thread directed counterpart. Such an interface is important
for migrating applications from other OSes which have the per thread
delivery implemented.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 kernel/signal.c |   21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Index: linux-2.6-tip/kernel/signal.c
===================================================================
--- linux-2.6-tip.orig/kernel/signal.c
+++ linux-2.6-tip/kernel/signal.c
@@ -2307,6 +2307,27 @@ sys_rt_sigqueueinfo(pid_t pid, int sig, 
 	return kill_proc_info(sig, &info, pid);
 }
 
+asmlinkage long
+sys_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, siginfo_t __user *uinfo)
+{
+	siginfo_t info;
+
+	/* This is only valid for single tasks */
+	if (pid <= 0 || tgid <= 0)
+		return -EINVAL;
+
+	if (copy_from_user(&info, uinfo, sizeof(siginfo_t)))
+		return -EFAULT;
+
+	/* Not even root can pretend to send signals from the kernel.
+	   Nor can they impersonate a kill(), which adds source info.  */
+	if (info.si_code >= 0)
+		return -EPERM;
+	info.si_signo = sig;
+
+	return do_send_specific(tgid, pid, sig, &info);
+}
+
 int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact)
 {
 	struct task_struct *t = current;



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [RFC patch 3/3] x86: hookup sys_rt_tgsigqueueinfo
  2008-09-30 19:48 [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall Thomas Gleixner
  2008-09-30 19:48 ` [RFC patch 1/3] signals: split do_tkill Thomas Gleixner
  2008-09-30 19:49 ` [RFC patch 2/3] signals: implement sys_rt_tgsigqueueinfo Thomas Gleixner
@ 2008-09-30 19:49 ` Thomas Gleixner
  2008-10-01  6:39 ` [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall Roland McGrath
  2008-10-07 13:49 ` Michael Kerrisk
  4 siblings, 0 replies; 10+ messages in thread
From: Thomas Gleixner @ 2008-09-30 19:49 UTC (permalink / raw)
  To: LKML
  Cc: Ingo Molnar, Ulrich Drepper, Roland McGrath, Oleg Nesterov,
	Michael Kerrisk

[-- Attachment #1: x86-hookup-rt-tgsigqueueinfo.patch --]
[-- Type: text/plain, Size: 1541 bytes --]

Make the new sys_rt_tgsigqueueinfo available for x86.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/kernel/syscall_table_32.S |    1 +
 include/asm-x86/unistd_32.h        |    1 +
 include/asm-x86/unistd_64.h        |    2 ++
 3 files changed, 4 insertions(+)

Index: linux-2.6-tip/arch/x86/kernel/syscall_table_32.S
===================================================================
--- linux-2.6-tip.orig/arch/x86/kernel/syscall_table_32.S
+++ linux-2.6-tip/arch/x86/kernel/syscall_table_32.S
@@ -332,3 +332,4 @@ ENTRY(sys_call_table)
 	.long sys_dup3			/* 330 */
 	.long sys_pipe2
 	.long sys_inotify_init1
+	.long sys_rt_tgsigqueueinfo
Index: linux-2.6-tip/include/asm-x86/unistd_32.h
===================================================================
--- linux-2.6-tip.orig/include/asm-x86/unistd_32.h
+++ linux-2.6-tip/include/asm-x86/unistd_32.h
@@ -338,6 +338,7 @@
 #define __NR_dup3		330
 #define __NR_pipe2		331
 #define __NR_inotify_init1	332
+#define __NR_rt_tgsigqueueinfo	333
 
 #ifdef __KERNEL__
 
Index: linux-2.6-tip/include/asm-x86/unistd_64.h
===================================================================
--- linux-2.6-tip.orig/include/asm-x86/unistd_64.h
+++ linux-2.6-tip/include/asm-x86/unistd_64.h
@@ -653,6 +653,8 @@ __SYSCALL(__NR_dup3, sys_dup3)
 __SYSCALL(__NR_pipe2, sys_pipe2)
 #define __NR_inotify_init1			294
 __SYSCALL(__NR_inotify_init1, sys_inotify_init1)
+#define __NR_rt_tgsigqueueinfo			295
+__SYSCALL(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo)
 
 
 #ifndef __NO_STUBS



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall
  2008-09-30 19:48 [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall Thomas Gleixner
                   ` (2 preceding siblings ...)
  2008-09-30 19:49 ` [RFC patch 3/3] x86: hookup sys_rt_tgsigqueueinfo Thomas Gleixner
@ 2008-10-01  6:39 ` Roland McGrath
  2008-10-01  7:51   ` Thomas Gleixner
  2008-10-07 13:49 ` Michael Kerrisk
  4 siblings, 1 reply; 10+ messages in thread
From: Roland McGrath @ 2008-10-01  6:39 UTC (permalink / raw)
  To: Thomas Gleixner
  Cc: LKML, Ingo Molnar, Ulrich Drepper, Oleg Nesterov, Michael Kerrisk

The core of this looks fine to me.  Presumably this would be expressed in
userland as pthread_sigqueue.

You are missing compat_sys_rt_tgsigqueueinfo for e.g. the
arch/x86/ia32/ia32entry.S table.

The clean way to do that would be a do_rt_tgsigqueueinfo taking
the siginfo_t * (not __user).  That is, just split out the copy_from_user,
so compat_sys_rt_tgsigqueueinfo does copy_siginfo_from_user32 instead.


Thanks,
Roland


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall
  2008-10-01  6:39 ` [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall Roland McGrath
@ 2008-10-01  7:51   ` Thomas Gleixner
  0 siblings, 0 replies; 10+ messages in thread
From: Thomas Gleixner @ 2008-10-01  7:51 UTC (permalink / raw)
  To: Roland McGrath
  Cc: LKML, Ingo Molnar, Ulrich Drepper, Oleg Nesterov, Michael Kerrisk

On Tue, 30 Sep 2008, Roland McGrath wrote:

> The core of this looks fine to me.  Presumably this would be expressed in
> userland as pthread_sigqueue.

Yes, that would match the pthread_kill then.

> You are missing compat_sys_rt_tgsigqueueinfo for e.g. the
> arch/x86/ia32/ia32entry.S table.

Duh, did not think about that.
 
> The clean way to do that would be a do_rt_tgsigqueueinfo taking
> the siginfo_t * (not __user).  That is, just split out the copy_from_user,
> so compat_sys_rt_tgsigqueueinfo does copy_siginfo_from_user32 instead.

Will do.

Thanks,

	tglx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall
  2008-09-30 19:48 [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall Thomas Gleixner
                   ` (3 preceding siblings ...)
  2008-10-01  6:39 ` [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall Roland McGrath
@ 2008-10-07 13:49 ` Michael Kerrisk
  2008-10-07 20:21   ` Roland McGrath
  4 siblings, 1 reply; 10+ messages in thread
From: Michael Kerrisk @ 2008-10-07 13:49 UTC (permalink / raw)
  To: Thomas Gleixner
  Cc: LKML, Ingo Molnar, Ulrich Drepper, Roland McGrath, Oleg Nesterov

Thomas,

On Tue, Sep 30, 2008 at 9:48 PM, Thomas Gleixner <tglx@linutronix.de> wrote:
> sys_kill has a counterpart sys_tgkill which allows to send signals to
> a particular thread. sys_rt_sigqueueinfo is lacking such a counterpart.
>
> Aside of the asymetry it is a show stopper for migrating applications
> from other unix-alike RTOSes.
>
> The following patch series implements rt_tgsigqueueinfo and hooks it
> up for x86.

I'm not sure if I've run across a bug or (maybe more likely) have a
bug in my test code.  Could you take a look at the test programs
below.

When I use t_rt_tgsigqueueinfo.c to send a signal to my receiving
program it crashes because the siginfo_t argument to the signal
handler has a bad value (0x33); it's not obvious to me how it should
get to have that value (have I misconstructed something in the
t_rt_tgsigqueuinfo.c program?).

Cheers,

Michael

==========

$ ./multithread_sig_receiver 44 x
Established handler for signal 44
Main: TGID = 6105; TID = 6105
Thread 1: PID = 6105; TID = 6106; arg = x
Thread 1: about to pause
                                                              $
./t_rt_tgsigqueuinfo 6105 6106 44 1
PID = 6105; TID = 6106; caught signal 44:
0x33
Segmentation fault (core dumped)

=========

/*#* t_rt_tgsigqueueinfo.c

   Copyright 2008, Linux Foundation;
   written by Michael Kerrisk <mtk.manpages@gmail.com>
*/
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>

#define errExit(msg)    do { perror(msg); exit(EXIT_FAILURE); \
                        } while (0)

#if defined(__i386__)
#define SYS_rt_tgsigqueueinfo 333
#endif

static int
rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig, siginfo_t *si)
{
    return syscall(SYS_rt_tgsigqueueinfo, tgid, tid, sig, si);
}


int
main(int argc, char *argv[])
{
    pid_t tgid, tid;
    siginfo_t si;
    int sig, val;

    if (argc < 5) {
        fprintf(stderr, "Usage: %s <tgid> <tid> <sig> <val>\n", argv[0]);
        exit(EXIT_SUCCESS);
    }

    printf("My PID is %ld\n", (long) getpid());

    tgid = atoi(argv[1]);
    tid = atoi(argv[2]);
    sig = atoi(argv[3]);
    val = atoi(argv[4]);

    si.si_signo = sig;
    si.si_code = SI_QUEUE;
    si.si_pid = getpid();
    si.si_uid = getuid();
    si.si_value.sival_int = val;

    if (rt_tgsigqueueinfo(tgid, tid, sig, &si) == -1)
        errExit("rt_tgsigqueueinfo");

    exit(EXIT_SUCCESS);
} /* main */

=====================

/*#* multithread_sig_receiver.c

   Copyright 2008, Linux Foundation;
   written by Michael Kerrisk <mtk.manpages@gmail.com>
*/
#define _GNU_SOURCE
#include <sys/syscall.h>
#include <ctype.h>
#include <unistd.h>
#include <signal.h>
#include <pthread.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#define errExit(msg)    do { perror(msg); exit(EXIT_FAILURE); \
                        } while (0)

#define errExitEN(en, msg) \
                        do { errno = en; perror(msg); \
                             exit(EXIT_FAILURE); } while (0)

static int test_sig;

struct thread_arg {
    int   thread_num;
    char *argv_string;
};

static pid_t
gettid(void)
{
    return syscall(SYS_gettid);
}

static void
handler(int sig, siginfo_t *si, void *uc)
{
    printf("PID = %ld; TID = %ld; caught signal %d: \n",
            (long) getpid(), (long) gettid(), sig);
    printf("%p\n", si);
    printf("si_signo=%d ", si->si_signo);
    printf("si_code=%d ", si->si_code);
    printf("si_pid=%ld ", (long) si->si_pid);
    printf("si_uid=%ld ", (long) si->si_uid);
    printf("si_value.sival_int=%d\n", si->si_value.sival_int);
}

static void *
threadFunc(void *arg)
{
    struct thread_arg *ta = (struct thread_arg *) arg;
    sigset_t new;
    int s;

    printf("Thread %d: PID = %ld; TID = %ld; arg = %s\n", ta->thread_num,
            (long) getpid(), (long) gettid(), ta->argv_string);

    if (ta->argv_string[0] == 'b') {
        printf("Thread %d: blocking signal\n", ta->thread_num);
        sigemptyset(&new);
        sigaddset(&new, test_sig);
        s = pthread_sigmask(SIG_SETMASK, &new, NULL);
        if (s != 0)
            errExit("pthread_sigmask");
    }

    if (isdigit(ta->argv_string[1])) {
        sleep(atoi(&ta->argv_string[1]));
        printf("Thread %d: unblocking signal\n", ta->thread_num);
        sigemptyset(&new);
        s = pthread_sigmask(SIG_SETMASK, &new, NULL);
        if (s != 0)
            errExit("pthread_sigmask");
    }

    printf("Thread %d: about to pause\n", ta->thread_num);

    for (;;)
        pause();
} /* threadFunc */


#define MAX_ARGS 1000

int
main(int argc, char *argv[])
{
    pthread_t t;
    int s, j;
    struct sigaction sa;
    struct thread_arg ta[MAX_ARGS];
    sigset_t new;

    if (argc < 3) {
        fprintf(stderr, "Usage: %s <sig> <thread-config>...\n", argv[0]);
        exit(EXIT_SUCCESS);
    }

    if (argc > MAX_ARGS) {
        fprintf(stderr, "Too many arguments\n");
        exit(EXIT_SUCCESS);
    }

    test_sig = atoi(argv[1]);

    sigemptyset(&new);
    if (sigprocmask(SIG_SETMASK, &new, NULL) == -1)
        errExit("sigprocmask");

    sa.sa_flags = 0;
    sa.sa_sigaction = handler;
    sigemptyset(&sa.sa_mask);
    if (sigaction(test_sig, &sa, NULL) == -1)
        errExit("sigaction");
    printf("Established handler for signal %d\n", test_sig);

    printf("Main: TGID = %ld; TID = %ld\n",
            (long) getpid(), (long) gettid());

    for (j = 0; j + 2 < argc; j++) {
        ta[j].thread_num = j + 1;
        ta[j].argv_string = argv[j + 2];

        s = pthread_create(&t, NULL, threadFunc, &ta[j]);
        if (s != 0)
            errExitEN(s, "pthread_create");
    }

    pause();
} /* main */

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall
  2008-10-07 13:49 ` Michael Kerrisk
@ 2008-10-07 20:21   ` Roland McGrath
  2008-10-08  2:50     ` Michael Kerrisk
  0 siblings, 1 reply; 10+ messages in thread
From: Roland McGrath @ 2008-10-07 20:21 UTC (permalink / raw)
  To: mtk.manpages
  Cc: Thomas Gleixner, LKML, Ingo Molnar, Ulrich Drepper, Oleg Nesterov

You need .sa_flags = SA_SIGINFO.


Thanks,
Roland

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall
  2008-10-07 20:21   ` Roland McGrath
@ 2008-10-08  2:50     ` Michael Kerrisk
  0 siblings, 0 replies; 10+ messages in thread
From: Michael Kerrisk @ 2008-10-08  2:50 UTC (permalink / raw)
  To: Roland McGrath
  Cc: Thomas Gleixner, LKML, Ingo Molnar, Ulrich Drepper, Oleg Nesterov

On Tue, Oct 7, 2008 at 10:21 PM, Roland McGrath <roland@redhat.com> wrote:
> You need .sa_flags = SA_SIGINFO.

D'oh!  Overlooking the obvious!  Thanks Roland.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [RFC patch 3/3] x86: hookup sys_rt_tgsigqueueinfo
  2008-10-01 10:01 [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall V2 Thomas Gleixner
@ 2008-10-01 10:01 ` Thomas Gleixner
  0 siblings, 0 replies; 10+ messages in thread
From: Thomas Gleixner @ 2008-10-01 10:01 UTC (permalink / raw)
  To: LKML
  Cc: Ingo Molnar, Ulrich Drepper, Roland McGrath, Oleg Nesterov,
	Michael Kerrisk

[-- Attachment #1: x86-hookup-rt-tgsigqueueinfo.patch --]
[-- Type: text/plain, Size: 1964 bytes --]

Make the new sys_rt_tgsigqueueinfo available for x86.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/ia32/ia32entry.S          |    1 +
 arch/x86/kernel/syscall_table_32.S |    1 +
 include/asm-x86/unistd_32.h        |    1 +
 include/asm-x86/unistd_64.h        |    2 ++
 4 files changed, 5 insertions(+)

Index: linux-2.6-tip/arch/x86/ia32/ia32entry.S
===================================================================
--- linux-2.6-tip.orig/arch/x86/ia32/ia32entry.S
+++ linux-2.6-tip/arch/x86/ia32/ia32entry.S
@@ -832,4 +832,5 @@ ia32_sys_call_table:
 	.quad sys_dup3			/* 330 */
 	.quad sys_pipe2
 	.quad sys_inotify_init1
+	.quad compat_sys_rt_tgsigqueueinfo
 ia32_syscall_end:
Index: linux-2.6-tip/arch/x86/kernel/syscall_table_32.S
===================================================================
--- linux-2.6-tip.orig/arch/x86/kernel/syscall_table_32.S
+++ linux-2.6-tip/arch/x86/kernel/syscall_table_32.S
@@ -332,3 +332,4 @@ ENTRY(sys_call_table)
 	.long sys_dup3			/* 330 */
 	.long sys_pipe2
 	.long sys_inotify_init1
+	.long sys_rt_tgsigqueueinfo
Index: linux-2.6-tip/include/asm-x86/unistd_32.h
===================================================================
--- linux-2.6-tip.orig/include/asm-x86/unistd_32.h
+++ linux-2.6-tip/include/asm-x86/unistd_32.h
@@ -338,6 +338,7 @@
 #define __NR_dup3		330
 #define __NR_pipe2		331
 #define __NR_inotify_init1	332
+#define __NR_rt_tgsigqueueinfo	333
 
 #ifdef __KERNEL__
 
Index: linux-2.6-tip/include/asm-x86/unistd_64.h
===================================================================
--- linux-2.6-tip.orig/include/asm-x86/unistd_64.h
+++ linux-2.6-tip/include/asm-x86/unistd_64.h
@@ -653,6 +653,8 @@ __SYSCALL(__NR_dup3, sys_dup3)
 __SYSCALL(__NR_pipe2, sys_pipe2)
 #define __NR_inotify_init1			294
 __SYSCALL(__NR_inotify_init1, sys_inotify_init1)
+#define __NR_rt_tgsigqueueinfo			295
+__SYSCALL(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo)
 
 
 #ifndef __NO_STUBS



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2008-10-08  2:50 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-09-30 19:48 [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall Thomas Gleixner
2008-09-30 19:48 ` [RFC patch 1/3] signals: split do_tkill Thomas Gleixner
2008-09-30 19:49 ` [RFC patch 2/3] signals: implement sys_rt_tgsigqueueinfo Thomas Gleixner
2008-09-30 19:49 ` [RFC patch 3/3] x86: hookup sys_rt_tgsigqueueinfo Thomas Gleixner
2008-10-01  6:39 ` [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall Roland McGrath
2008-10-01  7:51   ` Thomas Gleixner
2008-10-07 13:49 ` Michael Kerrisk
2008-10-07 20:21   ` Roland McGrath
2008-10-08  2:50     ` Michael Kerrisk
2008-10-01 10:01 [RFC patch 0/3] signals: add rt_tgsigqueueinfo syscall V2 Thomas Gleixner
2008-10-01 10:01 ` [RFC patch 3/3] x86: hookup sys_rt_tgsigqueueinfo Thomas Gleixner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).