struct timeval tv is used to get current time. 32-bit systems using 'struct timeval' will break in the year 2038, so we have to replace that code with more appropriate types.
Signed-off-by: Ksenija Stanojevic ksenija.stanojevic@gmail.com --- Changes in v3: - introduce temporary variable tv_usec.
Changes in v2: - use functions that uses real time clock. - do not change interface by removing timeval_buf.
drivers/staging/rts5208/rtsx.h | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/drivers/staging/rts5208/rtsx.h b/drivers/staging/rts5208/rtsx.h index 9e6ecb7..f768fc0 100644 --- a/drivers/staging/rts5208/rtsx.h +++ b/drivers/staging/rts5208/rtsx.h @@ -37,7 +37,7 @@ #include <linux/cdrom.h> #include <linux/workqueue.h> #include <linux/timer.h> -#include <linux/time.h> +#include <linux/time64.h>
#include <scsi/scsi.h> #include <scsi/scsi_cmnd.h> @@ -151,21 +151,24 @@ static inline struct rtsx_dev *host_to_rtsx(struct Scsi_Host *host)
static inline void get_current_time(u8 *timeval_buf, int buf_len) { - struct timeval tv; + struct timespec64 ts64; + u32 tv_usec;
if (!timeval_buf || (buf_len < 8)) return;
- do_gettimeofday(&tv); + getnstimeofday64(&ts64);
- timeval_buf[0] = (u8)(tv.tv_sec >> 24); - timeval_buf[1] = (u8)(tv.tv_sec >> 16); - timeval_buf[2] = (u8)(tv.tv_sec >> 8); - timeval_buf[3] = (u8)(tv.tv_sec); - timeval_buf[4] = (u8)(tv.tv_usec >> 24); - timeval_buf[5] = (u8)(tv.tv_usec >> 16); - timeval_buf[6] = (u8)(tv.tv_usec >> 8); - timeval_buf[7] = (u8)(tv.tv_usec); + tv_usec = ts64.tv_nsec/NSEC_PER_USEC; + + timeval_buf[0] = (u8)(ts64.tv_sec >> 24); + timeval_buf[1] = (u8)(ts64.tv_sec >> 16); + timeval_buf[2] = (u8)(ts64.tv_sec >> 8); + timeval_buf[3] = (u8)(ts64.tv_sec); + timeval_buf[4] = (u8)(tv_usec >> 24); + timeval_buf[5] = (u8)(tv_usec >> 16); + timeval_buf[6] = (u8)(tv_usec >> 8); + timeval_buf[7] = (u8)(tv_usec); }
/* The scsi_lock() and scsi_unlock() macros protect the sm_state and the
On Wednesday 29 April 2015 20:23:06 Ksenija Stanojevic wrote:
struct timeval tv is used to get current time. 32-bit systems using 'struct timeval' will break in the year 2038, so we have to replace that code with more appropriate types.
Signed-off-by: Ksenija Stanojevic ksenija.stanojevic@gmail.com
Looks good, thanks a lot!
Reviewed-by: Arnd Bergmann arnd@arndb.de
I suggest you send it to Greg so he can apply it to the staging tree, with the appropriate maintainers (Micky Ching) and mailing lists (linux-kernel, linux-scsi, and devel@driverdev.osuosl.org) on Cc, in addition to this list.
I can also pick up the patch into the y2038 tree, but as this is completely standalone, using the staging tree should work best.
Arnd
Hi Arnd,
On Wed, Apr 29, 2015 at 8:29 PM, Arnd Bergmann arnd@arndb.de wrote:
On Wednesday 29 April 2015 20:23:06 Ksenija Stanojevic wrote:
struct timeval tv is used to get current time. 32-bit systems using 'struct timeval' will break in the year 2038, so we have to replace that code with more appropriate types.
Signed-off-by: Ksenija Stanojevic ksenija.stanojevic@gmail.com
Looks good, thanks a lot!
Reviewed-by: Arnd Bergmann arnd@arndb.de
I suggest you send it to Greg so he can apply it to the staging tree, with the appropriate maintainers (Micky Ching) and mailing lists (linux-kernel, linux-scsi, and devel@driverdev.osuosl.org) on Cc, in addition to this list.
Ok. I will.
Thanks, Ksenija