Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/compat/linux emulate ppoll which is essentially our pollts
details: https://anonhg.NetBSD.org/src/rev/b98e47627c7d
branches: trunk
changeset: 781641:b98e47627c7d
user: pooka <pooka%NetBSD.org@localhost>
date: Wed Sep 19 21:19:14 2012 +0000
description:
emulate ppoll which is essentially our pollts
diffstat:
sys/compat/linux/arch/alpha/syscalls.master | 6 ++-
sys/compat/linux/arch/amd64/syscalls.master | 6 ++-
sys/compat/linux/arch/arm/syscalls.master | 6 ++-
sys/compat/linux/arch/i386/syscalls.master | 6 ++-
sys/compat/linux/arch/m68k/syscalls.master | 6 ++-
sys/compat/linux/arch/mips/syscalls.master | 6 ++-
sys/compat/linux/arch/powerpc/syscalls.master | 6 ++-
sys/compat/linux/common/linux_misc.c | 42 +++++++++++++++++++++++++-
8 files changed, 68 insertions(+), 16 deletions(-)
diffs (217 lines):
diff -r e26e25fe6bb5 -r b98e47627c7d sys/compat/linux/arch/alpha/syscalls.master
--- a/sys/compat/linux/arch/alpha/syscalls.master Wed Sep 19 20:34:57 2012 +0000
+++ b/sys/compat/linux/arch/alpha/syscalls.master Wed Sep 19 21:19:14 2012 +0000
@@ -1,4 +1,4 @@
- $NetBSD: syscalls.master,v 1.76 2011/11/18 04:03:50 christos Exp $
+ $NetBSD: syscalls.master,v 1.77 2012/09/19 21:19:14 pooka Exp $
;
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
@@ -712,7 +712,9 @@
461 UNIMPL fchmodat
462 UNIMPL faccessat
463 UNIMPL pselect6
-464 UNIMPL ppoll
+464 STD { int|linux_sys||ppoll(struct pollfd *fds, int nfds, \
+ struct linux_timespec *timeout, \
+ linux_sigset_t *sigset); }
465 UNIMPL unshare
466 STD { int|linux_sys||set_robust_list( \
struct linux_robust_list_head *head, size_t len); }
diff -r e26e25fe6bb5 -r b98e47627c7d sys/compat/linux/arch/amd64/syscalls.master
--- a/sys/compat/linux/arch/amd64/syscalls.master Wed Sep 19 20:34:57 2012 +0000
+++ b/sys/compat/linux/arch/amd64/syscalls.master Wed Sep 19 21:19:14 2012 +0000
@@ -1,4 +1,4 @@
- $NetBSD: syscalls.master,v 1.40 2011/11/18 04:03:50 christos Exp $
+ $NetBSD: syscalls.master,v 1.41 2012/09/19 21:19:14 pooka Exp $
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
@@ -476,7 +476,9 @@
268 UNIMPL fchmodat
269 UNIMPL faccessat
270 UNIMPL pselect6
-271 UNIMPL ppoll
+271 STD { int|linux_sys||ppoll(struct pollfd *fds, int nfds, \
+ struct linux_timespec *timeout, \
+ linux_sigset_t *sigset); }
272 UNIMPL unshare
273 STD { int|linux_sys||set_robust_list( \
struct linux_robust_list_head *head, size_t len); }
diff -r e26e25fe6bb5 -r b98e47627c7d sys/compat/linux/arch/arm/syscalls.master
--- a/sys/compat/linux/arch/arm/syscalls.master Wed Sep 19 20:34:57 2012 +0000
+++ b/sys/compat/linux/arch/arm/syscalls.master Wed Sep 19 21:19:14 2012 +0000
@@ -1,4 +1,4 @@
- $NetBSD: syscalls.master,v 1.48 2011/11/18 04:03:50 christos Exp $
+ $NetBSD: syscalls.master,v 1.49 2012/09/19 21:19:14 pooka Exp $
; Derived from sys/compat/linux/arch/*/syscalls.master
; and from Linux 2.4.12 arch/arm/kernel/calls.S
@@ -517,7 +517,9 @@
333 UNIMPL fchmodat
334 UNIMPL faccessat
335 UNIMPL pselect6
-336 UNIMPL ppoll
+336 STD { int|linux_sys||ppoll(struct pollfd *fds, int nfds, \
+ struct linux_timespec *timeout, \
+ linux_sigset_t *sigset); }
337 UNIMPL unshare
338 STD { int|linux_sys||set_robust_list( \
struct linux_robust_list_head *head, size_t len); }
diff -r e26e25fe6bb5 -r b98e47627c7d sys/compat/linux/arch/i386/syscalls.master
--- a/sys/compat/linux/arch/i386/syscalls.master Wed Sep 19 20:34:57 2012 +0000
+++ b/sys/compat/linux/arch/i386/syscalls.master Wed Sep 19 21:19:14 2012 +0000
@@ -1,4 +1,4 @@
- $NetBSD: syscalls.master,v 1.107 2011/11/18 04:03:50 christos Exp $
+ $NetBSD: syscalls.master,v 1.108 2012/09/19 21:19:14 pooka Exp $
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
@@ -490,7 +490,9 @@
306 UNIMPL fchmodat
307 UNIMPL faccessat
308 UNIMPL pselect6
-309 UNIMPL ppoll
+309 STD { int|linux_sys||ppoll(struct pollfd *fds, int nfds, \
+ struct linux_timespec *timeout, \
+ linux_sigset_t *sigset); }
310 UNIMPL unshare
311 STD { int|linux_sys||set_robust_list( \
struct linux_robust_list_head *head, size_t len); }
diff -r e26e25fe6bb5 -r b98e47627c7d sys/compat/linux/arch/m68k/syscalls.master
--- a/sys/compat/linux/arch/m68k/syscalls.master Wed Sep 19 20:34:57 2012 +0000
+++ b/sys/compat/linux/arch/m68k/syscalls.master Wed Sep 19 21:19:14 2012 +0000
@@ -1,4 +1,4 @@
- $NetBSD: syscalls.master,v 1.73 2011/11/18 04:03:50 christos Exp $
+ $NetBSD: syscalls.master,v 1.74 2012/09/19 21:19:14 pooka Exp $
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
@@ -498,7 +498,9 @@
299 UNIMPL fchmodat
300 UNIMPL faccessat
301 UNIMPL pselect6
-302 UNIMPL ppoll
+302 STD { int|linux_sys||ppoll(struct pollfd *fds, int nfds, \
+ struct linux_timespec *timeout, \
+ linux_sigset_t *sigset); }
303 UNIMPL unshare
304 STD { int|linux_sys||set_robust_list( \
struct linux_robust_list_head *head, size_t len); }
diff -r e26e25fe6bb5 -r b98e47627c7d sys/compat/linux/arch/mips/syscalls.master
--- a/sys/compat/linux/arch/mips/syscalls.master Wed Sep 19 20:34:57 2012 +0000
+++ b/sys/compat/linux/arch/mips/syscalls.master Wed Sep 19 21:19:14 2012 +0000
@@ -1,4 +1,4 @@
- $NetBSD: syscalls.master,v 1.43 2011/11/18 04:03:51 christos Exp $
+ $NetBSD: syscalls.master,v 1.44 2012/09/19 21:19:15 pooka Exp $
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
@@ -487,7 +487,9 @@
299 UNIMPL fchmodat
300 UNIMPL faccessat
301 UNIMPL pselect6
-302 UNIMPL ppoll
+302 STD { int|linux_sys||ppoll(struct pollfd *fds, int nfds, \
+ struct linux_timespec *timeout, \
+ linux_sigset_t *sigset); }
303 UNIMPL unshare
304 UNIMPL splice
305 UNIMPL sync_file_range
diff -r e26e25fe6bb5 -r b98e47627c7d sys/compat/linux/arch/powerpc/syscalls.master
--- a/sys/compat/linux/arch/powerpc/syscalls.master Wed Sep 19 20:34:57 2012 +0000
+++ b/sys/compat/linux/arch/powerpc/syscalls.master Wed Sep 19 21:19:14 2012 +0000
@@ -1,4 +1,4 @@
- $NetBSD: syscalls.master,v 1.50 2011/11/18 04:03:51 christos Exp $
+ $NetBSD: syscalls.master,v 1.51 2012/09/19 21:19:15 pooka Exp $
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
@@ -476,7 +476,9 @@
278 UNIMPL spu_run
279 UNIMPL spu_create
280 UNIMPL pselect6
-281 UNIMPL ppoll
+281 STD { int|linux_sys||ppoll(struct pollfd *fds, int nfds, \
+ struct linux_timespec *timeout, \
+ linux_sigset_t *sigset); }
282 UNIMPL unshare
283 UNIMPL splice
284 UNIMPL tee
diff -r e26e25fe6bb5 -r b98e47627c7d sys/compat/linux/common/linux_misc.c
--- a/sys/compat/linux/common/linux_misc.c Wed Sep 19 20:34:57 2012 +0000
+++ b/sys/compat/linux/common/linux_misc.c Wed Sep 19 21:19:14 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_misc.c,v 1.219 2011/10/14 09:23:28 hannken Exp $ */
+/* $NetBSD: linux_misc.c,v 1.220 2012/09/19 21:19:15 pooka Exp $ */
/*-
* Copyright (c) 1995, 1998, 1999, 2008 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.219 2011/10/14 09:23:28 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.220 2012/09/19 21:19:15 pooka Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -73,6 +73,7 @@
#include <sys/mbuf.h>
#include <sys/mman.h>
#include <sys/mount.h>
+#include <sys/poll.h>
#include <sys/prot.h>
#include <sys/reboot.h>
#include <sys/resource.h>
@@ -119,6 +120,7 @@
#include <compat/linux/common/linux_ptrace.h>
#include <compat/linux/common/linux_reboot.h>
#include <compat/linux/common/linux_emuldata.h>
+#include <compat/linux/common/linux_sched.h>
#include <compat/linux/linux_syscallargs.h>
@@ -920,6 +922,42 @@
return 0;
}
+int
+linux_sys_ppoll(struct lwp *l,
+ const struct linux_sys_ppoll_args *uap, register_t *retval)
+{
+ /* {
+ syscallarg(struct pollfd *) fds;
+ syscallarg(int) nfds;
+ syscallarg(struct linux_timespec *) timeout;
+ syscallarg(linux_sigset_t *) sigset;
+ } */
+ struct linux_timespec lts0, *lts;
+ struct timespec ts0, *ts = NULL;
+ linux_sigset_t lsigmask0, *lsigmask;
+ sigset_t sigmask0, *sigmask = NULL;
+ int error;
+
+ lts = SCARG(uap, timeout);
+ if (lts) {
+ if ((error = copyin(lts, <s0, sizeof(lts0))) != 0)
+ return error;
+ linux_to_native_timespec(&ts0, <s0);
+ ts = &ts0;
+ }
+
+ lsigmask = SCARG(uap, sigset);
+ if (lsigmask) {
+ if ((error = copyin(lsigmask, &lsigmask0, sizeof(lsigmask0))))
+ return error;
+ linux_to_native_sigset(&sigmask0, &lsigmask0);
+ sigmask = &sigmask0;
+ }
+
+ return pollcommon(retval, SCARG(uap, fds), SCARG(uap, nfds),
+ ts, sigmask);
+}
+
/*
* Set the 'personality' (emulation mode) for the current process. Only
* accept the Linux personality here (0). This call is needed because
Home |
Main Index |
Thread Index |
Old Index