From 9a9eec6c149c98f14df3678c7ccefbef633a62b7 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Wed, 21 Jun 2000 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2000-06-21 --- pc/fns.h | 1 + pc/i8253.c | 9 ++++++++- port/tod.c | 12 ++++++------ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/pc/fns.h b/pc/fns.h index 4fa350c26c11f6b1bac7107c14b7850b23dfe281..bc16f44acde74b8b3c0e794a3ee3043f3f112fe8 100644 --- a/pc/fns.h +++ b/pc/fns.h @@ -59,6 +59,7 @@ void kbdinit(void); void lgdt(ushort[3]); void lidt(ushort[3]); void links(void); +void loopbackintr(void); void ltr(ulong); void mathinit(void); void meminit(ulong); diff --git a/pc/i8253.c b/pc/i8253.c index 4e87537bac684d96367fdb896a69eefd0b50bb87..6ae80cf3d8fda27d31e2f86f3e966aa7de829a33 100644 --- a/pc/i8253.c +++ b/pc/i8253.c @@ -124,10 +124,17 @@ i8253init(int aalcycles, int havecycleclock) } } +static void +clockintr0(Ureg* ureg, void *v) +{ + loopbackintr(); + clockintr(ureg, v); +} + void i8253enable(void) { - intrenable(IrqCLOCK, clockintr, 0, BUSUNKNOWN, "clock"); + intrenable(IrqCLOCK, clockintr0, 0, BUSUNKNOWN, "clock"); } /* diff --git a/port/tod.c b/port/tod.c index 9b7b1b4bee3a7032a8ced2938ab050db7b91cf42..85b42ceb8ce255a8766bfc298c5c0ac9d7a88736 100644 --- a/port/tod.c +++ b/port/tod.c @@ -141,18 +141,18 @@ todget(vlong *ticksp) } // -// called every clock tick +// called every clock tick to avoid calculation overflows // void todfix(void) { - static ulong last; + vlong ticks, diff; + + ticks = fastticks(nil); - // once a second, make sure we don't overflow - if(MACHP(0)->ticks - last >= HZ){ - last = MACHP(0)->ticks; + diff = ticks - tod.last; + if(diff > tod.hz) todget(nil); - } } long