From owner-dev-commits-src-main@freebsd.org Sun Dec 27 10:57:39 2020 Return-Path: Delivered-To: dev-commits-src-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9A6684B7185; Sun, 27 Dec 2020 10:57:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4D3d1b3yJ3z4SNt; Sun, 27 Dec 2020 10:57:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 79BDA25B32; Sun, 27 Dec 2020 10:57:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 0BRAvd4v013896; Sun, 27 Dec 2020 10:57:39 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 0BRAvdLB013895; Sun, 27 Dec 2020 10:57:39 GMT (envelope-from git) Date: Sun, 27 Dec 2020 10:57:39 GMT Message-Id: <202012271057.0BRAvdLB013895@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 44c5db52e258 - main - Add eventfd(3) wrappers to libc. MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 44c5db52e258aebed0c5d01047c79bc3d8487966 Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: "Commit messages for the main branch of the src repository." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Dec 2020 10:57:39 -0000 The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=44c5db52e258aebed0c5d01047c79bc3d8487966 commit 44c5db52e258aebed0c5d01047c79bc3d8487966 Author: Konstantin Belousov AuthorDate: 2020-12-23 14:16:35 +0000 Commit: Konstantin Belousov CommitDate: 2020-12-27 10:57:26 +0000 Add eventfd(3) wrappers to libc. eventfd_read/write one-liners are from musl libc. Submitted by: greg@unrelenting.technology Reviewed by: markj (previous version) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D26668 --- lib/libc/gen/Makefile.inc | 1 + lib/libc/gen/Symbol.map | 3 +++ lib/libc/gen/eventfd.c | 54 +++++++++++++++++++++++++++++++++++++++++ lib/libc/include/libc_private.h | 1 + lib/libc/sys/Makefile.inc | 3 +++ 5 files changed, 62 insertions(+) diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc index c0d719371fc8..76a21975f1ac 100644 --- a/lib/libc/gen/Makefile.inc +++ b/lib/libc/gen/Makefile.inc @@ -47,6 +47,7 @@ SRCS+= __getosreldate.c \ err.c \ errlst.c \ errno.c \ + eventfd.c \ exec.c \ exect.c \ fdevname.c \ diff --git a/lib/libc/gen/Symbol.map b/lib/libc/gen/Symbol.map index 2fb8e080de6a..c89eb63caada 100644 --- a/lib/libc/gen/Symbol.map +++ b/lib/libc/gen/Symbol.map @@ -422,6 +422,9 @@ FBSD_1.5 { }; FBSD_1.6 { + eventfd; + eventfd_read; + eventfd_write; getlogin_r; memalign; scandir_b; diff --git a/lib/libc/gen/eventfd.c b/lib/libc/gen/eventfd.c new file mode 100644 index 000000000000..b757f82029a9 --- /dev/null +++ b/lib/libc/gen/eventfd.c @@ -0,0 +1,54 @@ +/*- + * SPDX-License-Identifier: MIT + * + * Copyright (c) 2005-2020 Rich Felker, et al. + * Copyright (c) 2020 Greg V + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "namespace.h" +#include +#include +#include +#include "un-namespace.h" +#include "libc_private.h" + +int eventfd(unsigned int initval, int flags) +{ + struct specialfd_eventfd args; + + args.initval = initval; + args.flags = flags; + return (__sys___specialfd(SPECIALFD_EVENTFD, &args, sizeof(args))); +} + +int eventfd_read(int fd, eventfd_t *value) +{ + return (sizeof(*value) == _read(fd, value, sizeof(*value)) ? 0 : -1); +} + +int eventfd_write(int fd, eventfd_t value) +{ + return (sizeof(value) == _write(fd, &value, sizeof(value)) ? 0 : -1); +} diff --git a/lib/libc/include/libc_private.h b/lib/libc/include/libc_private.h index 21f5b1762eb4..d26c78c21c07 100644 --- a/lib/libc/include/libc_private.h +++ b/lib/libc/include/libc_private.h @@ -382,6 +382,7 @@ int __sys_sigtimedwait(const __sigset_t *, struct __siginfo *, const struct timespec *); int __sys_sigwait(const __sigset_t *, int *); int __sys_sigwaitinfo(const __sigset_t *, struct __siginfo *); +int __sys___specialfd(int, const void *, __size_t); int __sys_statfs(const char *, struct statfs *); int __sys_swapcontext(struct __ucontext *, const struct __ucontext *); diff --git a/lib/libc/sys/Makefile.inc b/lib/libc/sys/Makefile.inc index 38156ccf507d..d43a59719563 100644 --- a/lib/libc/sys/Makefile.inc +++ b/lib/libc/sys/Makefile.inc @@ -178,6 +178,7 @@ MAN+= abort2.2 \ cpuset_getaffinity.2 \ cpuset_getdomain.2 \ dup.2 \ + eventfd.2 \ execve.2 \ _exit.2 \ extattr_get_file.2 \ @@ -379,6 +380,8 @@ MLINKS+=cpuset.2 cpuset_getid.2 \ MLINKS+=cpuset_getaffinity.2 cpuset_setaffinity.2 MLINKS+=cpuset_getdomain.2 cpuset_setdomain.2 MLINKS+=dup.2 dup2.2 +MLINKS+=eventfd.2 eventfd_read.3 \ + eventfd.2 eventfd_write.3 MLINKS+=execve.2 fexecve.2 MLINKS+=extattr_get_file.2 extattr.2 \ extattr_get_file.2 extattr_delete_fd.2 \