ata: Use 64-bit timekeeping
PATCH v3 1/1 ata: 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.
---
Changes in v3:
- Switch back to usec_elapsed being a 'long'.
Changes in v2:
- Switch from timespec64 to ktime_t - more efficient.
- Use ktime_us_delta to get usec_elapsed, it is more efficient than manual computation of usecs from timespec64.
--- drivers/ata/pata_pdc2027x.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/ata/pata_pdc2027x.c +5 -5
@@ -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);
Signature · 1 line
2.2.0.rc0.207.ga3a616c
Quoted 8 lines · On Tuesday 27 January 2015 15:49:48 Tina Ruchandani wrote:
Function
pdc_detect_pll_input_clockuses 'struct timeval' to measure start and end times, used to compute thepll_clockvalue. 'struct timeval' on 32-bit systems will have itstv_secfield 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 <[email protected]>Signed-off-by Tina Ruchandani <[email protected]>
Looks great,
Tejun Heo
AppliedQuoted 8 lines · Tina Ruchandani
Function
pdc_detect_pll_input_clockuses 'struct timeval' to measure start and end times, used to compute thepll_clockvalue. 'struct timeval' on 32-bit systems will have itstv_secfield 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 <[email protected]>Signed-off-by Tina Ruchandani <[email protected]>
Applied to libata/for-3.20 w/ subject updated to indicate that its scope is pata_pdc2027x.
Thanks.
Signature · 1 line
tejun