summaryrefslogtreecommitdiff
path: root/kern/task.c
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2025-09-21 09:14:04 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2025-09-21 18:46:09 +0200
commitc33f27196d9cb072d48bf5389bb64ad99a0d735a (patch)
treeaf845d5d8325378677d1c9583356c3e16d57d1b8 /kern/task.c
parent8d456cd9e417e9787481df15736b5f1c55cbc870 (diff)
mach_clock: Fix monotonic clock sometimes going backwards
Between reading mtime and reading hpclock_read_counter, there may be an interrupt that updates mtime, therefore we need a check to perform the clock read process again in this case. TESTED: on UP using: ``` \#include <stdio.h> \#include <time.h> int main() { struct timespec ts, now; int i; int cnt = 0; clock_gettime(CLOCK_MONOTONIC, &ts); for (i = 0; i < 10000000; i++) { clock_gettime(CLOCK_MONOTONIC, &now); if ((now.tv_nsec < ts.tv_nsec) && (now.tv_sec <= ts.tv_sec)) { printf("BACKWARDS\n"); cnt++; printf(" %u %09lu\n %u %09lu\n\n", ts.tv_sec, ts.tv_nsec, now.tv_sec, now.tv_nsec ); } ts = now; } printf("went backwards %d out of %d times\n", cnt, i); return 0; } ``` Before the change, some backward transitions were detected. After this change, none were detected. Message-ID: <20250921091345.2183347-1-damien@zamaudio.com>
Diffstat (limited to 'kern/task.c')
0 files changed, 0 insertions, 0 deletions