Module Name: src Committed By: snj Date: Sun Oct 4 00:31:52 UTC 2009
Modified Files: src/sys/arch/atari/dev [netbsd-5]: clock.c Log Message: Pull up following revision(s) (requested by tsutsui in ticket #1057): sys/arch/atari/dev/clock.c: revision 1.47 Add a workaround for annoying "WARNING: negative runtime; monotonic clock has gone backwards" message. Partially taken from hp300. To generate a diff of this commit: cvs rdiff -u -r1.41.6.1 -r1.41.6.2 src/sys/arch/atari/dev/clock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/atari/dev/clock.c diff -u src/sys/arch/atari/dev/clock.c:1.41.6.1 src/sys/arch/atari/dev/clock.c:1.41.6.2 --- src/sys/arch/atari/dev/clock.c:1.41.6.1 Thu Nov 6 00:15:55 2008 +++ src/sys/arch/atari/dev/clock.c Sun Oct 4 00:31:52 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: clock.c,v 1.41.6.1 2008/11/06 00:15:55 snj Exp $ */ +/* $NetBSD: clock.c,v 1.41.6.2 2009/10/04 00:31:52 snj Exp $ */ /* * Copyright (c) 1982, 1990 The Regents of the University of California. @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.41.6.1 2008/11/06 00:15:55 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.41.6.2 2009/10/04 00:31:52 snj Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -319,21 +319,29 @@ static u_int clk_getcounter(struct timecounter *tc) { - u_int delta; - u_char ipra, tadr; - int s, cur_hardclock; + uint32_t delta, count, cur_hardclock; + uint8_t ipra, tadr; + int s; + static uint32_t lastcount; s = splhigh(); + cur_hardclock = hardclock_ticks; ipra = MFP->mf_ipra; tadr = MFP->mf_tadr; delta = divisor - tadr; if (ipra & IA_TIMA) delta += divisor; - cur_hardclock = hardclock_ticks; splx(s); - return (divisor - tadr) + divisor * cur_hardclock; + count = (divisor * cur_hardclock) + delta; + if ((int32_t)(count - lastcount) < 0) { + /* XXX wrapped; maybe hardclock() is blocked more than 2/HZ */ + count = lastcount + 1; + } + lastcount = count; + + return count; } #define TIMB_FREQ 614400