From nobody Fri Jun 17 19:39:51 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 1BF4485C6E4; Fri, 17 Jun 2022 19:39:53 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LPqBJ3QQPz3h6p; Fri, 17 Jun 2022 19:39:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1655494792; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CyCp0qfIwBdhzUcSzOOgIevew3Ey8Je/Knbpd3DS+8g=; b=oxCoGxHNYW/BuHB6IMNfc9oLK3A62vxDQxszBPY8tz1HfDo+WsYpUNNBdGKqum9cqEiBes TFcZ7HoJKcW6k7UlLDXeI+cp+dHqKNxT39u+/poCuqV3dobKmP+qCUCSCGu3X4YGHlmXeX apjzdatoLi71GRo3f3eZzV2Xo309sm1uYLrKSfdxn2UJO0uFdhkuUc88WxWaEqsrCGggMF CErvWqdYNlhpNhLL3Lzrutbb9fEIaerXqwAAJFUFnIcJf44Q9rpF+BPkwLZhNRTPuneqbI SRuoLPPwCakpRO8UUkUdKlNVE+vXWrvXOIv4w1BKme8LlKRD8mgLVaM/tDX6fg== 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 9F44925C5B; Fri, 17 Jun 2022 19:39:51 +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 25HJdp60016566; Fri, 17 Jun 2022 19:39:51 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 25HJdplf016565; Fri, 17 Jun 2022 19:39:51 GMT (envelope-from git) Date: Fri, 17 Jun 2022 19:39:51 GMT Message-Id: <202206171939.25HJdplf016565@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dmitry Chagin Subject: git: 3f8eb6f28bf5 - stable/13 - linux(4): Implement recvmmsg_time64 syscall. List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dchagin X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 3f8eb6f28bf5e9964e1d56336b9c93173a30acf9 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1655494792; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CyCp0qfIwBdhzUcSzOOgIevew3Ey8Je/Knbpd3DS+8g=; b=EtmklE5itEKz8UXkIJZNxvv3eiGSn+JQSaMeShHzzI9Gu8a7cCtVL6dHBS7WJVTcVMvHvE NpiPYh95EI8JA9vJGvftoHQZAXXqIl4M5iWObUGuMBtSZcRIQIkyroVLAmZsh/ac3lIRMO QJTkK5uDOBRHOLHoN5cVTYH4aHOPr56bTbiFAUTk5O+g10cU61QlU7KJTqFWum4ICRhQzA qFVDuFGWX7WSltKTn5iiH7M4yKuB1hWh0VU17Kt/xiNYYClNTZbUnUoNqlskdQQZunu1pS DWsM3x6220/p1ZTX54+ZAScLIlVB4iXHJ/XDL5Glqk+o4O7RAFfHuMVhYD/76Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1655494792; a=rsa-sha256; cv=none; b=UXCdQMz4apzyrjJKpee1e2UyWeozFdPGDwm9FG4G05jyACJpiqi/nE0THbayaAgmCi04SX 6uHqU8o/Q8wUP3pY8P5baWsRCIB4OjDj7Sa45ulH0d/r0FnEH8xC85UeqM7wWQj2iRnaQQ aKU7zajxI19db/mLod3B3Tfli5w18xw8O8XRWz+WGkbYN9DSJ1ydQv5a8HeFqtzA8Pc64b lmyhk8FKkO6fmQZOK2jK1SK2BiFnQE1o7eJ4W+6q1hppvqiF4Yv4z88oNNTJED8OlHvabs vwC/P7CNdcOLoL2BBJnSqSswKw+9FVtuWDaDPFRXxr6iFpo2k4YU+Xj6q2wprw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by dchagin: URL: https://cgit.FreeBSD.org/src/commit/?id=3f8eb6f28bf5e9964e1d56336b9c93173a30acf9 commit 3f8eb6f28bf5e9964e1d56336b9c93173a30acf9 Author: Dmitry Chagin AuthorDate: 2022-05-04 10:06:53 +0000 Commit: Dmitry Chagin CommitDate: 2022-06-17 19:34:42 +0000 linux(4): Implement recvmmsg_time64 syscall. MFC after: 2 weeks (cherry picked from commit 1744f14e26c99af704650922e19e6934aa9a1271) --- sys/amd64/linux32/linux32_dummy_machdep.c | 1 - sys/compat/linux/linux_socket.c | 85 ++++++++++++++++++++++--------- sys/i386/linux/linux_dummy_machdep.c | 1 - 3 files changed, 61 insertions(+), 26 deletions(-) diff --git a/sys/amd64/linux32/linux32_dummy_machdep.c b/sys/amd64/linux32/linux32_dummy_machdep.c index 0cc1cd581c32..a5c61e252f9d 100644 --- a/sys/amd64/linux32/linux32_dummy_machdep.c +++ b/sys/amd64/linux32/linux32_dummy_machdep.c @@ -69,7 +69,6 @@ DUMMY(arch_prctl); /* Linux 5.0: */ DUMMY(clock_adjtime64); DUMMY(io_pgetevents_time64); -DUMMY(recvmmsg_time64); DUMMY(mq_timedsend_time64); DUMMY(mq_timedreceive_time64); DUMMY(semtimedop_time64); diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c index d7e17596fde1..93b5cea7ecc3 100644 --- a/sys/compat/linux/linux_socket.c +++ b/sys/compat/linux/linux_socket.c @@ -1736,32 +1736,19 @@ linux_recvmsg(struct thread *td, struct linux_recvmsg_args *args) args->flags, &bsd_msg)); } -int -linux_recvmmsg(struct thread *td, struct linux_recvmmsg_args *args) +static int +linux_recvmmsg_common(struct thread *td, l_int s, struct l_mmsghdr *msg, + l_uint vlen, l_uint flags, struct timespec *tts) { - struct l_mmsghdr *msg; struct msghdr bsd_msg; - struct l_timespec lts; - struct timespec ts, tts; + struct timespec ts; l_uint retval; int error, datagrams; - if (args->timeout) { - error = copyin(args->timeout, <s, sizeof(struct l_timespec)); - if (error != 0) - return (error); - error = linux_to_native_timespec(&ts, <s); - if (error != 0) - return (error); - getnanotime(&tts); - timespecadd(&tts, &ts, &tts); - } - - msg = PTRIN(args->msg); datagrams = 0; - while (datagrams < args->vlen) { - error = linux_recvmsg_common(td, args->s, &msg->msg_hdr, - args->flags & ~LINUX_MSG_WAITFORONE, &bsd_msg); + while (datagrams < vlen) { + error = linux_recvmsg_common(td, s, &msg->msg_hdr, + flags & ~LINUX_MSG_WAITFORONE, &bsd_msg); if (error != 0) break; @@ -1775,15 +1762,15 @@ linux_recvmmsg(struct thread *td, struct linux_recvmmsg_args *args) /* * MSG_WAITFORONE turns on MSG_DONTWAIT after one packet. */ - if (args->flags & LINUX_MSG_WAITFORONE) - args->flags |= LINUX_MSG_DONTWAIT; + if (flags & LINUX_MSG_WAITFORONE) + flags |= LINUX_MSG_DONTWAIT; /* * See BUGS section of recvmmsg(2). */ - if (args->timeout) { + if (tts) { getnanotime(&ts); - timespecsub(&ts, &tts, &ts); + timespecsub(&ts, tts, &ts); if (!timespecisset(&ts) || ts.tv_sec > 0) break; } @@ -1796,6 +1783,56 @@ linux_recvmmsg(struct thread *td, struct linux_recvmmsg_args *args) return (error); } +int +linux_recvmmsg(struct thread *td, struct linux_recvmmsg_args *args) +{ + struct l_timespec lts; + struct timespec ts, tts, *ptts; + int error; + + if (args->timeout) { + error = copyin(args->timeout, <s, sizeof(struct l_timespec)); + if (error != 0) + return (error); + error = linux_to_native_timespec(&ts, <s); + if (error != 0) + return (error); + getnanotime(&tts); + timespecadd(&tts, &ts, &tts); + ptts = &tts; + } + else ptts = NULL; + + return (linux_recvmmsg_common(td, args->s, PTRIN(args->msg), + args->vlen, args->flags, ptts)); +} + +#if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32)) +int +linux_recvmmsg_time64(struct thread *td, struct linux_recvmmsg_time64_args *args) +{ + struct l_timespec64 lts; + struct timespec ts, tts, *ptts; + int error; + + if (args->timeout) { + error = copyin(args->timeout, <s, sizeof(struct l_timespec)); + if (error != 0) + return (error); + error = linux_to_native_timespec64(&ts, <s); + if (error != 0) + return (error); + getnanotime(&tts); + timespecadd(&tts, &ts, &tts); + ptts = &tts; + } + else ptts = NULL; + + return (linux_recvmmsg_common(td, args->s, PTRIN(args->msg), + args->vlen, args->flags, ptts)); +} +#endif + int linux_shutdown(struct thread *td, struct linux_shutdown_args *args) { diff --git a/sys/i386/linux/linux_dummy_machdep.c b/sys/i386/linux/linux_dummy_machdep.c index 4619fa226a72..dd89444537d0 100644 --- a/sys/i386/linux/linux_dummy_machdep.c +++ b/sys/i386/linux/linux_dummy_machdep.c @@ -71,7 +71,6 @@ DUMMY(arch_prctl); /* Linux 5.0: */ DUMMY(clock_adjtime64); DUMMY(io_pgetevents_time64); -DUMMY(recvmmsg_time64); DUMMY(mq_timedsend_time64); DUMMY(mq_timedreceive_time64); DUMMY(semtimedop_time64);