pata_pdc2027x: Use 64-bit timekeeping
authorTina Ruchandani <ruchandani.tina@gmail.com>
Tue, 27 Jan 2015 10:19:48 +0000 (15:49 +0530)
committerTejun Heo <tj@kernel.org>
Tue, 27 Jan 2015 16:06:19 +0000 (11:06 -0500)
Function pdc_detect_pll_input_clock uses 'struct timeval'
to measure start and end times, used to compute the pll_clock value.
'struct timeval' on 32-bit systems will have its tv_sec field
overflow in year 2038 and beyond. This patch uses 'ktime_t'
(which uses 64 bits for seconds) for start and end times instead.

Suggested-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Tina Ruchandani <ruchandani.tina@gmail.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Tejun Heo <tj@kernel.org>
drivers/ata/pata_pdc2027x.c

index 4d06a5cda987a7e5233d37d094957ef8369afc96..dca8251b1aeaed1fd38769f9a8e118d3b4357da5 100644 (file)
@@ -28,6 +28,7 @@
 #include <linux/blkdev.h>
 #include <linux/delay.h>
 #include <linux/device.h>
+#include <linux/ktime.h>
 #include <scsi/scsi.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_cmnd.h>
@@ -605,7 +606,7 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
        void __iomem *mmio_base = host->iomap[PDC_MMIO_BAR];
        u32 scr;
        long start_count, end_count;
-       struct timeval start_time, end_time;
+       ktime_t start_time, end_time;
        long pll_clock, usec_elapsed;
 
        /* Start the test mode */
@@ -616,14 +617,14 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
 
        /* Read current counter value */
        start_count = pdc_read_counter(host);
-       do_gettimeofday(&start_time);
+       start_time = ktime_get();
 
        /* Let the counter run for 100 ms. */
        mdelay(100);
 
        /* Read the counter values again */
        end_count = pdc_read_counter(host);
-       do_gettimeofday(&end_time);
+       end_time = ktime_get();
 
        /* Stop the test mode */
        scr = ioread32(mmio_base + PDC_SYS_CTL);
@@ -632,8 +633,7 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
        ioread32(mmio_base + PDC_SYS_CTL); /* flush */
 
        /* calculate the input clock in Hz */
-       usec_elapsed = (end_time.tv_sec - start_time.tv_sec) * 1000000 +
-               (end_time.tv_usec - start_time.tv_usec);
+       usec_elapsed = (long) ktime_us_delta(end_time, start_time);
 
        pll_clock = ((start_count - end_count) & 0x3fffffff) / 100 *
                (100000000 / usec_elapsed);