KernelNewbies
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Kernel Hacking

  • Frontpage

  • Kernel Hacking

  • Kernel Documentation

  • Kernel Glossary

  • FAQ

  • Found a bug?

  • Kernel Changelog

  • Upstream Merge Guide

Projects

  • KernelJanitors

  • KernelMentors

  • KernelProjects

Community

  • Why a community?

  • Regional Kernelnewbies

  • Personal Pages

  • Upcoming Events

References

  • Mailing Lists

  • Related Sites

  • Programming Links

Wiki

  • Recent Changes

  • Site Editors

  • Side Bar

  • Tips for Editors

  • Hosted by WikiWall

Navigation

  • RecentChanges
  • FindPage
  • HelpContents

Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

KernelNewbies:
  • y2038
  • syscalls

System calls

interfaces that uses relative time_t/timespec/timeval These can stay compatible, but we'd have to use a different type if we change time_t.

nanosleep

select/pselect/poll/ppoll/epoll

getrusage (+ wait4?)

sched_rr_get_interval

sigtimedwait

alarm

Also: futex, recvmmsg, io_getevents?

interfaces that don't make sense for times in the past 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.

[Does checkpoint/restore have any implications here wrt to how freely we can change the start of the epoch? E.g., when freezing/restoring processed from different systems that have timer_settime() timers?]

getitimer/setitimer

timer_settime/timer_gettime(+timerfd_settime, timerfd_gettime?)

gettimeofday/settimeofday

adjtimex

clock_gettime/clock_settime/clock_adjtime/clock_nanosleep(? what about clock_nanosleep TIMER_ABSTIME?)

time/stime

sysv ipc (msg, sem, shm)

sysinfo

interfaces that require absolute times 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.

stat/lstat/fstatat/

utime/utimes/futimesa/utimensat

ioctl There are numerous ioctl commands using a time argument. This list is incomplete

audio time stamps

v4l time stamps

input event time stamps

socket time stamps

...

memory mapped packet sockets Socket timestamps are exported to user space using a memory mapped interface defined in include/uapi/linux/if_packet.h. There are currently three versions of this interface, all use a 32-bit time type. We will likely need a version 4 to solve this.

Audit of include/uapi for time_t impact Structure and IOCTL dependency:

time_t

  • struct msqid64_ds (has 2038 padding!) struct semid64_ds (has 2038 padding!) struct cyclades_idle_stats struct video_event
    • VIDEO_GET_EVENT
    struct msqid_ds struct ppp_idle
    • PPPIOCGIDLE
    struct semid_ds
    • union semun
    struct timespec
    • SIOCGSTAMPNS struct coda_vattr
      • ..
      struct scm_timestamping struct som_hdr struct itimerspec struct v4l2_event
      • VIDIOC_DQEVENT
      struct snd_pcm_status
      • SNDRV_PCM_IOCTL_STATUS
      struct snd_pcm_mmap_status
      • struct snd_pcm_sync_ptr
        • SNDRV_PCM_IOCTL_SYNC_PTR
      struct snd_rawmidi_status
      • SNDRV_RAWMIDI_IOCTL_STATUS
      struct snd_timer_status
      • SNDRV_TIMER_IOCTL_STATUS
      struct snd_timer_tread struct snd_ctl_elem_value
      • SNDRV_CTL_IOCTL_ELEM_READ SNDRV_CTL_IOCTL_ELEM_WRITE
    struct timeval
    • SIOCGSTAMP struct zatm_t_hist struct bcm_msg_head struct elf_prstatus struct input_event struct omap3isp_stat_data
      • VIDIOC_OMAP3ISP_STAT_REQ
      PPGETTIME PPSETTIME struct rusage struct itimerval struct timex struct v4l2_buffer
      • VIDIOC_QUERYBUF VIDIOC_QBUF VIDIOC_DQBUF VIDIOC_PREPARE_BUF
    struct utimbuf

Syscalls affected by the above types:

  • sys_time sys_stime sys_nanosleep sys_clock_settime sys_clock_gettime sys_clock_getres sys_clock_nanosleep sys_sched_rr_get_interval sys_futex sys_rt_sigtimedwait sys_io_getevents sys_recvmmsg sys_semtimedop sys_mq_timedsend sys_mq_timedreceive sys_utimensat sys_pselect6 sys_ppoll sys_gettimeofday sys_settimeofday sys_utimes sys_select sys_futimesat sys_utime sys_timer_gettime sys_timer_settime sys_timerfd_settime sys_timerfd_gettime sys_wait4 sys_waitid sys_getrusage sys_getitimer sys_setitimer sys_adjtimex sys_clock_adjtime
  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01