Commit cedda4c3 authored by Tina Ruchandani's avatar Tina Ruchandani Committed by Tejun Heo

pata_pdc2027x: Use 64-bit timekeeping

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: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarTina Ruchandani <ruchandani.tina@gmail.com>
Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 55294150
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <linux/blkdev.h> #include <linux/blkdev.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/ktime.h>
#include <scsi/scsi.h> #include <scsi/scsi.h>
#include <scsi/scsi_host.h> #include <scsi/scsi_host.h>
#include <scsi/scsi_cmnd.h> #include <scsi/scsi_cmnd.h>
...@@ -605,7 +606,7 @@ static long pdc_detect_pll_input_clock(struct ata_host *host) ...@@ -605,7 +606,7 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
void __iomem *mmio_base = host->iomap[PDC_MMIO_BAR]; void __iomem *mmio_base = host->iomap[PDC_MMIO_BAR];
u32 scr; u32 scr;
long start_count, end_count; long start_count, end_count;
struct timeval start_time, end_time; ktime_t start_time, end_time;
long pll_clock, usec_elapsed; long pll_clock, usec_elapsed;
/* Start the test mode */ /* Start the test mode */
...@@ -616,14 +617,14 @@ static long pdc_detect_pll_input_clock(struct ata_host *host) ...@@ -616,14 +617,14 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
/* Read current counter value */ /* Read current counter value */
start_count = pdc_read_counter(host); start_count = pdc_read_counter(host);
do_gettimeofday(&start_time); start_time = ktime_get();
/* Let the counter run for 100 ms. */ /* Let the counter run for 100 ms. */
mdelay(100); mdelay(100);
/* Read the counter values again */ /* Read the counter values again */
end_count = pdc_read_counter(host); end_count = pdc_read_counter(host);
do_gettimeofday(&end_time); end_time = ktime_get();
/* Stop the test mode */ /* Stop the test mode */
scr = ioread32(mmio_base + PDC_SYS_CTL); scr = ioread32(mmio_base + PDC_SYS_CTL);
...@@ -632,8 +633,7 @@ static long pdc_detect_pll_input_clock(struct ata_host *host) ...@@ -632,8 +633,7 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
ioread32(mmio_base + PDC_SYS_CTL); /* flush */ ioread32(mmio_base + PDC_SYS_CTL); /* flush */
/* calculate the input clock in Hz */ /* calculate the input clock in Hz */
usec_elapsed = (end_time.tv_sec - start_time.tv_sec) * 1000000 + usec_elapsed = (long) ktime_us_delta(end_time, start_time);
(end_time.tv_usec - start_time.tv_usec);
pll_clock = ((start_count - end_count) & 0x3fffffff) / 100 * pll_clock = ((start_count - end_count) & 0x3fffffff) / 100 *
(100000000 / usec_elapsed); (100000000 / usec_elapsed);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment