diff options
author | kato <kato@FreeBSD.org> | 1998-09-20 10:51:57 +0000 |
---|---|---|
committer | kato <kato@FreeBSD.org> | 1998-09-20 10:51:57 +0000 |
commit | a76c8c6ae1558c4bbe5f4bdc9a98702c748296ac (patch) | |
tree | 1af31e8a64df80fa53046cb68e0394c24dd45ce0 /sys/pc98/cbus/pcrtc.c | |
parent | 3b8daf20497185925f4c8ffcb583564927acab26 (diff) | |
download | FreeBSD-src-a76c8c6ae1558c4bbe5f4bdc9a98702c748296ac.zip FreeBSD-src-a76c8c6ae1558c4bbe5f4bdc9a98702c748296ac.tar.gz |
Sync with sys/i386/isa/clock.c revision 1.126.
Diffstat (limited to 'sys/pc98/cbus/pcrtc.c')
-rw-r--r-- | sys/pc98/cbus/pcrtc.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/sys/pc98/cbus/pcrtc.c b/sys/pc98/cbus/pcrtc.c index aa031e1..0663abe 100644 --- a/sys/pc98/cbus/pcrtc.c +++ b/sys/pc98/cbus/pcrtc.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)clock.c 7.2 (Berkeley) 5/12/91 - * $Id: clock.c,v 1.58 1998/06/10 08:25:23 kato Exp $ + * $Id: clock.c,v 1.59 1998/09/08 09:47:46 kato Exp $ */ /* @@ -223,11 +223,26 @@ SYSCTL_OPAQUE(_debug, OID_AUTO, i8254_timecounter, CTLFLAG_RD, static void clkintr(struct clockframe frame) { - if (!i8254_ticked) - i8254_offset += timer0_max_count; - else - i8254_ticked = 0; - i8254_lastcount = 0; + if (timecounter->tc_get_timecount == i8254_get_timecount) { + /* + * Maintain i8254_offset and related variables. Optimize + * the usual case where i8254 counter rollover has not been + * detected in i8254_get_timecount() by pretending that we + * read the counter when it rolled over. Otherwise, call + * i8254_get_timecount() to do most of the work. The + * hardware counter must be read to ensure monotonicity + * despite multiple rollovers and misbehaving hardware. + */ + disable_intr(); + if (i8254_ticked) { + i8254_get_timecount(NULL); + i8254_ticked = 0; + } else { + i8254_offset += timer0_max_count; + i8254_lastcount = 0; + } + enable_intr(); + } timer_func(&frame); switch (timer0_state) { |