one problem i've seen in kern_tc.c when the timecounter returns a smaller value is that tc_delta() ends up returning a very large (underflowed) value, and that makes the consumers of it do a very wrong thing. eg, -2 becomes 2^32-2, and then eg in binuptime:
477 bintime_addx(bt, th->th_scale * tc_delta(th)); or in tc_windup(): 933 delta = tc_delta(th); 938 th->th_offset_count += delta; 939 bintime_addx(&th->th_offset, th->th_scale * delta); i "fixed" the time goes backwards on sparc issue a few years ago with this change, which avoids the above issue: http://mail-index.netbsd.org/source-changes/2018/01/12/msg091064.html but i really think that the way tc_delta() can underflow is a bad problem we should fix properly, i just wasn't sure of the right way to do it. .mrg.