This patch replaces timeval with timespec64 as 32 bit 'struct timeval' will not give current time beyond 2038.
The patch changes the code to use ktime_get_real_ts64() which returns a 'struct timespec64' instead of do_gettimeofday() which returns a 'struct timeval'
This patch also alters the format strings in sprintf() for now.tv_sec and now.tv_nsec to incorporate 'long long' on 32 bit architectures and leading zeroes respectively.
Signed-off-by: Amitoj Kaur Chawla amitoj1606@gmail.com Reviewed-by: Arnd Bergmann arnd@arndb.de --- Changes in v2: -change format string of now.tv_sec to '%llu' -change format string of now.tv_nsec to '%.08lu' Changes in v3: -Replace tv_usec with tv_nsec, error made in v2 -Build tested
drivers/misc/ibmasm/ibmasm.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/misc/ibmasm/ibmasm.h b/drivers/misc/ibmasm/ibmasm.h index 9b08344..82380ae 100644 --- a/drivers/misc/ibmasm/ibmasm.h +++ b/drivers/misc/ibmasm/ibmasm.h @@ -34,6 +34,7 @@ #include <linux/kref.h> #include <linux/device.h> #include <linux/input.h> +#include <linux/time64.h>
/* Driver identification */ #define DRIVER_NAME "ibmasm" @@ -53,9 +54,10 @@ extern int ibmasm_debug;
static inline char *get_timestamp(char *buf) { - struct timeval now; - do_gettimeofday(&now); - sprintf(buf, "%lu.%lu", now.tv_sec, now.tv_usec); + struct timespec64 now; + ktime_get_real_ts64(&now); + sprintf(buf, "%llu.%.08lu", (long long)now.tv_sec, + now.tv_nsec / NSEC_PER_USEC); return buf; }