Skip to content

Commit

Permalink
runtime: move epoll syscalls to runtime/internal/syscall
Browse files Browse the repository at this point in the history
This change moves Linux epoll's syscalls implementation to the
"runtime/internal/syscall" package. The intention in this CL was to
minimise behavioural changes but make the code more generalised. This
also will allow adding new syscalls (like epoll_pwait2) without the
need to implement assembly stubs for each arch.

It also drops epoll_create as not all architectures provide this call.
epoll_create1 was added to the kernel in version 2.6.27 and Go requires
Linux kernel version 2.6.32 or later since Go 1.18. So it is safe to
always use epoll_create1.

This is a resubmit as the previous CL 421994 was reverted due to test
failures after the merge with the master. The issue was fixed in
CL 438615

For #53824
For #51087

Change-Id: I1bd0f23a85b4f9b80178c5dd36fd3e95ff4f9648
Reviewed-on: https://go-review.googlesource.com/c/go/+/440115
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Michael Pratt <mpratt@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Run-TryBot: Michael Pratt <mpratt@google.com>
  • Loading branch information
dAdAbird authored and gopherbot committed Oct 7, 2022
1 parent 67cd77b commit c7cc2b9
Show file tree
Hide file tree
Showing 41 changed files with 411 additions and 813 deletions.
11 changes: 0 additions & 11 deletions src/runtime/defs2_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,17 +121,6 @@ const (

O_RDONLY = C.O_RDONLY
O_CLOEXEC = C.O_CLOEXEC

EPOLLIN = C.POLLIN
EPOLLOUT = C.POLLOUT
EPOLLERR = C.POLLERR
EPOLLHUP = C.POLLHUP
EPOLLRDHUP = C.POLLRDHUP
EPOLLET = C.EPOLLET
EPOLL_CLOEXEC = C.EPOLL_CLOEXEC
EPOLL_CTL_ADD = C.EPOLL_CTL_ADD
EPOLL_CTL_DEL = C.EPOLL_CTL_DEL
EPOLL_CTL_MOD = C.EPOLL_CTL_MOD
)

type Fpreg C.struct__fpreg
Expand Down
12 changes: 0 additions & 12 deletions src/runtime/defs_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,17 +115,6 @@ const (
CLOCK_THREAD_CPUTIME_ID = C.CLOCK_THREAD_CPUTIME_ID

SIGEV_THREAD_ID = C.SIGEV_THREAD_ID

EPOLLIN = C.POLLIN
EPOLLOUT = C.POLLOUT
EPOLLERR = C.POLLERR
EPOLLHUP = C.POLLHUP
EPOLLRDHUP = C.POLLRDHUP
EPOLLET = C.EPOLLET
EPOLL_CLOEXEC = C.EPOLL_CLOEXEC
EPOLL_CTL_ADD = C.EPOLL_CTL_ADD
EPOLL_CTL_DEL = C.EPOLL_CTL_DEL
EPOLL_CTL_MOD = C.EPOLL_CTL_MOD
)

type Sigset C.sigset_t
Expand All @@ -136,4 +125,3 @@ type Siginfo C.siginfo_t
type Itimerspec C.struct_itimerspec
type Itimerval C.struct_itimerval
type Sigevent C.struct_sigevent
type EpollEvent C.struct_epoll_event
16 changes: 0 additions & 16 deletions src/runtime/defs_linux_386.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,17 +93,6 @@ const (
_O_NONBLOCK = 0x800
_O_CLOEXEC = 0x80000

_EPOLLIN = 0x1
_EPOLLOUT = 0x4
_EPOLLERR = 0x8
_EPOLLHUP = 0x10
_EPOLLRDHUP = 0x2000
_EPOLLET = 0x80000000
_EPOLL_CLOEXEC = 0x80000
_EPOLL_CTL_ADD = 0x1
_EPOLL_CTL_DEL = 0x2
_EPOLL_CTL_MOD = 0x3

_AF_UNIX = 0x1
_SOCK_DGRAM = 0x2
)
Expand Down Expand Up @@ -254,11 +243,6 @@ type sigevent struct {
_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
}

type epollevent struct {
events uint32
data [8]byte // to match amd64
}

type sockaddr_un struct {
family uint16
path [108]byte
Expand Down
16 changes: 0 additions & 16 deletions src/runtime/defs_linux_amd64.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,17 +89,6 @@ const (

_SIGEV_THREAD_ID = 0x4

_EPOLLIN = 0x1
_EPOLLOUT = 0x4
_EPOLLERR = 0x8
_EPOLLHUP = 0x10
_EPOLLRDHUP = 0x2000
_EPOLLET = 0x80000000
_EPOLL_CLOEXEC = 0x80000
_EPOLL_CTL_ADD = 0x1
_EPOLL_CTL_DEL = 0x2
_EPOLL_CTL_MOD = 0x3

_AF_UNIX = 0x1
_SOCK_DGRAM = 0x2
)
Expand Down Expand Up @@ -171,11 +160,6 @@ type sigevent struct {
_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
}

type epollevent struct {
events uint32
data [8]byte // unaligned uintptr
}

// created by cgo -cdefs and then converted to Go
// cgo -cdefs defs_linux.go defs1_linux.go

Expand Down
17 changes: 0 additions & 17 deletions src/runtime/defs_linux_arm.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,6 @@ const (

_SIGEV_THREAD_ID = 0x4

_EPOLLIN = 0x1
_EPOLLOUT = 0x4
_EPOLLERR = 0x8
_EPOLLHUP = 0x10
_EPOLLRDHUP = 0x2000
_EPOLLET = 0x80000000
_EPOLL_CLOEXEC = 0x80000
_EPOLL_CTL_ADD = 0x1
_EPOLL_CTL_DEL = 0x2
_EPOLL_CTL_MOD = 0x3

_AF_UNIX = 0x1
_SOCK_DGRAM = 0x2
)
Expand Down Expand Up @@ -208,12 +197,6 @@ type sigactiont struct {
sa_mask uint64
}

type epollevent struct {
events uint32
_pad uint32
data [8]byte // to match amd64
}

type sockaddr_un struct {
family uint16
path [108]byte
Expand Down
17 changes: 0 additions & 17 deletions src/runtime/defs_linux_arm64.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,17 +89,6 @@ const (

_SIGEV_THREAD_ID = 0x4

_EPOLLIN = 0x1
_EPOLLOUT = 0x4
_EPOLLERR = 0x8
_EPOLLHUP = 0x10
_EPOLLRDHUP = 0x2000
_EPOLLET = 0x80000000
_EPOLL_CLOEXEC = 0x80000
_EPOLL_CTL_ADD = 0x1
_EPOLL_CTL_DEL = 0x2
_EPOLL_CTL_MOD = 0x3

_AF_UNIX = 0x1
_SOCK_DGRAM = 0x2
)
Expand Down Expand Up @@ -171,12 +160,6 @@ type sigevent struct {
_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
}

type epollevent struct {
events uint32
_pad uint32
data [8]byte // to match amd64
}

// Created by cgo -cdefs and then converted to Go by hand
// ../cmd/cgo/cgo -cdefs defs_linux.go defs1_linux.go defs2_linux.go

Expand Down
17 changes: 0 additions & 17 deletions src/runtime/defs_linux_loong64.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,17 +89,6 @@ const (
_CLOCK_THREAD_CPUTIME_ID = 0x3

_SIGEV_THREAD_ID = 0x4

_EPOLLIN = 0x1
_EPOLLOUT = 0x4
_EPOLLERR = 0x8
_EPOLLHUP = 0x10
_EPOLLRDHUP = 0x2000
_EPOLLET = 0x80000000
_EPOLL_CLOEXEC = 0x80000
_EPOLL_CTL_ADD = 0x1
_EPOLL_CTL_DEL = 0x2
_EPOLL_CTL_MOD = 0x3
)

type timespec struct {
Expand Down Expand Up @@ -146,12 +135,6 @@ type sigevent struct {
_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
}

type epollevent struct {
events uint32
pad_cgo_0 [4]byte
data [8]byte // unaligned uintptr
}

const (
_O_RDONLY = 0x0
_O_NONBLOCK = 0x800
Expand Down
17 changes: 0 additions & 17 deletions src/runtime/defs_linux_mips64x.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,17 +90,6 @@ const (
_CLOCK_THREAD_CPUTIME_ID = 0x3

_SIGEV_THREAD_ID = 0x4

_EPOLLIN = 0x1
_EPOLLOUT = 0x4
_EPOLLERR = 0x8
_EPOLLHUP = 0x10
_EPOLLRDHUP = 0x2000
_EPOLLET = 0x80000000
_EPOLL_CLOEXEC = 0x80000
_EPOLL_CTL_ADD = 0x1
_EPOLL_CTL_DEL = 0x2
_EPOLL_CTL_MOD = 0x3
)

//struct Sigset {
Expand Down Expand Up @@ -178,12 +167,6 @@ type sigevent struct {
_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
}

type epollevent struct {
events uint32
pad_cgo_0 [4]byte
data [8]byte // unaligned uintptr
}

const (
_O_RDONLY = 0x0
_O_NONBLOCK = 0x80
Expand Down
17 changes: 0 additions & 17 deletions src/runtime/defs_linux_mipsx.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,17 +90,6 @@ const (
_CLOCK_THREAD_CPUTIME_ID = 0x3

_SIGEV_THREAD_ID = 0x4

_EPOLLIN = 0x1
_EPOLLOUT = 0x4
_EPOLLERR = 0x8
_EPOLLHUP = 0x10
_EPOLLRDHUP = 0x2000
_EPOLLET = 0x80000000
_EPOLL_CLOEXEC = 0x80000
_EPOLL_CTL_ADD = 0x1
_EPOLL_CTL_DEL = 0x2
_EPOLL_CTL_MOD = 0x3
)

type timespec struct {
Expand Down Expand Up @@ -172,12 +161,6 @@ type sigevent struct {
_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
}

type epollevent struct {
events uint32
pad_cgo_0 [4]byte
data uint64
}

const (
_O_RDONLY = 0x0
_O_NONBLOCK = 0x80
Expand Down
17 changes: 0 additions & 17 deletions src/runtime/defs_linux_ppc64.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,6 @@ const (
_CLOCK_THREAD_CPUTIME_ID = 0x3

_SIGEV_THREAD_ID = 0x4

_EPOLLIN = 0x1
_EPOLLOUT = 0x4
_EPOLLERR = 0x8
_EPOLLHUP = 0x10
_EPOLLRDHUP = 0x2000
_EPOLLET = 0x80000000
_EPOLL_CLOEXEC = 0x80000
_EPOLL_CTL_ADD = 0x1
_EPOLL_CTL_DEL = 0x2
_EPOLL_CTL_MOD = 0x3
)

//struct Sigset {
Expand Down Expand Up @@ -172,12 +161,6 @@ type sigevent struct {
_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
}

type epollevent struct {
events uint32
pad_cgo_0 [4]byte
data [8]byte // unaligned uintptr
}

// created by cgo -cdefs and then converted to Go
// cgo -cdefs defs_linux.go defs3_linux.go

Expand Down
17 changes: 0 additions & 17 deletions src/runtime/defs_linux_ppc64le.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,6 @@ const (
_CLOCK_THREAD_CPUTIME_ID = 0x3

_SIGEV_THREAD_ID = 0x4

_EPOLLIN = 0x1
_EPOLLOUT = 0x4
_EPOLLERR = 0x8
_EPOLLHUP = 0x10
_EPOLLRDHUP = 0x2000
_EPOLLET = 0x80000000
_EPOLL_CLOEXEC = 0x80000
_EPOLL_CTL_ADD = 0x1
_EPOLL_CTL_DEL = 0x2
_EPOLL_CTL_MOD = 0x3
)

//struct Sigset {
Expand Down Expand Up @@ -172,12 +161,6 @@ type sigevent struct {
_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
}

type epollevent struct {
events uint32
pad_cgo_0 [4]byte
data [8]byte // unaligned uintptr
}

// created by cgo -cdefs and then converted to Go
// cgo -cdefs defs_linux.go defs3_linux.go

Expand Down
17 changes: 0 additions & 17 deletions src/runtime/defs_linux_riscv64.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,17 +89,6 @@ const (
_CLOCK_THREAD_CPUTIME_ID = 0x3

_SIGEV_THREAD_ID = 0x4

_EPOLLIN = 0x1
_EPOLLOUT = 0x4
_EPOLLERR = 0x8
_EPOLLHUP = 0x10
_EPOLLRDHUP = 0x2000
_EPOLLET = 0x80000000
_EPOLL_CLOEXEC = 0x80000
_EPOLL_CTL_ADD = 0x1
_EPOLL_CTL_DEL = 0x2
_EPOLL_CTL_MOD = 0x3
)

type timespec struct {
Expand Down Expand Up @@ -171,12 +160,6 @@ type sigevent struct {
_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
}

type epollevent struct {
events uint32
pad_cgo_0 [4]byte
data [8]byte // unaligned uintptr
}

const (
_O_RDONLY = 0x0
_O_NONBLOCK = 0x800
Expand Down
17 changes: 0 additions & 17 deletions src/runtime/defs_linux_s390x.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,6 @@ const (
_CLOCK_THREAD_CPUTIME_ID = 0x3

_SIGEV_THREAD_ID = 0x4

_EPOLLIN = 0x1
_EPOLLOUT = 0x4
_EPOLLERR = 0x8
_EPOLLHUP = 0x10
_EPOLLRDHUP = 0x2000
_EPOLLET = 0x80000000
_EPOLL_CLOEXEC = 0x80000
_EPOLL_CTL_ADD = 0x1
_EPOLL_CTL_DEL = 0x2
_EPOLL_CTL_MOD = 0x3
)

type timespec struct {
Expand Down Expand Up @@ -168,12 +157,6 @@ type sigevent struct {
_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
}

type epollevent struct {
events uint32
pad_cgo_0 [4]byte
data [8]byte // unaligned uintptr
}

const (
_O_RDONLY = 0x0
_O_NONBLOCK = 0x800
Expand Down
Loading

0 comments on commit c7cc2b9

Please sign in to comment.