PM: Use 64-bit timekeeping
Subsystems (2)
PATCH v2 1/1 PM: Use 64-bit timekeeping
The freezer try_to_freeze_tasks uses 'struct timeval' for start and end times, tracking time taken to freeze tasks. 'struct timeval' on 32-bit systems will have its tv_sec overflow in year 2038 and beyond. This patches uses 'ktime_t' (which has 64 bit values for seconds) for start and end time.
---
Changes in v2:
- Use ktime_t to be able to use ktime_ms_delta which is more efficient than timespec64 based methods.
--- kernel/power/process.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)
kernel/power/process.c +5 -7
@@ -17,6 +17,7 @@#include <linux/delay.h> #include <linux/workqueue.h> #include <linux/kmod.h> +#include <linux/ktime.h> #include <trace/events/power.h> /*
@@ -30,13 +31,12 @@ static int try_to_freeze_tasks(bool user_only)unsigned long end_time;unsigned int todo;bool wq_busy = false; -struct timeval start, end; -u64 elapsed_msecs64; +ktime_t start, end;unsigned int elapsed_msecs;bool wakeup = false;int sleep_usecs =USEC_PER_MSEC ; -do_gettimeofday (&start); + start =ktime_get (); end_time = jiffies +msecs_to_jiffies (freeze_timeout_msecs);
@@ -78,10 +78,8 @@ static int try_to_freeze_tasks(bool user_only) sleep_usecs *=2 ; } -do_gettimeofday (&end); - elapsed_msecs64 =timeval_to_ns (&end) -timeval_to_ns (&start); -do_div (elapsed_msecs64,NSEC_PER_MSEC ); - elapsed_msecs = elapsed_msecs64; + end =ktime_get (); + elapsed_msecs = (unsigned int )ktime_ms_delta (end, start);if (todo) {printk ("\n" );
Signature · 1 line
2.2.0.rc0.207.ga3a616c
Quoted 8 lines · Tina Ruchandani
The freezer
try_to_freeze_tasksuses 'struct timeval' for start and end times, tracking time taken to freeze tasks. 'struct timeval' on 32-bit systems will have itstv_secoverflow in year 2038 and beyond. This patches uses 'ktime_t' (which has 64 bit values for seconds) for start and end time.Suggested-by Arnd Bergmann <[email protected]>Signed-off-by Tina Ruchandani <[email protected]>
Nicer code, and without the overflow. Thanks!
Quoted 13 lines
---
Changes in v2:
- Usektime_tto be able to usektime_ms_deltawhich is more efficient than timespec64 based methods.--- kernel/power/process.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)kernel/power/process.c +0
-0
kernel/power/process.c line 21
Quoted 5 lines
kernel/power/process.c +1
-0@@ -17,6 +17,7 @@#include <linux/delay.h> #include <linux/workqueue.h> #include <linux/kmod.h> +#include <linux/ktime.h> #include <trace/events/power.h>
x>
Quoted 30 lines
kernel/power/process.c +4
-7/* @@ -30,13 +31,12 @@ static int try_to_freeze_tasks(bool user_only)unsigned long end_time;unsigned int todo;bool wq_busy = false; -struct timeval start, end; -u64 elapsed_msecs64; +ktime_t start, end;unsigned int elapsed_msecs;bool wakeup = false;int sleep_usecs =USEC_PER_MSEC ; -do_gettimeofday (&start); + start =ktime_get (); end_time = jiffies +msecs_to_jiffies (freeze_timeout_msecs);@@ -78,10 +78,8 @@ static int try_to_freeze_tasks(bool user_only) sleep_usecs *=2 ; } -do_gettimeofday (&end); - elapsed_msecs64 =timeval_to_ns (&end) -timeval_to_ns (&start); -do_div (elapsed_msecs64,NSEC_PER_MSEC ); - elapsed_msecs = elapsed_msecs64; + end =ktime_get (); + elapsed_msecs = (unsigned int )ktime_ms_delta (end, start);if (todo) {printk ("\n" );
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html