summaryrefslogtreecommitdiffhomepage
path: root/net/uring/io_uring_linux.go
diff options
context:
space:
mode:
authorkadmin <julianknodt@gmail.com>2021-07-07 18:15:52 +0000
committerkadmin <julianknodt@gmail.com>2021-07-08 20:15:38 +0000
commit1f9021e2873e0b4950be4f2c90df4f268e97ff6b (patch)
tree731894149ee2a6062e8a2549e5f6ca0030e49421 /net/uring/io_uring_linux.go
parent9fd01334cfb0e4a881767cf3c1ddad584b1a3b79 (diff)
downloadtailscale-jknodt/io-uring.tar.xz
tailscale-jknodt/io-uring.zip
add capability checkjknodt/io-uring
Diffstat (limited to 'net/uring/io_uring_linux.go')
-rw-r--r--net/uring/io_uring_linux.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/net/uring/io_uring_linux.go b/net/uring/io_uring_linux.go
index 1e72ad6c4..2c34f4a00 100644
--- a/net/uring/io_uring_linux.go
+++ b/net/uring/io_uring_linux.go
@@ -71,6 +71,24 @@ type UDPConn struct {
reads int32
}
+var (
+ mu sync.Mutex
+ // checks capabilities available on this system
+ capabilities map[IORingOp]bool
+)
+
+func checkCapability(op IORingOp) bool {
+ mu.Lock()
+ defer mu.Unlock()
+ if v, ok := capabilities[op]; ok {
+ return v
+ }
+
+ has_op := C.has_capability(C.int(op)) == 1
+ capabilities[op] = has_op
+ return has_op
+}
+
func NewUDPConn(pconn net.PacketConn) (*UDPConn, error) {
if !*useIOURing {
return nil, DisabledError