From nobody Tue Jan 10 23:40:14 2023 X-Original-To: freebsd-hackers@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 4Ns6kM2qJKz2qp6G for ; Tue, 10 Jan 2023 23:40:27 +0000 (UTC) (envelope-from jake@technologyfriends.net) Received: from mail-lf1-x12d.google.com (mail-lf1-x12d.google.com [IPv6:2a00:1450:4864:20::12d]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Ns6kM2LvQz3h8b for ; Tue, 10 Jan 2023 23:40:27 +0000 (UTC) (envelope-from jake@technologyfriends.net) Authentication-Results: mx1.freebsd.org; none Received: by mail-lf1-x12d.google.com with SMTP id j17so20932268lfr.3 for ; Tue, 10 Jan 2023 15:40:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=technologyfriends.net; s=google; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=+CwdXId/S5Y3a8ovCRx6YZCYBSgRc46mit26y6fvjSM=; b=GuYvBKixcYcyxY+19hXhX5kW4WBvfBIX54wItTetRTRRYSznnWI6Q4Vny9e/8tbQnZ qAP0D4BPfG69PhX8/W9HfhSNPhMA2YRezbkSb3w5kuhi8Z4IoKZSV8KhBjOAmweFL60+ QX/gTU4dUSb0CmvPpEgCf/toEedZ14WToKMA3v7ojkM+c6GCAgEKM+o8Bd3A9VXH7m3E 3Uk+TfxBMpI7FsL0Wb8BWiWMUjq3+KasyXt5n7GSLwlzwJ00I3uU+6Qk1E9qRlQ/8niw b7jrKItyh2KB72gfCBGak+EqsmAcXq3yb9dDY1hYzcGIaF/nlOcASPzZ9J0GUGEVgvNa EO5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+CwdXId/S5Y3a8ovCRx6YZCYBSgRc46mit26y6fvjSM=; b=DeAKCuefac+s2jzHtD0ofEDc5CbvWZ7NYVRdIgG+RGYWX9KGajKnW6coeFsY6KxA5s yUObftvV0p+V0EbKg6PoNRK5l8Qj3EMDVdfq1zmpOr9HizKuuVOo1ADR2ntkvw83nM5q 55qa/YfG/3093vpmb+sM0rlQnk7ER99VnUIOJpLFiTYXAehoE/avde+7fQH51Emt9qWl 0pPK+GxhPoySUFewU8OzSgSyQvpGqwpA75HTVUM8ANUjQEeMOkG9sJSsQZW/lmwdb97Z TRLjwOxUDF8klZc08ilbw2H/KFxEn2ySNQuSDp0UM7DG0PgsbP4jCm1hoebZPJFEo/2p rbUg== X-Gm-Message-State: AFqh2kopQX+aApR5rT4eRT2+hvps4zXhb5Zu/apeYkU/hAaNaTGZ/QZ0 DoKxPQq1MNoy8fUcA1wDoWMxlg5UlCILN5feg4RPbOnub6MDW5QO X-Google-Smtp-Source: AMrXdXuVP4r1gWrdfqUQUWSSXDHjCkLMG/eUP9OcZ/+y5ry/9UrfLb6qFyudyYDaRjhPyjFM3rXohtWcg/5utCpqeM8= X-Received: by 2002:ac2:48bb:0:b0:4b1:753b:e677 with SMTP id u27-20020ac248bb000000b004b1753be677mr2762998lfg.407.1673394025646; Tue, 10 Jan 2023 15:40:25 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Jake Freeland Date: Tue, 10 Jan 2023 17:40:14 -0600 Message-ID: Subject: Re: Syscalls: eventfd and timerfd To: Mateusz Guzik Cc: freebsd-hackers@freebsd.org Content-Type: multipart/alternative; boundary="00000000000077e4cf05f1f16840" X-Rspamd-Queue-Id: 4Ns6kM2LvQz3h8b X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-ThisMailContainsUnwantedMimeParts: N --00000000000077e4cf05f1f16840 Content-Type: text/plain; charset="UTF-8" On Tue, Jan 10, 2023 at 5:30 PM Mateusz Guzik wrote: > It is added with a non-standard entry point. > > If you git log -p sys/kern/sys_eventfd.c you will see: > Thanks. This pointed me in the right direction. That commit contains almost everything I need to continue. Jake Freeland > > commit 7a202823aa54ba18c485bdbcf355269bcfee1ab9 > Author: Konstantin Belousov > Date: Wed Dec 23 16:14:04 2020 +0200 > > Expose eventfd in the native API/ABI using a new __specialfd syscall > > then if you git grep __specialfd: > lib/libc/gen/eventfd.c: return (__sys___specialfd(SPECIALFD_EVENTFD, > &args, sizeof(args))); > lib/libc/include/libc_private.h:int __sys___specialfd(int, > const void *, __size_t); > sys/compat/freebsd32/freebsd32_syscall.h:#define > FREEBSD32_SYS___specialfd 577 > sys/compat/freebsd32/freebsd32_syscalls.c: "__specialfd", > /* 577 = __specialfd */ > sys/compat/freebsd32/freebsd32_sysent.c: { .sy_narg = > AS(__specialfd_args), .sy_call = (sy_call_t *)sys___specialfd, > .sy_auevent = AUE_SPECIALFD, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = > SY_THR_STATIC }, /* 577 = __specialfd */ > sys/compat/freebsd32/freebsd32_systrace_args.c: /* __specialfd */ > sys/compat/freebsd32/freebsd32_systrace_args.c: struct > __specialfd_args *p = params; > sys/compat/freebsd32/freebsd32_systrace_args.c: /* __specialfd */ > sys/compat/freebsd32/freebsd32_systrace_args.c: /* __specialfd */ > sys/kern/init_sysent.c: { .sy_narg = AS(__specialfd_args), .sy_call = > (sy_call_t *)sys___specialfd, .sy_auevent = AUE_SPECIALFD, .sy_flags = > SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 577 = __specialfd > */ > sys/kern/sys_generic.c:sys___specialfd(struct thread *td, struct > __specialfd_args *args) > sys/kern/syscalls.c: "__specialfd", /* 577 = > __specialfd */ > sys/kern/syscalls.master: int __specialfd( > sys/kern/systrace_args.c: /* __specialfd */ > sys/kern/systrace_args.c: struct __specialfd_args *p = > params; > sys/kern/systrace_args.c: /* __specialfd */ > sys/kern/systrace_args.c: /* __specialfd */ > sys/sys/syscall.h:#define SYS___specialfd 577 > sys/sys/syscall.mk: __specialfd.o \ > sys/sys/sysproto.h:struct __specialfd_args { > sys/sys/sysproto.h:int sys___specialfd(struct thread *, struct > __specialfd_args *); > sys/sys/sysproto.h:#define SYS_AUE___specialfd AUE_SPECIALFD > > On 1/11/23, Jake Freeland wrote: > > Hi there, > > > > I am currently working on moving the linux_compat implementation of > > timerfd (in sys/compat/linux/linux_event.c) into its own FreeBSD syscall > > similar to what was done for eventfd. This is my first time implementing > > a syscall, so I have been following the eventfd implementation as a > > reference. I noticed that the eventfd syscall entries are absent from > > sys/kern/syscalls.master and I am not sure why. Was eventfd never > > formally added as a syscall entry or am I missing something? I was > > planning on adding timerfd entries to syscalls.master, but now I am > > unsure how to proceed. > > > > I apologize for my ignorance. This process is new to me. > > > > Thank you, > > Jake Freeland > > > > > -- > Mateusz Guzik > --00000000000077e4cf05f1f16840 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Tue, Jan 10, 2023 at 5:30 PM Mateusz G= uzik <mjguzik@gmail.com> wro= te:
It is added with a non-standard entry point.

If you git log -p sys/kern/sys_eventfd.c you will see:

Thanks. This pointed me in the right=C2=A0direction. That c= ommit contains
almost everything I need to continue.
Jake Freeland
=C2=A0

commit 7a202823aa54ba18c485bdbcf355269bcfee1ab9
Author: Konstantin Belousov <kib@FreeBSD.org>
Date:=C2=A0 =C2=A0Wed Dec 23 16:14:04 2020 +0200

=C2=A0 =C2=A0 Expose eventfd in the native API/ABI using a new __specialfd = syscall

then if you git grep __specialfd:
lib/libc/gen/eventfd.c: return (__sys___specialfd(SPECIALFD_EVENTFD,
&args, sizeof(args)));
lib/libc/include/libc_private.h:int=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0__sys___specialfd(int,
const void *, __size_t);
sys/compat/freebsd32/freebsd32_syscall.h:#define
FREEBSD32_SYS___specialfd=C2=A0 =C2=A0 =C2=A0 =C2=A0577
sys/compat/freebsd32/freebsd32_syscalls.c:=C2=A0 =C2=A0 =C2=A0 "__spec= ialfd",
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* 577 =3D __specialfd */
sys/compat/freebsd32/freebsd32_sysent.c:=C2=A0 =C2=A0 =C2=A0 =C2=A0 { .sy_n= arg =3D
AS(__specialfd_args), .sy_call =3D (sy_call_t *)sys___specialfd,
.sy_auevent =3D AUE_SPECIALFD, .sy_flags =3D SYF_CAPENABLED, .sy_thrcnt =3D=
SY_THR_STATIC },=C2=A0 =C2=A0 /* 577 =3D __specialfd */
sys/compat/freebsd32/freebsd32_systrace_args.c: /* __specialfd */
sys/compat/freebsd32/freebsd32_systrace_args.c:=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0struct
__specialfd_args *p =3D params;
sys/compat/freebsd32/freebsd32_systrace_args.c: /* __specialfd */
sys/compat/freebsd32/freebsd32_systrace_args.c: /* __specialfd */
sys/kern/init_sysent.c: { .sy_narg =3D AS(__specialfd_args), .sy_call =3D (sy_call_t *)sys___specialfd, .sy_auevent =3D AUE_SPECIALFD, .sy_flags =3D<= br> SYF_CAPENABLED, .sy_thrcnt =3D SY_THR_STATIC },=C2=A0 =C2=A0 /* 577 =3D __s= pecialfd
*/
sys/kern/sys_generic.c:sys___specialfd(struct thread *td, struct
__specialfd_args *args)
sys/kern/syscalls.c:=C2=A0 =C2=A0 "__specialfd",=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* 577 =3D __specialfd */
sys/kern/syscalls.master:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0int __specialfd(
sys/kern/systrace_args.c:=C2=A0 =C2=A0 =C2=A0 =C2=A0/* __specialfd */
sys/kern/systrace_args.c:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0struct __specialfd_args *p =3D params;
sys/kern/systrace_args.c:=C2=A0 =C2=A0 =C2=A0 =C2=A0/* __specialfd */
sys/kern/systrace_args.c:=C2=A0 =C2=A0 =C2=A0 =C2=A0/* __specialfd */
sys/sys/syscall.h:#define=C2=A0 =C2=A0 =C2=A0 =C2=A0SYS___specialfd 577
sys/sys/= syscall.mk:=C2=A0 =C2=A0 =C2=A0__specialfd.o \
sys/sys/sysproto.h:struct __specialfd_args {
sys/sys/sysproto.h:int=C2=A0 sys___specialfd(struct thread *, struct
__specialfd_args *);
sys/sys/sysproto.h:#define=C2=A0 =C2=A0 =C2=A0 SYS_AUE___specialfd=C2=A0 = =C2=A0 =C2=A0AUE_SPECIALFD

On 1/11/23, Jake Freeland <jake@technologyfriends.net> wrote:
> Hi there,
>
> I am currently working on moving the linux_compat implementation of > timerfd (in sys/compat/linux/linux_event.c) into its own FreeBSD sysca= ll
> similar to what was done for eventfd. This is my first time implementi= ng
> a syscall, so I have been following the eventfd implementation as a > reference. I noticed that the eventfd syscall entries are absent from<= br> > sys/kern/syscalls.master and I am not sure why. Was eventfd never
> formally added as a syscall entry or am I missing something? I was
> planning on adding timerfd entries to syscalls.master, but now I am > unsure how to proceed.
>
> I apologize for my ignorance. This process is new to me.
>
> Thank you,
> Jake Freeland
>


--
Mateusz Guzik <mjguzik gmail.com>
--00000000000077e4cf05f1f16840--