On some arm64 machines, the agtimer(4) ticks slowly enough that the tc_delta() doesn't overflow across brief suspends. While working on arm64 suspend/resume, kettenis@ has been seeing warnings like this during resume:
tc_setclock: cannot rewind uptime to 307.253324249 The warning is misleading and should be removed. The code is behaving as intended, but in a way I didn't anticipate when I added the warning a few years ago. It might be useful print a warning in inittodr(9) during resume if the RTC time predates the system UTC suspend timestamp, but that's a distinct concern. ok? Index: kern_tc.c =================================================================== RCS file: /cvs/src/sys/kern/kern_tc.c,v retrieving revision 1.78 diff -u -p -r1.78 kern_tc.c --- kern_tc.c 18 Sep 2022 20:47:09 -0000 1.78 +++ kern_tc.c 8 Nov 2022 11:53:01 -0000 @@ -552,7 +552,6 @@ void tc_setclock(const struct timespec *ts) { struct bintime new_naptime, old_naptime, uptime, utc; - struct timespec tmp; static int first = 1; #ifndef SMALL_KERNEL struct bintime elapsed; @@ -582,12 +581,6 @@ tc_setclock(const struct timespec *ts) new_naptime = timehands->th_naptime; mtx_leave(&windup_mtx); - - if (bintimecmp(&old_naptime, &new_naptime, ==)) { - BINTIME_TO_TIMESPEC(&uptime, &tmp); - printf("%s: cannot rewind uptime to %lld.%09ld\n", - __func__, (long long)tmp.tv_sec, tmp.tv_nsec); - } #ifndef SMALL_KERNEL /* convert the bintime to ticks */