From: Tina Ruchandani ruchandani.tina@gmail.com Date: Wed, 27 May 2015 06:52:12 +0530
'struct timeval' uses 32-bit representation for seconds which will overflow in year 2038 and beyond. mISDN/clock.c needs to compute and store elapsed time in intervals of 125 microseconds. This patch replaces the usage of 'struct timeval' with 64-bit ktime_t which is y2038 safe. The patch also replaces do_gettimeofday() (wall-clock time) with ktime_get() (monotonic time) since we only care about elapsed time here.
Signed-off-by: Tina Ruchandani ruchandani.tina@gmail.com Suggested-by: Arnd Bergmnann arnd@arndb.de
This doesn't compile:
CC [M] drivers/isdn/mISDN/clock.o In file included from include/linux/timer.h:5:0, from include/linux/workqueue.h:8, from include/linux/srcu.h:34, from include/linux/notifier.h:15, from include/linux/memory_hotplug.h:6, from include/linux/mmzone.h:789, from include/linux/gfp.h:5, from include/linux/slab.h:14, from drivers/isdn/mISDN/clock.c:36: drivers/isdn/mISDN/clock.c: In function ‘mISDN_clock_update’: drivers/isdn/mISDN/clock.c:175:10: error: ‘NS_PER_SEC’ undeclared (first use in this function) (NS_PER_SEC / 8000)); ^ include/linux/ktime.h:181:51: note: in definition of macro ‘ktime_divns’ # define ktime_divns(kt, div) (u64)((kt).tv64 / (div)) ^ drivers/isdn/mISDN/clock.c:175:10: note: each undeclared identifier is reported only once for each function it appears in (NS_PER_SEC / 8000)); ^ include/linux/ktime.h:181:51: note: in definition of macro ‘ktime_divns’ # define ktime_divns(kt, div) (u64)((kt).tv64 / (div)) ^ drivers/isdn/mISDN/clock.c: In function ‘mISDN_clock_get’: drivers/isdn/mISDN/clock.c:199:53: error: ‘NS_PER_SEC’ undeclared (first use in this function) delta = ktime_divns(ktime_sub(tv_now, iclock_tv), (NS_PER_SEC / 8000)); ^ include/linux/ktime.h:181:51: note: in definition of macro ‘ktime_divns’ # define ktime_divns(kt, div) (u64)((kt).tv64 / (div))