summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authornjoly <njoly@NetBSD.org>2009-06-08 13:34:23 +0000
committernjoly <njoly@NetBSD.org>2009-06-08 13:34:23 +0000
commit9c8407cd8f6f74cd8b2e8312d2cbbf8b0e38cbec (patch)
treef14b069551dd5917af0eec4839fb0fa212d9b036 /sys
parentd5203d274e1085b808f0de0ca63e23b53b6e3df0 (diff)
Add rt_queueinfo(2) support.
Diffstat (limited to 'sys')
-rw-r--r--sys/compat/linux32/arch/amd64/syscalls.master5
-rw-r--r--sys/compat/linux32/common/linux32_signal.c26
2 files changed, 27 insertions, 4 deletions
diff --git a/sys/compat/linux32/arch/amd64/syscalls.master b/sys/compat/linux32/arch/amd64/syscalls.master
index e0efbcaa8a9..0828c34a2b7 100644
--- a/sys/compat/linux32/arch/amd64/syscalls.master
+++ b/sys/compat/linux32/arch/amd64/syscalls.master
@@ -1,4 +1,4 @@
- $NetBSD: syscalls.master,v 1.53 2009/06/05 16:45:33 njoly Exp $
+ $NetBSD: syscalls.master,v 1.54 2009/06/08 13:34:23 njoly Exp $
; NetBSD i386 COMPAT_LINUX32 system call name/number "master" file.
; (See syscalls.conf to see what it is processed into.)
@@ -310,7 +310,8 @@
176 STD { int|linux32_sys||rt_sigpending(linux32_sigsetp_t set, \
netbsd32_size_t sigsetsize); }
177 UNIMPL rt_sigtimedwait
-178 UNIMPL rt_queueinfo
+178 STD { int|linux32_sys||rt_queueinfo(int pid, int sig, \
+ linux32_siginfop_t uinfo); }
179 STD { int|linux32_sys||rt_sigsuspend(linux32_sigsetp_t unewset, \
netbsd32_size_t sigsetsize); }
180 STD { netbsd32_ssize_t|linux32_sys||pread(int fd, \
diff --git a/sys/compat/linux32/common/linux32_signal.c b/sys/compat/linux32/common/linux32_signal.c
index efc141cef75..24569d2665f 100644
--- a/sys/compat/linux32/common/linux32_signal.c
+++ b/sys/compat/linux32/common/linux32_signal.c
@@ -1,4 +1,4 @@
-/* $NetBSD: linux32_signal.c,v 1.12 2009/06/02 16:54:39 njoly Exp $ */
+/* $NetBSD: linux32_signal.c,v 1.13 2009/06/08 13:34:23 njoly Exp $ */
/*-
* Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux32_signal.c,v 1.12 2009/06/02 16:54:39 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_signal.c,v 1.13 2009/06/08 13:34:23 njoly Exp $");
#include <sys/param.h>
#include <sys/ucred.h>
@@ -448,3 +448,25 @@ linux32_sys_sigsetmask(struct lwp *l, const struct linux32_sys_sigsetmask_args *
*retval = olss;
return 0;
}
+
+int
+linux32_sys_rt_queueinfo(struct lwp *l, const struct linux32_sys_rt_queueinfo_args *uap, register_t *retval)
+{
+ /*
+ syscallarg(int) pid;
+ syscallarg(int) sig;
+ syscallarg(linux32_siginfop_t) uinfo;
+ */
+ int error;
+ linux32_siginfo_t info;
+
+ error = copyin(SCARG_P32(uap, uinfo), &info, sizeof(info));
+ if (error)
+ return error;
+ if (info.lsi_code >= 0)
+ return EPERM;
+
+ /* XXX To really implement this we need to */
+ /* XXX keep a list of queued signals somewhere. */
+ return linux32_sys_kill(l, (const void *)uap, retval);
+}