|
Size: 13965
Comment: update for latest patches
|
Size: 8458
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 1: | Line 1: |
| = The year 2038 problem = | ''unfortunately this page got deleted by accident, this version is restored from https://web.archive.org/web/20150318062024/http://kernelnewbies.org/y2038, but most of the formatting is still missing. '' == The year 2038 problem == |
| Line 4: | Line 6: |
| == User space interfaces == | === User space interfaces === |
| Line 7: | Line 9: |
| === System calls === | ==== System calls ==== System calls have been moved out [["y2038/syscalls"]], that page is rather outdated, newer information is available at https://lwn.net/Articles/643234/ |
| Line 9: | Line 12: |
| https://docs.google.com/spreadsheets/d/1HCYwHXxs48TsTb6IGUduNjQnmfRvMPzCN6T_0YiQwis has a table of all affected system calls, here are some explanations: ==== clocks and timers ==== * clock_gettime, clock_settime, clock_adjtime, clock_getres, clock_nanosleep, timer_gettime, timer_settime, timerfd_gettime, timerfd_settime: these should be done consistently, either using timespec64 or 64-bit nanoseconds, either one works. 64-bit nanoseconds would simplify the kernel internally quite a bit by avoiding the double timekeeping (we keep track of both nanoseconds and timespec in the timekeeper struct). the downside of nanoseconds-only is that each existing caller would need a conversion in user space, where currently we can avoid the expensive ktime_to_ts() for some cases. Current patches use 64-bit timespec. time, stime, gettimeofday, settimeofday, adjtimex, nanosleep,getitimer, setitimer: all deprecated => wontfix ==== i/o ==== pselect6, ppoll, io_getevents, recvmmsg: These currently pass a timespec into the kernel with *relative* timeouts. Internally, they convert it to ktime_t and back on the way out. We have three options: a. leave the current behavior, but use 64-bit timespec. This is what the current patches do a. leave as is, get the libc to convert 64-bit timespec to 32-bit timespec on the way into the kernel and back on the way out, which works because the relative timeout will not overflow a. use ktime_t to make these more efficient in the kernel, at the expense of requiring user space to convert it (all except io_getevents pass back the remaining time). select, old_select, poll: deprecated ==== ipc ==== mq_timedsend, mqtimedreceive: These get an *absolute* timeout, so we have to change them. Internally they use ktime_t, so that would be the natural interface, but timespec64 would work as well. The patches currently use a 64-bit timespec. semtimedop: This uses a relative timeout that is converted to jiffies internally, so using ktime_t would not be as natural, unless we rewrite the function to use hrtimers. The current patches simply use a 64-bit timespec. msgctl, semctl, shmctl: These have an output, which is a time_t that stores the absolute seconds value of the last time something happened. Internally this comes from get_seconds(), which has to be efficient anyway. There is sufficient padding available on all architectures (except MIPS) to extend the structure in a backwards-compatible way to 64 bit time values. Because of endianess concerns, we cannot simply replace time_t with time64_t unfortunately, but have to pass the low and high 32-bit components separately. On MIPS, we can only use 48-bit times for some structures, but that should be good enough as well. ==== inodes and filesystems ==== utimesnsat, fstat64, fstatat64: inode timestamps need to represent times before 1970 and way into the future, so we need 64-bit time_t here, I see no other alternatives here, so we have to pass struct timespec64 into utimensat, and create version 4 of 'struct stat' to pass into the future fstat and fstatat. I would use a version that matches the 64-bit layout of 'struct stat', as posted in v1 of the patch set. utime, utimes, futimensat, oldstat, oldlstat, oldfstat, newstat, newlstat, newfstat, newfstatat, stat64 and lstat64: These are all deprecated now, we have to stop getting this wrong! ==== tasks ==== getrusage, waitid: these pass a 'struct rusage' that contains a 'struct timeval' with elapsed time. Again there are multiple options: a. We could change rusage to contain a new 'struct relative_timeval' instead, with an unchanged layout, which makes the format incompatible with a standard libc that uses a 64-bit based timeval. There will be no y2038 overflow, but the ru_utime may overflow on systems with many cores when the total runtime of a task exceeds 68 years, e.g. after running on continuously for 259 days on a 96-core machine that is getting affordable now. a. We could make the layout the same as on 64-bit machines, as x32 does, which is again incompatible with posix but would work better. This is what the patch currently does. a. We could make the layout what glibc expects, using 64-bit based timeval structures at the beginning. a. We could define a new structure usings pure nanosecond counters. rt_sigtimedwait: This passes a relative timespec value in back out, so we could keep the current layout and have glibc convert it, or change it to something else. The kernel internally converts to jiffies to call schedule_timeout. futex: this passes a relative *or* absolute timespec in, so we have to change it. The kernel uses ktime_t internally here, so we could make the interface nanosecond based or stick with timespec64. sched_rr_get_interval: This returns a timespec with the schedule interval to user space, using a 32-bit based format is fine here, or we could convert to timespec64. The kernel uses jiffies internally. wait4: replaced by waitid ==== system wide ==== sysinfo: struct sysinfo contains '__kernel_long_t uptime', we can keep that, it's fine. ==== 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 }}} == File systems == |
=== File systems === |
| Line 159: | Line 15: |
| || '''file system''' || '''time type''' || '''expiration year''' || | || file system || time type || expiration year || || 9p (9P2000) || unsigned 32-bit seconds || 2106 || || file system || time type || expiration year || |
| Line 162: | Line 20: |
| || adfs || 40-bit cs since 1900 || 2248 || | || adfs || 40-bit cs since 1900 || 2248 || |
| Line 164: | Line 22: |
| || afs || unsigned 32-bit seconds || 2106 || || befs || unsigned 48-bit seconds || never || || bfs || unsigned 32-bit seconds || 2106 || |
|| afs || unsigned 32-bit seconds || 2106 || || befs || unsigned 48-bit seconds || never || || bfs || unsigned 32-bit seconds || 2106 || |
| Line 181: | Line 39: |
| || freevxfs || unsigned 32-bit seconds/u32 microseconds || 2106 || | || freevxfs || unsigned 32-bit seconds/u32 microseconds || 2106 || |
| Line 183: | Line 41: |
| || gfs2 || u64 seconds/u32 ns || never || | || gfs2 || u64 seconds/u32 ns || never || |
| Line 186: | Line 44: |
| || hostfs || timespec || 2038 || || hpfs || unsigned 32-bit seconds || 2106 || || isofs || 'char' year since 1900 (fixable) || 2028 (!) || |
|| hostfs || timespec || 2038 || || hpfs || unsigned 32-bit seconds || 2106 || || isofs || 'char' year since 1900 (fixable) || 2028 || |
| Line 190: | Line 48: |
| || jfs || unsigned 32-bit seconds/ns || 2106 || | || jfs || unsigned 32-bit seconds/ns || 2106 || |
| Line 192: | Line 50: |
| || minix || unsigned 32-bit seconds || 2106 || || ncpfs || 7-bit year since 1980 || 2107 || |
|| minix || unsigned 32-bit seconds || 2106 || || ncpfs || 7-bit year since 1980 || 2107 || |
| Line 197: | Line 55: |
| || nilfs2 || u64 seconds/u32 ns || never || | || nilfs2 || u64 seconds/u32 ns || never || |
| Line 200: | Line 58: |
| || omfs || 64-bit milliseconds || never || | || omfs || 64-bit milliseconds || never || |
| Line 202: | Line 60: |
| || qnx4 || unsigned 32-bit seconds || 2106 || || qnx6 || unsigned 32-bit seconds || 2106 || |
|| qnx4 || unsigned 32-bit seconds || 2106 || || qnx6 || unsigned 32-bit seconds || 2106 || |
| Line 207: | Line 65: |
| || sysv || unsigned 32-bit seconds || 2106 || | || sysv || unsigned 32-bit seconds || 2106 || |
| Line 211: | Line 69: |
| || ufs2 || signed 64-bit seconds/u32 ns ||never || | || ufs2 || signed 64-bit seconds/u32 ns || never || |
| Line 214: | Line 72: |
| == Tasks == | |
| Line 216: | Line 73: |
| = Plan = === 1.Plan for VFS === || Milestone || # of patches || Status || Targeted Kernel release || || Infrastructure patches for vfs_time and granularity fields 1.4.1 and 1.4.2 || 2 || Done || 4.7- rc1 || || Test time ranges beyond y2038 support, in memory timestamps match with on disk -1.3.1 and 1.3.2 || Xfs tests || In progress || 5/28/16 || || Replace CURRENT_TIME and CURRENT_TIME_SEC – 1.2.1 || ~60 || In Progress, waiting for 4.7 rc1 and repost previous. || 4.8 || || Vfs_time patches – 1.4.3 || ~40 || In Progress, waiting for 4.7-rc1 || 4.8 || || Fill in right granularities and ranges for FS – 1.2.2 and 1.2.3 || ~40 || Yet to start || 4.8 || || Expose FS granularities and ranges – 1.4.5 and 1.4.6 || ~5 || Yet to start || 4.8 || || Tests to check the granularities and ranges – 1.3.3 and 1.3.4 || Xfs tests || Yet to start || 6/10/16 || || Add policy for wrong granularities - 1.4.7 || RFC for 4.9 || Yet to start || || || Stat and utime changes – 1.4.8 || RFC for 4.9 || Yet to start || || || Tests for I_DIRTY_* flags and mount options -1.3.5 and 1.3.6 || Xfs tests || Yet to start || 6/30/16 || || Transition vfs to 64 bit – 1.4.4 || 2 || Ready, wait for other patches to merge || 4.10 || === 1.2 Cleanup === '''1.2.1 '''Replace current_time and current_time_sec '''1.2.2''' Fill in right granularities '''1.2.3''' Fill in right ranges === 1.3 Test === '''1.3.1''' Test time written on disk and in memory are same '''1.3.2 '''Test time ranges beyond y2038 '''1.3.3''' Test time granularities are what the fs needs '''1.3.4''' Test time ranges supported are same as what fs reports '''1.3.5''' Perf tests '''1.3.6''' Test to check i_dirty_* flags are updating correctly '''1.3.7''' Test to check with different mount options like lazy atime etc. === 1.4 Kernel tasks to transition vfs to use 64 bit times === '''1.4.1''' Infrastructure patches for vfs_time approach '''1.4.2''' Infrastructure patch for vfs granularity fields '''1.4.3''' Change each fs to use vfs time patches '''1.4.4''' Change vfs to use timespec64 '''1.4.5''' Expose fs granularities '''1.4.6''' Expose fs ranges '''1.4.7''' Add vfs policy for handling wrong ranges and granularity '''1.4.8''' Stat and utime api changes === 1.5 Runtime library === '''1.5.1''' Make changes in one library '''1.5.2''' Make it part of some userspace and run it === Tasks === |
|
| Line 218: | Line 137: |
| === Small tasks === | ==== Trivial tasks ==== Find a driver using time_t/timespec/timeval internally and convert it to ktime_t/timespec64, examples: |
| Line 220: | Line 140: |
| * Find a driver using time_t/timespec/timeval internally and convert it to ktime_t/timespec64, examples: * drivers/staging/media/lirc/lirc_imon.c (timeval, trivial) * drivers/staging/ft1000/ (time_t and timeval) * drivers/staging/android/sync_debug.c (timeval, very easy) * drivers/staging/android/timed_gpio.c (timeval, easy) * drivers/staging/bcm/LeakyBucket.c (timeval, slightly tricky) * drivers/staging/bcm/Bcmchar.c (timeval, very easy) * drivers/staging/comedi/drivers/comedi_test.c (timeval) * drivers/staging/comedi/drivers/serial2002.c (timeval, easy) * drivers/staging/dgnc/dgnc_tty.c (timeval, very easy) * drivers/staging/gdm72xx/ (timeval, easy) * drivers/staging/media/lirc/lirc_igorplugusb.c (timeval) * drivers/staging/media/lirc/lirc_parallel.c (timeval, easy) * drivers/staging/media/lirc/lirc_sasem.c (timeval, very easy) * drivers/staging/media/lirc/lirc_serial.c (timeval, easy) * drivers/staging/media/lirc/lirc_sir.c (timeval) * drivers/staging/rts5208/rtsx.h (timeval) [Status: Completed, Ksenija Stanojevic] * drivers/staging/olpc_dcon/olpc_dcon.c (timespec, rather broken) * drivers/staging/ozwpan/ozhcd.c (timespec) * drivers/staging/ozwpan/ozproto.c (timespec) * kernel/cpuset.c (time_t) [Status: Completed, Heena Sirwani] * fs/reiserfs/journal.c (time_t) * drivers/scsi/ips.c (time_t) * sound/pci/es1968.c (timeval) [Status: Completed, Tina Ruchandani] * kernel/power/hibernate.c (timeval) [Status: Completed, Tina Ruchandani] * drivers/s390/net/ctcm_fsms.c (timespec) [Status: Completed, Aya Mahfouz] * drivers/power/ab8500_fg.c (timespec) [Status: Completed, Ebru Akagunduz] |
* drivers/firewire/core-cdev.c * drivers/firewire/nosy.c * drivers/hv/hv_util.c * drivers/infiniband/hw/nes/ * drivers/misc/ibmasm/ibmasm.h * drivers/net/wireless/atmel.c * drivers/ide/pdc202xx_new.c * fs/fuse/dir.c * drivers/scsi/pmcraid.c |
| Line 248: | Line 150: |
| === Medium tasks === | ==== Small tasks ==== Find a driver using time_t/timespec/timeval internally and convert it to ktime_t/timespec64, examples: |
| Line 250: | Line 153: |
| * drivers/block/sx8.c * drivers/char/ipmi/ipmi_ssif.c * drivers/char/mmtimer.c * drivers/cpufreq/speedstep-lib.c * drivers/hsi/clients/cmt_speech.c * drivers/media/platform/vivid/ * drivers/net/hamradio/baycom_ser_fdx.c ==== Medium tasks ==== |
|
| Line 251: | Line 163: |
| * drivers/staging/comedi/comedi_fops.c (INSN_GTOD, timeval) * drivers/staging/android/alarm-dev.c (timespec) * include/uapi/linux/atm_zatm.h (zatm_t_hist/timeval) * include/uapi/linux/videodev2.h (v4l2_buffer/timespec) * Fix the android logger time format (drivers/staging/android/logger.c) |
* drivers/usb/misc/usbtest.c |
| Line 257: | Line 166: |
| * Convert all 'ptp' users in the kernel | |
| Line 259: | Line 168: |
| * Introduce known unsafe types (possibly like __kernel_time32_t, __kernel_compat_time_t etc) so we can annotate interfaces that are known to use a fixed size and cannot be changed to new types. * Fix all time issues in drivers/staging/lustre (maybe advanced task) |
|
| Line 262: | Line 169: |
| === Advanced tasks === | * fix all uses of timeval in drivers/scsi/bfa |
| Line 264: | Line 171: |
| * Introduce a new system call family to replace one or more of the problematic calls listed above. | ==== Advanced tasks ==== |
| Line 266: | Line 173: |
| Line 268: | Line 176: |
| === Tasks later in the project === | * start migrating the times in 'struct inode' and 'struct 'kstat' to separate 64-bit second + 32-bit nanosecond fields. ==== Tasks later in the project ==== |
| Line 270: | Line 180: |
unfortunately this page got deleted by accident, this version is restored from https://web.archive.org/web/20150318062024/http://kernelnewbies.org/y2038, but most of the formatting is still missing.
The year 2038 problem
All 32-bit kernels to date use a signed 32-bit time_t type, which can only represent time until January 2038. Since embedded systems running 32-bit Linux are going to survive beyond that date, we have to change all current uses, in a backwards compatible way.
User space interfaces
We will likely keep the 32-bit time_t in all user space interfaces that currently use it, but add new interfaces with a 64-bit timespec or another type that can represent later times. Most importantly that impacts system calls, but also specific ioctl commands and a few other interfaces. User space programs have to be recompiled to use the new interfaces, and the policy whether to use the old or the time time is left to the C library. While that policy is a complex topic itself, we don't cover it here.
System calls
System calls have been moved out "y2038/syscalls", that page is rather outdated, newer information is available at https://lwn.net/Articles/643234/
File systems
Each file system stores its file modification times in its own format on disk, and a lot of them have the same problem.
file system |
time type |
expiration year |
9p (9P2000) |
unsigned 32-bit seconds |
2106 |
file system |
time type |
expiration year |
9p (9P2000) |
unsigned 32-bit seconds |
2106 |
9p (9P2000.L) |
signed 64-bit seconds, ns |
never |
adfs |
40-bit cs since 1900 |
2248 |
affs |
u32 days/mins/(secs/50) |
11760870 |
afs |
unsigned 32-bit seconds |
2106 |
befs |
unsigned 48-bit seconds |
never |
bfs |
unsigned 32-bit seconds |
2106 |
btrfs |
signed 64-bit seconds, 32-bit ns |
never |
ceph |
unsigned 32-bit second/ns |
2106 |
cifs (smb) |
7-bit years since 1980 |
2107 |
cifs (modern) |
64-bit 100ns since 1601 |
30328 |
coda |
timespec ioctl |
2038 |
cramfs |
fixed |
1970 |
efs |
unsigned 32-bit seconds |
2106 |
exofs |
signed 32-bit seconds |
2038 |
ext2 |
signed 32-bit seconds |
2038 |
ext3 |
signed 32-bit seconds |
2038 |
ext4 (good old inodes) |
signed 32-bit seconds |
2038 |
ext4 (new inodes |
34 bit seconds / 30-bit ns (but broken) |
2038 |
f2fs |
64-bit seconds / 32-bit ns |
never |
fat |
7-bit years since 1980, 2s resolution |
2107 |
freevxfs |
unsigned 32-bit seconds/u32 microseconds |
2106 |
fuse |
64-bit second/32-bit ns |
never |
gfs2 |
u64 seconds/u32 ns |
never |
hfs |
u32 seconds since 1904 |
2040 |
hfsplus |
u32 seconds since 1904 |
2040 |
hostfs |
timespec |
2038 |
hpfs |
unsigned 32-bit seconds |
2106 |
isofs |
'char' year since 1900 (fixable) |
2028 |
jffs2 |
unsigned 32-bit seconds |
2106 |
jfs |
unsigned 32-bit seconds/ns |
2106 |
logfs |
signed 64-bit ns |
2262 |
minix |
unsigned 32-bit seconds |
2106 |
ncpfs |
7-bit year since 1980 |
2107 |
nfsv2,v3 |
unsigned 32-bit seconds/ns |
2106 |
nfsv4 |
u64 seconds/u32 ns |
never |
nfsd |
unsigned 32-bit seconds/ns |
2106 |
nilfs2 |
u64 seconds/u32 ns |
never |
ntfs |
64-bit 100ns since 1601 |
30828 |
ocfs2 |
34-bit seconds/30-bit ns |
2514 |
omfs |
64-bit milliseconds |
never |
pstore |
ascii seconds |
2106 |
qnx4 |
unsigned 32-bit seconds |
2106 |
qnx6 |
unsigned 32-bit seconds |
2106 |
reiserfs |
unsigned 32-bit seconds |
2106 |
romfs |
fixed |
1970 |
squashfs |
unsigned 32-bit seconds |
2106 |
sysv |
unsigned 32-bit seconds |
2106 |
ubifs |
u64 second/u32 ns |
never |
udf |
u16 year |
2038 |
ufs1 |
unsigned 32-bit seconds |
2106 |
ufs2 |
signed 64-bit seconds/u32 ns |
never |
xfs |
signed 32-bit seconds/ns |
2106 |
Plan
1.Plan for VFS
Milestone |
# of patches |
Status |
Targeted Kernel release |
Infrastructure patches for vfs_time and granularity fields 1.4.1 and 1.4.2 |
2 |
Done |
4.7- rc1 |
Test time ranges beyond y2038 support, in memory timestamps match with on disk -1.3.1 and 1.3.2 |
Xfs tests |
In progress |
5/28/16 |
Replace CURRENT_TIME and CURRENT_TIME_SEC – 1.2.1 |
~60 |
In Progress, waiting for 4.7 rc1 and repost previous. |
4.8 |
Vfs_time patches – 1.4.3 |
~40 |
In Progress, waiting for 4.7-rc1 |
4.8 |
Fill in right granularities and ranges for FS – 1.2.2 and 1.2.3 |
~40 |
Yet to start |
4.8 |
Expose FS granularities and ranges – 1.4.5 and 1.4.6 |
~5 |
Yet to start |
4.8 |
Tests to check the granularities and ranges – 1.3.3 and 1.3.4 |
Xfs tests |
Yet to start |
6/10/16 |
Add policy for wrong granularities - 1.4.7 |
RFC for 4.9 |
Yet to start |
|
Stat and utime changes – 1.4.8 |
RFC for 4.9 |
Yet to start |
|
Tests for I_DIRTY_* flags and mount options -1.3.5 and 1.3.6 |
Xfs tests |
Yet to start |
6/30/16 |
Transition vfs to 64 bit – 1.4.4 |
2 |
Ready, wait for other patches to merge |
4.10 |
1.2 Cleanup
1.2.1 Replace current_time and current_time_sec
1.2.2 Fill in right granularities
1.2.3 Fill in right ranges
1.3 Test
1.3.1 Test time written on disk and in memory are same
1.3.2 Test time ranges beyond y2038
1.3.3 Test time granularities are what the fs needs
1.3.4 Test time ranges supported are same as what fs reports
1.3.5 Perf tests
1.3.6 Test to check i_dirty_* flags are updating correctly
1.3.7 Test to check with different mount options like lazy atime etc.
1.4 Kernel tasks to transition vfs to use 64 bit times
1.4.1 Infrastructure patches for vfs_time approach
1.4.2 Infrastructure patch for vfs granularity fields
1.4.3 Change each fs to use vfs time patches
1.4.4 Change vfs to use timespec64
1.4.5 Expose fs granularities
1.4.6 Expose fs ranges
1.4.7 Add vfs policy for handling wrong ranges and granularity
1.4.8 Stat and utime api changes
1.5 Runtime library
1.5.1 Make changes in one library
1.5.2 Make it part of some userspace and run it
Tasks
The task list is for people that want to get involved, there will be many more tasks over time, so this is just a starting point. In the end, we should remove all instances of 'time_t', 'timespec' and 'timeval' from the kernel.
Trivial tasks
Find a driver using time_t/timespec/timeval internally and convert it to ktime_t/timespec64, examples:
- drivers/firewire/core-cdev.c
- drivers/firewire/nosy.c
- drivers/hv/hv_util.c
- drivers/infiniband/hw/nes/
- drivers/misc/ibmasm/ibmasm.h
- drivers/net/wireless/atmel.c
- drivers/ide/pdc202xx_new.c
- fs/fuse/dir.c
- drivers/scsi/pmcraid.c
Small tasks
Find a driver using time_t/timespec/timeval internally and convert it to ktime_t/timespec64, examples:
- drivers/block/sx8.c
- drivers/char/ipmi/ipmi_ssif.c
- drivers/char/mmtimer.c
- drivers/cpufreq/speedstep-lib.c
- drivers/hsi/clients/cmt_speech.c
- drivers/media/platform/vivid/
- drivers/net/hamradio/baycom_ser_fdx.c
Medium tasks
- Modify an ioctl interface in a driver to support both 32- and 64-bit time interfaces, examples:
- drivers/usb/misc/usbtest.c
- Convert the internal timekeeping in fs/nfsd
- Convert all 'struct key' users (time_t)
- fix all uses of timeval in drivers/scsi/bfa
Advanced tasks
- Change the on-disk layout of a broken file system to optionally support longer time stamps
- Port a small C library (uClibc, newlib, ...) to optionally use 64-bit time_t and build an embedded distribution (openembedded, openwrt, buildroot, ...) with this.
- start migrating the times in 'struct inode' and 'struct 'kstat' to separate 64-bit second + 32-bit nanosecond fields.
Tasks later in the project
- Hook up all 32-bit architectures to use the new system calls
- Introduce a Kconfig symbol to disable all code that has not yet been converted at compile time.