public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Noah Goldstein <goldstein.w.n@gmail.com>
To: Joe Damato <jdamato@fastly.com>
Cc: Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>,
	libc-alpha@sourceware.org
Subject: Re: [PATCH v2 1/1] Linux: Add epoll ioctls
Date: Tue, 4 Jun 2024 10:50:29 -0500	[thread overview]
Message-ID: <CAFUsyf+HRk382AzYxbi4DW-ruao5oCLMnW_i2zv-TMLi95KW4w@mail.gmail.com> (raw)
In-Reply-To: <Zl80YcYABzN2noNW@LQ3V64L9R2>

On Tue, Jun 4, 2024 at 10:36 AM Joe Damato <jdamato@fastly.com> wrote:
>
> On Fri, May 31, 2024 at 11:59:19AM -0700, Joe Damato wrote:
> > On Wed, May 29, 2024 at 11:14:32AM -0300, Adhemerval Zanella Netto wrote:
> > >
> > >
> > > On 28/05/24 14:37, Joe Damato wrote:
> > > > As of Linux kernel 6.9, some ioctls and a parameters structure have been
> > > > introduced which allow user programs to control whether a particular
> > > > epoll context will busy poll.
> > > >
> > > > Update the headers to include these for the convenience of user apps.
> > > >
> > > > The ioctls were added in Linux kernel 6.9 commit 18e2bf0edf4dd
> > > > ("eventpoll: Add epoll ioctl for epoll_params") [1] to
> > > > include/uapi/linux/eventpoll.h.
> > > >
> > > > [1]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/diff/?h=v6.9&id=18e2bf0edf4dd
> > > >
> > > > Signed-off-by: Joe Damato <jdamato@fastly.com>
> > >
> > > LGTM, thanks.
> > >
> > > Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
> >
> > Thanks for the review!
> >
> > Do I need to do anything to get this pushed? Not sure what the libc
> > process is, but AFAIK I don't have (nor do I want) write access to
> > the repo to push.
>
> I noticed in patchwork that this is set to "Committed" but it does
> appear in the shortlong for glibc.
>
> Maybe I am looking in the wrong place?
>
> Patchwork: https://patchwork.sourceware.org/project/glibc/patch/20240528173706.511391-2-jdamato@fastly.com/
> shortlog: https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/master
>
> If some one could let me know what, if anything, I need to do to get
> this pushed that would super helpful.
>
> Thanks,
> Joe
>

Doesn't appear to have been pushed.

I'll push this now.
> > > > ---
> > > >  NEWS                                       |  3 +
> > > >  sysdeps/unix/sysv/linux/Makefile           |  1 +
> > > >  sysdeps/unix/sysv/linux/sys/epoll.h        | 14 ++++
> > > >  sysdeps/unix/sysv/linux/tst-epoll-ioctls.c | 92 ++++++++++++++++++++++
> > > >  4 files changed, 110 insertions(+)
> > > >  create mode 100644 sysdeps/unix/sysv/linux/tst-epoll-ioctls.c
> > > >
> > > > diff --git a/NEWS b/NEWS
> > > > index 84efa46df3..20e263f581 100644
> > > > --- a/NEWS
> > > > +++ b/NEWS
> > > > @@ -33,6 +33,9 @@ Major new features:
> > > >    more extensive verification tests for AT_SECURE programs and not meant to
> > > >    be a security feature.
> > > >
> > > > +* On Linux, update epoll header to include epoll ioctl definitions and
> > > > +  related structure added in Linux kernel 6.9.
> > > > +
> > > >  Deprecated and removed features, and other changes affecting compatibility:
> > > >
> > > >  * Architectures which use a 32-bit seconds-since-epoch field in struct
> > > > diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
> > > > index 415aa1f14d..ae66590e91 100644
> > > > --- a/sysdeps/unix/sysv/linux/Makefile
> > > > +++ b/sysdeps/unix/sysv/linux/Makefile
> > > > @@ -200,6 +200,7 @@ tests += \
> > > >    tst-clone2 \
> > > >    tst-clone3 \
> > > >    tst-epoll \
> > > > +  tst-epoll-ioctls \
> > > >    tst-fanotify \
> > > >    tst-fdopendir-o_path \
> > > >    tst-getauxval \
> > > > diff --git a/sysdeps/unix/sysv/linux/sys/epoll.h b/sysdeps/unix/sysv/linux/sys/epoll.h
> > > > index fc8dce45c8..45e546fa44 100644
> > > > --- a/sysdeps/unix/sysv/linux/sys/epoll.h
> > > > +++ b/sysdeps/unix/sysv/linux/sys/epoll.h
> > > > @@ -19,6 +19,7 @@
> > > >  #define  _SYS_EPOLL_H    1
> > > >
> > > >  #include <stdint.h>
> > > > +#include <sys/ioctl.h>
> > > >  #include <sys/types.h>
> > > >
> > > >  #include <bits/types/sigset_t.h>
> > > > @@ -87,6 +88,19 @@ struct epoll_event
> > > >    epoll_data_t data;     /* User data variable */
> > > >  } __EPOLL_PACKED;
> > > >
> > > > +struct epoll_params
> > > > +{
> > > > +  uint32_t busy_poll_usecs;
> > > > +  uint16_t busy_poll_budget;
> > > > +  uint8_t prefer_busy_poll;
> > > > +
> > > > +  /* pad the struct to a multiple of 64bits */
> > > > +  uint8_t __pad;
> > > > +};
> > > > +
> > > > +#define EPOLL_IOC_TYPE 0x8A
> > > > +#define EPIOCSPARAMS _IOW(EPOLL_IOC_TYPE, 0x01, struct epoll_params)
> > > > +#define EPIOCGPARAMS _IOR(EPOLL_IOC_TYPE, 0x02, struct epoll_params)
> > > >
> > > >  __BEGIN_DECLS
> > > >
> > > > diff --git a/sysdeps/unix/sysv/linux/tst-epoll-ioctls.c b/sysdeps/unix/sysv/linux/tst-epoll-ioctls.c
> > > > new file mode 100644
> > > > index 0000000000..618ecc4e86
> > > > --- /dev/null
> > > > +++ b/sysdeps/unix/sysv/linux/tst-epoll-ioctls.c
> > > > @@ -0,0 +1,92 @@
> > > > +/* Basic tests for Linux epoll ioctls.
> > > > +   Copyright (C) 2022-2024 Free Software Foundation, Inc.
> > > > +   This file is part of the GNU C Library.
> > > > +
> > > > +   The GNU C Library is free software; you can redistribute it and/or
> > > > +   modify it under the terms of the GNU Lesser General Public
> > > > +   License as published by the Free Software Foundation; either
> > > > +   version 2.1 of the License, or (at your option) any later version.
> > > > +
> > > > +   The GNU C Library is distributed in the hope that it will be useful,
> > > > +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> > > > +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > > > +   Lesser General Public License for more details.
> > > > +
> > > > +   You should have received a copy of the GNU Lesser General Public
> > > > +   License along with the GNU C Library; if not, see
> > > > +   <https://www.gnu.org/licenses/>.  */
> > > > +
> > > > +#include <intprops.h>
> > > > +#include <stdlib.h>
> > > > +#include <string.h>
> > > > +#include <support/check.h>
> > > > +#include <support/process_state.h>
> > > > +#include <support/support.h>
> > > > +#include <support/test-driver.h>
> > > > +#include <support/xsignal.h>
> > > > +#include <support/xunistd.h>
> > > > +#include <sys/ioctl.h>
> > > > +#include <sys/epoll.h>
> > > > +
> > > > +static void
> > > > +test_epoll_ioctl (void)
> > > > +{
> > > > +  int efd = epoll_create1 (0);
> > > > +  TEST_VERIFY_EXIT (efd != -1);
> > > > +
> > > > +  struct epoll_params params;
> > > > +
> > > > +  TEST_COMPARE (ioctl (efd, EPIOCGPARAMS, &params), 0);
> > > > +
> > > > +  /* parameters are all 0 by default */
> > > > +  TEST_COMPARE (params.busy_poll_usecs, 0);
> > > > +  TEST_COMPARE (params.busy_poll_budget, 0);
> > > > +  TEST_COMPARE (params.prefer_busy_poll, 0);
> > > > +  TEST_COMPARE (params.__pad, 0);
> > > > +
> > > > +  /* set custom parameters */
> > > > +  params.busy_poll_usecs = 40;
> > > > +  params.busy_poll_budget = 8;
> > > > +  params.prefer_busy_poll = 1;
> > > > +  params.__pad = 0;
> > > > +
> > > > +  TEST_COMPARE (ioctl (efd, EPIOCSPARAMS, &params), 0);
> > > > +
> > > > +  memset (&params, 0, sizeof (params));
> > > > +
> > > > +  TEST_COMPARE (ioctl (efd, EPIOCGPARAMS, &params), 0);
> > > > +
> > > > +  /* check custom values were retrieved after being set */
> > > > +  TEST_COMPARE (params.busy_poll_usecs, 40);
> > > > +  TEST_COMPARE (params.busy_poll_budget, 8);
> > > > +  TEST_COMPARE (params.prefer_busy_poll, 1);
> > > > +  TEST_COMPARE (params.__pad, 0);
> > > > +
> > > > +  xclose (efd);
> > > > +}
> > > > +
> > > > +static bool
> > > > +ioctl_supported (void)
> > > > +{
> > > > +  int efd = epoll_create1 (0);
> > > > +  TEST_VERIFY_EXIT (efd != -1);
> > > > +
> > > > +  struct epoll_params params;
> > > > +  int r = ioctl (efd, EPIOCGPARAMS, &params);
> > > > +  xclose (efd);
> > > > +
> > > > +  return (r == 0);
> > > > +}
> > > > +
> > > > +static int
> > > > +do_test (void)
> > > > +{
> > > > +  if (ioctl_supported ())
> > > > +    test_epoll_ioctl ();
> > > > +  else
> > > > +    return EXIT_UNSUPPORTED;
> > > > +
> > > > +  return 0;
> > > > +}
> > > > +
> > > > +#include <support/test-driver.c>

  reply	other threads:[~2024-06-04 15:50 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-28 17:37 [PATCH v2 0/1] " Joe Damato
2024-05-28 17:37 ` [PATCH v2 1/1] " Joe Damato
2024-05-29 14:14   ` Adhemerval Zanella Netto
2024-05-31 18:59     ` Joe Damato
2024-06-04 15:36       ` Joe Damato
2024-06-04 15:50         ` Noah Goldstein [this message]
2024-06-04 15:51           ` Adhemerval Zanella Netto
2024-06-04 16:06             ` Joe Damato

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAFUsyf+HRk382AzYxbi4DW-ruao5oCLMnW_i2zv-TMLi95KW4w@mail.gmail.com \
    --to=goldstein.w.n@gmail.com \
    --cc=adhemerval.zanella@linaro.org \
    --cc=jdamato@fastly.com \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).