summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_synch.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_synch.c')
-rw-r--r--sys/kern/kern_synch.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c
index 597f5e6..16699e0 100644
--- a/sys/kern/kern_synch.c
+++ b/sys/kern/kern_synch.c
@@ -791,8 +791,15 @@ mi_switch()
* process was running, and add that to its total so far.
*/
microuptime(&new_switchtime);
- p->p_runtime += (new_switchtime.tv_usec - switchtime.tv_usec) +
- (new_switchtime.tv_sec - switchtime.tv_sec) * (int64_t)1000000;
+ if (timevalcmp(&new_switchtime, &switchtime, <)) {
+ printf("microuptime() went backwards (%ld.%06ld -> %ld,%06ld)\n",
+ switchtime.tv_sec, switchtime.tv_usec,
+ new_switchtime.tv_sec, new_switchtime.tv_usec);
+ new_switchtime = switchtime;
+ } else {
+ p->p_runtime += (new_switchtime.tv_usec - switchtime.tv_usec) +
+ (new_switchtime.tv_sec - switchtime.tv_sec) * (int64_t)1000000;
+ }
/*
* Check if the process exceeds its cpu resource allocation.
OpenPOWER on IntegriCloud