Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F107169167
D1094.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D1094.diff
View Options
Index: sys/amd64/linux/linux_dummy.c
===================================================================
--- sys/amd64/linux/linux_dummy.c
+++ sys/amd64/linux/linux_dummy.c
@@ -103,12 +103,10 @@
DUMMY(epoll_pwait);
DUMMY(signalfd);
DUMMY(timerfd);
-DUMMY(eventfd);
DUMMY(fallocate);
DUMMY(timerfd_settime);
DUMMY(timerfd_gettime);
DUMMY(signalfd4);
-DUMMY(eventfd2);
DUMMY(inotify_init1);
DUMMY(preadv);
DUMMY(pwritev);
Index: sys/amd64/linux/syscalls.master
===================================================================
--- sys/amd64/linux/syscalls.master
+++ sys/amd64/linux/syscalls.master
@@ -472,14 +472,14 @@
l_int maxevents, l_int timeout, l_sigset_t *mask); }
282 AUE_NULL STD { int linux_signalfd(void); }
283 AUE_NULL STD { int linux_timerfd(void); }
-284 AUE_NULL STD { int linux_eventfd(void); }
+284 AUE_NULL STD { int linux_eventfd(l_uint initval); }
285 AUE_NULL STD { int linux_fallocate(void); }
286 AUE_NULL STD { int linux_timerfd_settime(void); }
287 AUE_NULL STD { int linux_timerfd_gettime(void); }
288 AUE_ACCEPT STD { int linux_accept4(l_int s, l_uintptr_t addr, \
l_uintptr_t namelen, int flags); }
289 AUE_NULL STD { int linux_signalfd4(void); }
-290 AUE_NULL STD { int linux_eventfd2(void); }
+290 AUE_NULL STD { int linux_eventfd2(l_uint initval, l_int flags); }
291 AUE_NULL STD { int linux_epoll_create1(l_int flags); }
292 AUE_NULL STD { int linux_dup3(l_int oldfd, \
l_int newfd, l_int flags); }
Index: sys/amd64/linux32/linux32_dummy.c
===================================================================
--- sys/amd64/linux32/linux32_dummy.c
+++ sys/amd64/linux32/linux32_dummy.c
@@ -108,7 +108,6 @@
DUMMY(utimensat);
DUMMY(signalfd);
DUMMY(timerfd_create);
-DUMMY(eventfd);
/* linux 2.6.23: */
DUMMY(fallocate);
/* linux 2.6.25: */
@@ -116,7 +115,6 @@
DUMMY(timerfd_gettime);
/* linux 2.6.27: */
DUMMY(signalfd4);
-DUMMY(eventfd2);
DUMMY(inotify_init1);
/* linux 2.6.30: */
DUMMY(preadv);
Index: sys/amd64/linux32/syscalls.master
===================================================================
--- sys/amd64/linux32/syscalls.master
+++ sys/amd64/linux32/syscalls.master
@@ -535,7 +535,7 @@
320 AUE_NULL STD { int linux_utimensat(void); }
321 AUE_NULL STD { int linux_signalfd(void); }
322 AUE_NULL STD { int linux_timerfd_create(void); }
-323 AUE_NULL STD { int linux_eventfd(void); }
+323 AUE_NULL STD { int linux_eventfd(l_uint initval); }
; linux 2.6.23:
324 AUE_NULL STD { int linux_fallocate(void); }
; linux 2.6.25:
@@ -543,7 +543,7 @@
326 AUE_NULL STD { int linux_timerfd_gettime(void); }
; linux 2.6.27:
327 AUE_NULL STD { int linux_signalfd4(void); }
-328 AUE_NULL STD { int linux_eventfd2(void); }
+328 AUE_NULL STD { int linux_eventfd2(l_uint initval, l_int flags); }
329 AUE_NULL STD { int linux_epoll_create1(l_int flags); }
330 AUE_NULL STD { int linux_dup3(l_int oldfd, \
l_int newfd, l_int flags); }
Index: sys/compat/linux/linux_event.h
===================================================================
--- sys/compat/linux/linux_event.h
+++ sys/compat/linux/linux_event.h
@@ -55,4 +55,8 @@
#define LINUX_EPOLL_CTL_DEL 2
#define LINUX_EPOLL_CTL_MOD 3
+#define LINUX_EFD_SEMAPHORE (1 << 0)
+#define LINUX_EFD_FLAGS (LINUX_EFD_SEMAPHORE|LINUX_O_CLOEXEC \
+ |LINUX_O_NONBLOCK)
+
#endif /* !_LINUX_EVENT_H_ */
Index: sys/compat/linux/linux_event.c
===================================================================
--- sys/compat/linux/linux_event.c
+++ sys/compat/linux/linux_event.c
@@ -43,9 +43,13 @@
#include <sys/filedesc.h>
#include <sys/errno.h>
#include <sys/event.h>
+#include <sys/eventfd.h>
+#include <sys/poll.h>
#include <sys/proc.h>
+#include <sys/selinfo.h>
#include <sys/sx.h>
#include <sys/syscallsubr.h>
+#include <sys/sysproto.h>
#include <sys/timespec.h>
#ifdef COMPAT_LINUX32
@@ -57,8 +61,8 @@
#endif
#include <compat/linux/linux_emul.h>
-#include <compat/linux/linux_event.h>
#include <compat/linux/linux_file.h>
+#include <compat/linux/linux_event.h>
#include <compat/linux/linux_util.h>
/*
@@ -498,3 +502,33 @@
/* report any errors we got */
return (error1 == 0 ? error2 : error1);
}
+
+int
+linux_eventfd(struct thread *td, struct linux_eventfd_args *args)
+{
+ struct eventfd_args bsd_args;
+
+ bsd_args.initval = args->initval;
+ bsd_args.flags = 0;
+ return (sys_eventfd(td, &bsd_args));
+}
+
+int
+linux_eventfd2(struct thread *td, struct linux_eventfd2_args *args)
+{
+ struct eventfd_args bsd_args;
+
+ if ((args->flags & ~(LINUX_EFD_FLAGS)) != 0)
+ return (EINVAL);
+
+ bsd_args.flags = 0;
+ if (args->flags & LINUX_O_CLOEXEC)
+ bsd_args.flags |= EFD_CLOEXEC;
+ if (args->flags & LINUX_O_NONBLOCK)
+ bsd_args.flags |= EFD_NONBLOCK;
+ if (args->flags & LINUX_EFD_SEMAPHORE)
+ bsd_args.flags |= EFD_SEMAPHORE;
+ bsd_args.initval = args->initval;
+
+ return (sys_eventfd(td, &bsd_args));
+}
Index: sys/i386/linux/linux_dummy.c
===================================================================
--- sys/i386/linux/linux_dummy.c
+++ sys/i386/linux/linux_dummy.c
@@ -104,7 +104,6 @@
DUMMY(utimensat);
DUMMY(signalfd);
DUMMY(timerfd_create);
-DUMMY(eventfd);
/* linux 2.6.23: */
DUMMY(fallocate);
/* linux 2.6.25: */
@@ -112,7 +111,6 @@
DUMMY(timerfd_gettime);
/* linux 2.6.27: */
DUMMY(signalfd4);
-DUMMY(eventfd2);
DUMMY(inotify_init1);
/* linux 2.6.30: */
DUMMY(preadv);
Index: sys/i386/linux/syscalls.master
===================================================================
--- sys/i386/linux/syscalls.master
+++ sys/i386/linux/syscalls.master
@@ -543,7 +543,7 @@
320 AUE_NULL STD { int linux_utimensat(void); }
321 AUE_NULL STD { int linux_signalfd(void); }
322 AUE_NULL STD { int linux_timerfd_create(void); }
-323 AUE_NULL STD { int linux_eventfd(void); }
+323 AUE_NULL STD { int linux_eventfd(l_uint initval); }
; linux 2.6.23:
324 AUE_NULL STD { int linux_fallocate(void); }
; linux 2.6.25:
@@ -551,7 +551,7 @@
326 AUE_NULL STD { int linux_timerfd_gettime(void); }
; linux 2.6.27:
327 AUE_NULL STD { int linux_signalfd4(void); }
-328 AUE_NULL STD { int linux_eventfd2(void); }
+328 AUE_NULL STD { int linux_eventfd2(l_uint initval, l_int flags); }
329 AUE_NULL STD { int linux_epoll_create1(l_int flags); }
330 AUE_NULL STD { int linux_dup3(l_int oldfd, \
l_int newfd, l_int flags); }
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Jan 12, 4:34 AM (21 h, 36 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15761180
Default Alt Text
D1094.diff (6 KB)
Attached To
Mode
D1094: Implement eventfd system call.
Attached
Detach File
Event Timeline
Log In to Comment