unofficial mirror of libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: Alistair Francis <alistair23@gmail.com>
Cc: GNU C Library <libc-alpha@sourceware.org>,
	Alistair Francis <alistair.francis@wdc.com>,
	 Lukasz Majewski <lukma@denx.de>
Subject: Re: 32-bit time_t inside itimerval
Date: Mon, 30 Dec 2019 11:02:19 +0100	[thread overview]
Message-ID: <CAK8P3a13k=4fpUvtq2wG12KNZm9mSYn1pWma9UBVuYO0+BGq+g@mail.gmail.com> (raw)
In-Reply-To: <CAKmqyKMHF2okhU6W7OgQiNX+AeXUjm9YagVK2dczUe=nrgC=Eg@mail.gmail.com>

On Sat, Dec 21, 2019 at 6:19 PM Alistair Francis <alistair23@gmail.com> wrote:
> On Sat, Dec 21, 2019 at 5:31 AM Arnd Bergmann <arnd@arndb.de> wrote:
> > On Fri, Dec 20, 2019 at 10:35 PM Alistair Francis <alistair23@gmail.com> wrote:
> > >
> > What happened here is that originally I thought we would not need
> > setitimer/getitimer
> > and could fall back to timer_settime/timer_gettime, but that turned out to be a
> > misunderstanding (we do need both).
> >
> > By the time we introduced all the other system calls with 64-bit
> > time_t in linux-5.1,
> > there was no replacement yet, but since these interfaces never pass
> > absolute times
> > on the kernel ABI, it was considered good enough. There was a small debate on
> > whether struct itimerval and struct rusage (which has the same problem) should
> > have replacements using struct __kernel_timespec, or a newly added
> > __kernel_timeval, and that discussion never had a conclusion, so we
> > left it at this.
>
> Thanks for clarifying ths Arnd.
>
> Ok, I didn't realise this was the case. It ends up being a bit of a pain.

I'm sorry to hear that this is causing problems now. I tried hard to
get feedback on the question of whether we need the new syscalls
or not, and in the end decided not to do them, as any libc implementation
would need to do some conversion either way, and they already need
to understand about the kernel types as well.

> > For glibc, the only sensible implementation is to implement the time64
> > settimer/getitimer interfaces on top of the time32 setitimer/getitimer
> > system calls,
> > doing the conversion internally. (Same for getrusage and wait4).
>
> Ok, so we need to fix setitimer/getitimer,  getrusage and waitid's
> rusage (wait4 isn't in y2038 safe calls).

Right. To clarify about wait4/waitid (you are probably aware of this,
just pointing it out for other readers): The waitid() libc interface does not
contain a timeval, only the wait3()/wait4() functions do, and they are
implemented on top of the waitid() syscall.

> For the glibc people, can we do something like this?
>
>  1. Add a __old_timeval struct used by the itimerval and rusage structs
>  2. Make __old_timeval use __old_time_t that is always a long (no
> matter what time_t really is)

If you have linux-5.1 kernel headers, there is already __kernel_old_timeval
that is defined specifically for this purpose. Not sure if you can use those
given the state of the kernel headers overall.

> Then the question becomes do we expose __old_timeval (with 32-bit
> time_t) or the real timeval (64-bit time_t) to callers of the
> functions?

I would think this has to be the actual timeval, there is no point in
changing the API now.

> > We may still want to introduce getitimer_time64, setiitimer_timer64,
> > getrusage_time64 and waitid_time64 at some point, using __kernel_timespec
> > to have a saner user space interface, but there is no real point in glibc
> > using those syscalls as the underlying implementation when the fallback
> > to the time32 versions is still required.
>
> I would +1 adding getitimer_time64, setiitimer_timer64,
> getrusage_time64 and waitid_time64 as it simplifies things.

I have a rework of the itimer functions queued up for the kernel, after that
it should become very easy to add another set based on itimerspec.

For waitid/getrusage, a little bit of internal reorganization is still required
but shouldn't be hard to do as long as we can agree on the calling
conventions. We had a bit of discussion recently about adding new
waitid() variants that settled with adding new flags for the moment,
so adding another syscall now may take a while (the getrusage
replacement should not be an issue).

How do you expect the new syscalls to simplify things though?
My guess would be that they add complexity to the implementation
when you have to deal with converting from both the __kernel_timespec
and __kernel_old_timeval formats to the timeval format rather than
just one of the two.

       Arnd

  reply	other threads:[~2019-12-30 10:02 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-20 22:28 32-bit time_t inside itimerval Alistair Francis
2019-12-21 13:31 ` Arnd Bergmann
2019-12-21 17:18   ` Alistair Francis
2019-12-30 10:02     ` Arnd Bergmann [this message]
2019-12-30 19:51       ` Alistair Francis
2019-12-30 20:11         ` Arnd Bergmann
2019-12-30 21:16           ` Alistair Francis
2019-12-30 22:11             ` Arnd Bergmann
2020-01-02 12:08               ` Lukasz Majewski
2020-01-02 12:28                 ` Arnd Bergmann
2020-01-04 18:03                   ` Alistair Francis
2020-01-05 16:07                     ` Lukasz Majewski

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

  List information: https://www.gnu.org/software/libc/involved.html

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

  git send-email \
    --in-reply-to='CAK8P3a13k=4fpUvtq2wG12KNZm9mSYn1pWma9UBVuYO0+BGq+g@mail.gmail.com' \
    --to=arnd@arndb.de \
    --cc=alistair.francis@wdc.com \
    --cc=alistair23@gmail.com \
    --cc=libc-alpha@sourceware.org \
    --cc=lukma@denx.de \
    /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).