]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: implement EpollCreate using EpollCreate1 on all linux platforms
authorTobias Klauser <tklauser@distanz.ch>
Tue, 9 Aug 2022 08:20:22 +0000 (10:20 +0200)
committerGopher Robot <gobot@golang.org>
Thu, 18 Aug 2022 16:08:26 +0000 (16:08 +0000)
Most newer architectures (e.g. arm64, riscv64, loong64) don't provide the
epoll_create syscall. Some systems (e.g. Android) block it even if it
were available. In the kernel, the epoll_create syscall is implemented
[1] the same way EpollCreate is implemented in this package for
platforms without the epoll_create syscall. The epoll_create1 syscall is
available since Linux kernel 2.6.27 and the minimum required kernel
version is 2.6.32 since Go 1.18 (see #45964). Thus, avoid the separate
wrapper and consistently implement EpollCreate using EpollCreate1.

[1] https://elixir.bootlin.com/linux/v5.15-rc1/source/fs/eventpoll.c#L2006

The same change was already done in CL 349809 for golang.org/x/sys/unix.

For #45964

Change-Id: I5463b208aa7ae236fa2c175d6d3ec6568f1840b0
Reviewed-on: https://go-review.googlesource.com/c/go/+/411594
Reviewed-by: Bryan Mills <bcmills@google.com>
Auto-Submit: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>

21 files changed:
src/syscall/syscall_linux.go
src/syscall/syscall_linux_386.go
src/syscall/syscall_linux_amd64.go
src/syscall/syscall_linux_arm.go
src/syscall/syscall_linux_arm64.go
src/syscall/syscall_linux_loong64.go
src/syscall/syscall_linux_mips64x.go
src/syscall/syscall_linux_mipsx.go
src/syscall/syscall_linux_ppc64x.go
src/syscall/syscall_linux_riscv64.go
src/syscall/syscall_linux_s390x.go
src/syscall/zsyscall_linux_386.go
src/syscall/zsyscall_linux_amd64.go
src/syscall/zsyscall_linux_arm.go
src/syscall/zsyscall_linux_mips.go
src/syscall/zsyscall_linux_mips64.go
src/syscall/zsyscall_linux_mips64le.go
src/syscall/zsyscall_linux_mipsle.go
src/syscall/zsyscall_linux_ppc64.go
src/syscall/zsyscall_linux_ppc64le.go
src/syscall/zsyscall_linux_s390x.go

index e1837b91a7b73c2c92993a84e06cf27df3fd49e8..55a49cc3eb57e214e7c59793050a6582989ee700 100644 (file)
@@ -115,6 +115,13 @@ func Creat(path string, mode uint32) (fd int, err error) {
        return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)
 }
 
+func EpollCreate(size int) (fd int, err error) {
+       if size <= 0 {
+               return -1, EINVAL
+       }
+       return EpollCreate1(0)
+}
+
 func isGroupMember(gid int) bool {
        groups, err := Getgroups()
        if err != nil {
index fc7df8496eb4c5ca40d5fd503be21f6ef820bce6..a8c29335179aaf022489434449c4bcd395d4f20b 100644 (file)
@@ -19,7 +19,6 @@ func setTimeval(sec, usec int64) Timeval {
 // 64-bit file system and 32-bit uid calls
 // (386 default is 32-bit file system and 16-bit uid).
 //sys  Dup2(oldfd int, newfd int) (err error)
-//sysnb        EpollCreate(size int) (fd int, err error)
 //sys  Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
 //sys  Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
 //sys  fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
index 0bcc664d32a074eccde1958669f0432e4b7f34db..229cf1ccf54dd8eeed1f71c49d94b06e8214ea04 100644 (file)
@@ -7,7 +7,6 @@ package syscall
 const _SYS_setgroups = SYS_SETGROUPS
 
 //sys  Dup2(oldfd int, newfd int) (err error)
-//sysnb        EpollCreate(size int) (fd int, err error)
 //sys  Fchown(fd int, uid int, gid int) (err error)
 //sys  Fstat(fd int, stat *Stat_t) (err error)
 //sys  Fstatfs(fd int, buf *Statfs_t) (err error)
index 9db702729f8282db1e16bf50ced7c653395ffee8..f9f993bdfa83ddaf1314f930193a16bd7161201c 100644 (file)
@@ -46,7 +46,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
 // 64-bit file system and 32-bit uid calls
 // (16-bit uid calls are not always supported in newer kernels)
 //sys  Dup2(oldfd int, newfd int) (err error)
-//sysnb        EpollCreate(size int) (fd int, err error)
 //sys  Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
 //sys  Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
 //sys  fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
index 1ccbad1b759334f0504359225bef216042cbd6bd..6b482adcfd78c799ffb76f946aa5b971cdcb6b3a 100644 (file)
@@ -8,13 +8,6 @@ import "unsafe"
 
 const _SYS_setgroups = SYS_SETGROUPS
 
-func EpollCreate(size int) (fd int, err error) {
-       if size <= 0 {
-               return -1, EINVAL
-       }
-       return EpollCreate1(0)
-}
-
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
 //sys  Fchown(fd int, uid int, gid int) (err error)
 //sys  Fstat(fd int, stat *Stat_t) (err error)
index 99674b4a8ba6e43c93d0fe167a87886eba71dc40..531522089ea28247b2fe684abd1900cad88812ce 100644 (file)
@@ -8,13 +8,6 @@ import "unsafe"
 
 const _SYS_setgroups = SYS_SETGROUPS
 
-func EpollCreate(size int) (fd int, err error) {
-       if size <= 0 {
-               return -1, EINVAL
-       }
-       return EpollCreate1(0)
-}
-
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
 //sys  Fchown(fd int, uid int, gid int) (err error)
 //sys  Fstatfs(fd int, buf *Statfs_t) (err error)
index 258eb97b7ed28eae0da85aa3bf86be91a1c380ed..89b450b0508a57adcb6ac48b49d69ee7994af4ef 100644 (file)
@@ -9,7 +9,6 @@ package syscall
 const _SYS_setgroups = SYS_SETGROUPS
 
 //sys  Dup2(oldfd int, newfd int) (err error)
-//sysnb        EpollCreate(size int) (fd int, err error)
 //sys  Fchown(fd int, uid int, gid int) (err error)
 //sys  Fstatfs(fd int, buf *Statfs_t) (err error)
 //sys  fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT
index 5390277926f4d86cb3899bebee1e559d2d11bb37..53c3a26469a0c454d7a008aa60ea23688118c984 100644 (file)
@@ -13,7 +13,6 @@ const _SYS_setgroups = SYS_SETGROUPS
 func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
 
 //sys  Dup2(oldfd int, newfd int) (err error)
-//sysnb        EpollCreate(size int) (fd int, err error)
 //sys  Fchown(fd int, uid int, gid int) (err error)
 //sys  fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
 //sys  Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
index 88ad8e4cd4b40a365da0cc9d9f01716183102c56..5c20dfa8f64c08abb81ca9a8e769e9a18623e53d 100644 (file)
@@ -9,7 +9,6 @@ package syscall
 const _SYS_setgroups = SYS_SETGROUPS
 
 //sys  Dup2(oldfd int, newfd int) (err error)
-//sysnb        EpollCreate(size int) (fd int, err error)
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
 //sys  Fchown(fd int, uid int, gid int) (err error)
 //sys  Fstat(fd int, stat *Stat_t) (err error)
index 1386044609a7ab660383f0865df1ecbf2107055f..9a0de850a20ea77c1a8cbf1477d26883ba12e092 100644 (file)
@@ -8,13 +8,6 @@ import "unsafe"
 
 const _SYS_setgroups = SYS_SETGROUPS
 
-func EpollCreate(size int) (fd int, err error) {
-       if size <= 0 {
-               return -1, EINVAL
-       }
-       return EpollCreate1(0)
-}
-
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
 //sys  Fchown(fd int, uid int, gid int) (err error)
 //sys  Fstat(fd int, stat *Stat_t) (err error)
index 46b252dc95ceb90b402f9a4f98de7e1bfc8d1f58..8e31385c0f530d5e6d47ea76baf41e53990b735f 100644 (file)
@@ -9,7 +9,6 @@ import "unsafe"
 const _SYS_setgroups = SYS_SETGROUPS
 
 //sys  Dup2(oldfd int, newfd int) (err error)
-//sysnb        EpollCreate(size int) (fd int, err error)
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
 //sys  Fchown(fd int, uid int, gid int) (err error)
 //sys  Fstat(fd int, stat *Stat_t) (err error)
index 36a3d7ed391c484ffa504677930d38832f0fa5eb..51af3b0f8d3a60de2035fe02d17450ba6fd9db8b 100644 (file)
@@ -1067,17 +1067,6 @@ func Dup2(oldfd int, newfd int) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func EpollCreate(size int) (fd int, err error) {
-       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-       fd = int(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Fchown(fd int, uid int, gid int) (err error) {
        _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))
        if e1 != 0 {
index 07f328e1e2619ee2c6612cc65d86f7c93f4bc4cb..8b0f952ed047260b5eddaab22920b406bbbb6733 100644 (file)
@@ -1067,17 +1067,6 @@ func Dup2(oldfd int, newfd int) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func EpollCreate(size int) (fd int, err error) {
-       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-       fd = int(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Fchown(fd int, uid int, gid int) (err error) {
        _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
        if e1 != 0 {
index df79dbd0e1559475fc3cb3cbf81f58d47c20eb1a..577655d002034f65a38674c47df14b32468f4539 100644 (file)
@@ -1225,17 +1225,6 @@ func Dup2(oldfd int, newfd int) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func EpollCreate(size int) (fd int, err error) {
-       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-       fd = int(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Fchown(fd int, uid int, gid int) (err error) {
        _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))
        if e1 != 0 {
index 1ef8eebe4fdd00a5b37b3dcbb6ce4c11600efd66..3ffec82490401fba537b55a895bf0f9a5462f023 100644 (file)
@@ -1067,17 +1067,6 @@ func Dup2(oldfd int, newfd int) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func EpollCreate(size int) (fd int, err error) {
-       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-       fd = int(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Fchown(fd int, uid int, gid int) (err error) {
        _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
        if e1 != 0 {
index 1ed877ce7ea404e0955ec501e4a32ff9b4bcab45..bc3715016f3cc4513eea81576e5172ae8b62dbb4 100644 (file)
@@ -1067,17 +1067,6 @@ func Dup2(oldfd int, newfd int) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func EpollCreate(size int) (fd int, err error) {
-       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-       fd = int(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Fchown(fd int, uid int, gid int) (err error) {
        _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
        if e1 != 0 {
index 3d7cc9e3733cc116ff5afe18140dfeee8ac2cc10..de216cd614d82285edfec1755a2c83c23d505ac1 100644 (file)
@@ -1067,17 +1067,6 @@ func Dup2(oldfd int, newfd int) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func EpollCreate(size int) (fd int, err error) {
-       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-       fd = int(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Fchown(fd int, uid int, gid int) (err error) {
        _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
        if e1 != 0 {
index 59b49ddf747b70fb53b9dcadea20491af041d26c..b41a3b33709222c3db8aaee6030430af7ea4b352 100644 (file)
@@ -1067,17 +1067,6 @@ func Dup2(oldfd int, newfd int) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func EpollCreate(size int) (fd int, err error) {
-       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-       fd = int(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Fchown(fd int, uid int, gid int) (err error) {
        _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
        if e1 != 0 {
index 93632bd1cb4f9a0ee6712eff2f2d805927651168..7e9a3d7d8a9697cf542d3770fc67b9fac2f7d6f3 100644 (file)
@@ -1067,17 +1067,6 @@ func Dup2(oldfd int, newfd int) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func EpollCreate(size int) (fd int, err error) {
-       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-       fd = int(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
        var _p0 unsafe.Pointer
        if len(events) > 0 {
index fc8f6b7bcf97d0dfd5232517c8c4ed7910180e9b..12727cf1ea9d165feef4a1e9b997d03d4f0981b9 100644 (file)
@@ -1067,17 +1067,6 @@ func Dup2(oldfd int, newfd int) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func EpollCreate(size int) (fd int, err error) {
-       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-       fd = int(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
        var _p0 unsafe.Pointer
        if len(events) > 0 {
index 568bb430a6426f6f2f6856c864eb9dae8107efbe..65135e08976f59f0162f2433942c429b3f46f154 100644 (file)
@@ -1067,17 +1067,6 @@ func Dup2(oldfd int, newfd int) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func EpollCreate(size int) (fd int, err error) {
-       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
-       fd = int(r0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
        var _p0 unsafe.Pointer
        if len(events) > 0 {