linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Christoph Hellwig <hch@infradead.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ley Foon Tan <lftan@altera.com>,
	Linux-Arch <linux-arch@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	LeyFoon Tan <lftan.linux@gmail.com>,
	Chung-Lin Tang <cltang@codesourcery.com>
Subject: Re: [PATCH 00/25] Change time_t and clock_t to 64 bit
Date: Tue, 13 May 2014 21:32:53 +0200	[thread overview]
Message-ID: <8399002.IIyBoyEHox@wuerfel> (raw)
In-Reply-To: <CAMuHMdVxc3XRanpboWPumvQKbg-qdRBHQvYXwjTKX4CrxXPeAw@mail.gmail.com>

On Tuesday 13 May 2014 20:24:59 Geert Uytterhoeven wrote:
> On Tue, May 13, 2014 at 8:10 PM, Arnd Bergmann <arnd@arndb.de> wrote:
> > Using 64-bit time_t on x32 is fine, because it's fast to operate
> > in user space with 64-bit registers, and the kernel is 64-bit
> > anyway. Inside of the kernel, we may get into trouble using
> > a 64-bit time_t on 32-bit architectures because of the overhead
> > in 64-bit math, e.g. all the timekeeping code that is based on
> > timespec or some code paths in file systems and network code where
> > we actually require division of time_t values.
> 
> While going over time_t uses, have you found a pattern for use cases
> involving division of time_t values in filesystem and networking code?

In ipv4, we have multiple places doing this:

        icmp_param.data.times[1] = htonl((tv.tv_sec % 86400) * MSEC_PER_SEC +
                                         tv.tv_nsec / NSEC_PER_MSEC);

to calculate the miliseconds since midnight. For file systems, I
found that FAT uses seconds/minutes/hours/days/month/year representation,
which is a lot of divides, but that can probably be optimized and
we need to handle years beyond 2038 anyway.

> > We clearly have to change that code in some for to deal with y2038,
> > but 64-bit time_t may not be the best option. A lot of the
> > in-kernel code can probably use ktime_t, which we can change
> > to a different representation (e.g. 34 bit seconds) if needed,
> > and all the code that is only interested in relative time
> > (e.g. nanosleep) doesn't have to change at all.
> 
> Yeah. 32-bit uptimes should be good enough for everyone (don't quote
> me on that), so adding a 64-bit offset when there's a need for absolute
> time should be OK.

I think we have three categories:

a) interfaces that uses relative time_t/timespec/timeval:
   - nanosleep
   - select/pselect/poll/ppoll/epoll
   - getrusage
   - sched_rr_get_interval
   - sigtimedwait
   - clock_nanosleep
   - alarm
   - siginfo (rusage)

  These can stay compatible, but we'd have to use a different
  type if we change time_t.

b) interfaces that don't make sense for times in the past:
   - getitimer/setitimer
   - timer_settime/timer_gettime
   - gettimeofday/settimeofday
   - adjtimex
   - clock_gettime/clock_settime/clock_adjtime
   - time/stime
   - socket time stamps
   - audio time stamps
   - v4l time stamps
   - input event time stamps
   - sysv ipc (msg, sem, shm)

   Here, we are relatively free to change the start of the
   epoch in the kernel but convert to something else on the
   user space boundary. One possibility is to scale them to
   boot time and use ktime_t in the kernel.

c) interfaces that require absolute times:
   - stat/lstat/fstatat/
   - utime/utimes/futimesat

These absolutely have to use something better than time_t
both in user space and in the kernel so we can deal with
old files. A lot of file systems need to be fixed as well so
we can actually store the times, regardless of whether we
are running a 32 or 64 bit kernel.

	Arnd 

  reply	other threads:[~2014-05-13 19:33 UTC|newest]

Thread overview: 132+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-13  8:57 [PATCH 00/25] Change time_t and clock_t to 64 bit Ley Foon Tan
2014-05-13  9:02 ` [PATCH 01/25] asm-generic: " Ley Foon Tan
2014-05-13  9:15   ` James Hogan
2014-05-13  9:30     ` Thomas Gleixner
2014-05-13  9:30       ` Thomas Gleixner
2014-05-13  9:32     ` Ley Foon Tan
2014-05-13  9:32       ` Ley Foon Tan
2014-05-13  9:50       ` James Hogan
2014-05-13  9:50         ` James Hogan
2014-05-13 10:17         ` Ley Foon Tan
2014-05-13 10:21           ` Arnd Bergmann
2014-05-13 10:21             ` Arnd Bergmann
2014-05-13 12:07             ` Thomas Gleixner
2014-05-13 13:11               ` Geert Uytterhoeven
2014-05-13 13:38                 ` Arnd Bergmann
2014-05-13 14:37                   ` Thomas Gleixner
2014-05-13 10:22           ` James Hogan
2014-05-13 10:22             ` James Hogan
2014-05-14  3:47             ` H. Peter Anvin
2014-05-14 10:44               ` Geert Uytterhoeven
2014-05-13  9:02 ` [PATCH 02/25] arc: Add 32 bit time_t and clock_t Ley Foon Tan
2014-05-13  9:02   ` Ley Foon Tan
2014-05-13  9:02 ` [PATCH 03/25] arm: " Ley Foon Tan
2014-05-13  9:02   ` Ley Foon Tan
2014-05-13  9:02 ` [PATCH 04/25] avr32: " Ley Foon Tan
2014-05-13  9:02   ` Ley Foon Tan
2014-05-13 20:19   ` Hans-Christian Egtvedt
2014-05-14  1:54     ` Ley Foon Tan
2014-05-14  7:44       ` Hans-Christian Egtvedt
2014-05-14 21:39         ` H. Peter Anvin
2014-05-13  9:02 ` [PATCH 05/25] blackfin: " Ley Foon Tan
2014-05-13  9:02   ` Ley Foon Tan
2014-05-13  9:03 ` [PATCH 06/25] c6x: " Ley Foon Tan
2014-05-13  9:03   ` Ley Foon Tan
2014-05-13  9:03 ` [PATCH 08/25] frv: " Ley Foon Tan
2014-05-13  9:03   ` Ley Foon Tan
2014-05-13  9:03 ` [PATCH 09/25] hexagon: " Ley Foon Tan
2014-05-13  9:03   ` Ley Foon Tan
2014-05-13  9:03 ` [PATCH 10/25] m32r: " Ley Foon Tan
2014-05-13  9:03   ` Ley Foon Tan
2014-05-13  9:03 ` [PATCH 11/25] m68k: " Ley Foon Tan
2014-05-13  9:03   ` Ley Foon Tan
2014-05-13  9:04 ` [PATCH 12/25] metag: " Ley Foon Tan
2014-05-13  9:04   ` Ley Foon Tan
2014-05-13  9:22   ` James Hogan
2014-05-13  9:22     ` James Hogan
2014-05-13  9:28     ` Ley Foon Tan
2014-05-13  9:28       ` Ley Foon Tan
2014-05-13  9:05 ` [PATCH 13/25] microblaze: " Ley Foon Tan
2014-05-13  9:05   ` Ley Foon Tan
2014-05-13  9:05 ` [PATCH 14/25] mips: " Ley Foon Tan
2014-05-13  9:05   ` Ley Foon Tan
2014-05-13  9:05 ` [PATCH 15/25] mn10300: " Ley Foon Tan
2014-05-13  9:05   ` Ley Foon Tan
2014-05-13  9:05 ` [PATCH 16/25] openrisc: " Ley Foon Tan
2014-05-13  9:05   ` Ley Foon Tan
2014-05-13  9:30   ` Jonas Bonn
2014-05-13  9:30     ` Jonas Bonn
2014-05-13  9:41     ` Ley Foon Tan
2014-05-13  9:41       ` Ley Foon Tan
2014-05-13  9:06 ` [PATCH 17/25] parisc: " Ley Foon Tan
2014-05-13  9:06   ` Ley Foon Tan
2014-05-13 20:17   ` Helge Deller
2014-05-14  1:57     ` Ley Foon Tan
2014-05-15  0:34     ` H. Peter Anvin
2014-05-15  0:34       ` H. Peter Anvin
2014-05-13  9:06 ` [PATCH 19/25] s390: " Ley Foon Tan
2014-05-13  9:06 ` [PATCH 20/25] score: " Ley Foon Tan
2014-05-13  9:06   ` Ley Foon Tan
2014-05-13  9:06 ` [PATCH 21/25] sh: " Ley Foon Tan
2014-05-13  9:06   ` Ley Foon Tan
2014-05-13  9:06 ` [PATCH 22/25] sparc: " Ley Foon Tan
2014-05-13  9:06   ` Ley Foon Tan
2014-05-13  9:06 ` [PATCH 23/25] unicore32: " Ley Foon Tan
2014-05-13  9:06   ` Ley Foon Tan
2014-05-13  9:06 ` [PATCH 25/25] xtense: " Ley Foon Tan
2014-05-13  9:06   ` Ley Foon Tan
2014-05-13  9:10 ` [PATCH 07/25] cris: " Ley Foon Tan
2014-05-13  9:10 ` [PATCH 00/25] Change time_t and clock_t to 64 bit Geert Uytterhoeven
2014-05-13  9:23   ` Ley Foon Tan
2014-05-13 15:24 ` Christoph Hellwig
2014-05-13 15:33   ` Thomas Gleixner
2014-05-13 17:46     ` Christoph Hellwig
2014-05-13 18:10       ` Arnd Bergmann
2014-05-13 18:24         ` Geert Uytterhoeven
2014-05-13 19:32           ` Arnd Bergmann [this message]
2014-05-13 20:35             ` Geert Uytterhoeven
2014-05-14 11:00               ` Arnd Bergmann
2014-05-14 12:21                 ` Thomas Gleixner
2014-05-14 14:01                   ` Arnd Bergmann
2014-05-14 14:01                     ` Arnd Bergmann
2014-05-14 14:46                     ` Thomas Gleixner
2014-05-14 15:48                       ` Arnd Bergmann
2014-05-15 15:47                 ` James Bottomley
2014-05-15 16:36                   ` Arnd Bergmann
2014-05-15 21:07                     ` One Thousand Gnomes
2014-05-16  7:48                       ` Christoph Hellwig
2014-05-16 23:06                         ` H. Peter Anvin
2014-05-16 23:06                           ` H. Peter Anvin
2014-05-14 21:33             ` John Stultz
2014-05-15  0:14               ` H. Peter Anvin
2014-05-15  3:32                 ` Nicolas Pitre
2014-05-15 11:08               ` Arnd Bergmann
2014-05-15 11:18                 ` Christoph Hellwig
2014-05-15 17:11                 ` Chung-Lin Tang
2014-05-15 17:12                 ` Chung-Lin Tang
2014-05-15 17:12                   ` Chung-Lin Tang
2014-05-15 18:01                   ` Joseph S. Myers
2014-05-15 19:18                     ` Arnd Bergmann
2014-05-15 20:10                       ` Joseph S. Myers
2014-05-15 20:38                         ` Arnd Bergmann
2014-05-15 20:38                           ` Arnd Bergmann
2014-05-15 21:05                           ` Joseph S. Myers
2014-05-19  8:08                             ` Arnd Bergmann
2014-05-19  8:08                               ` Arnd Bergmann
2014-05-19 14:46                               ` Joseph S. Myers
2014-05-19 17:22                                 ` Arnd Bergmann
2014-05-19 18:12                                   ` Joseph S. Myers
2014-05-19 18:20                                     ` Arnd Bergmann
2014-05-16 23:11                           ` H. Peter Anvin
2014-05-16 23:47                             ` Joseph S. Myers
2014-05-17  0:32                               ` H. Peter Anvin
2014-05-18 13:46                                 ` Joseph S. Myers
2014-05-18 16:10                                   ` H. Peter Anvin
2014-05-18 18:18                                     ` Joseph S. Myers
2014-05-14 10:13         ` Ley Foon Tan
2014-05-14 10:33           ` Arnd Bergmann
2014-05-14 21:04             ` H. Peter Anvin
2014-05-13 18:15       ` Geert Uytterhoeven
2014-05-13 19:14       ` Thomas Gleixner
2014-05-14  3:36 ` [PATCH 24/25] x86: Add 32 bit time_t and clock_t Ley Foon Tan
2014-05-14  3:36   ` Ley Foon Tan

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=8399002.IIyBoyEHox@wuerfel \
    --to=arnd@arndb.de \
    --cc=cltang@codesourcery.com \
    --cc=geert@linux-m68k.org \
    --cc=hch@infradead.org \
    --cc=lftan.linux@gmail.com \
    --cc=lftan@altera.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tglx@linutronix.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 NNTP newsgroup(s).