## diffname carrera/clock.c 1993/0903 ## diff -e /dev/null /n/fornaxdump/1993/0903/sys/src/brazil/carrera/clock.c 0a #include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "io.h" #include "ureg.h" /* * delay for l milliseconds more or less. delayloop is set by * clockinit() to match the actual CPU speed. */ void delay(int l) { ulong i, j; j = m->delayloop; while(l-- > 0) for(i=0; i < j; i++) ; } void clockinit(void) { long x; m->delayloop = m->speed*100; do { x = rdcount(); delay(10); x = rdcount() - x; } while(x < 0); /* * fix count */ m->delayloop = (m->delayloop*m->speed*1000*10)/x; if(m->delayloop == 0) m->delayloop = 1; wrcompare(rdcount()+(m->speed*1000000)/HZ); } void clock(Ureg *ur) { Proc *p; int i, nrun; wrcompare(rdcount()+(m->speed*1000000)/HZ); m->ticks++; if(m->proc) m->proc->pc = ur->pc; nrun = 0; if(m->machno == 0) { p = m->proc; if(p) { nrun++; p->time[p->insyscall]++; } for(i=1; iproc; if(p) { p->time[p->insyscall]++; nrun++; } } } nrun = (nrdy+nrun)*1000; m->load = (m->load*19+nrun)/20; } kmapinval(); if((active.machs&(1<machno)) == 0) return; if(active.exiting && (active.machs & (1<machno))) { print("someone's exiting\n"); exit(0); } checkalarms(); if(up == 0 || (ur->status&IE) == 0 || up->state != Running) return; if(anyready()) sched(); /**/ /* user profiling clock */ if(ur->status & KUSER) (*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1); } . ## diffname carrera/clock.c 1993/0904 ## diff -e /n/fornaxdump/1993/0903/sys/src/brazil/carrera/clock.c /n/fornaxdump/1993/0904/sys/src/brazil/carrera/clock.c 95c sched(); . ## diffname carrera/clock.c 1993/1003 ## diff -e /n/fornaxdump/1993/0904/sys/src/brazil/carrera/clock.c /n/fornaxdump/1993/1003/sys/src/brazil/carrera/clock.c 89a mouseclock(); . ## diffname carrera/clock.c 1993/1224 ## diff -e /n/fornaxdump/1993/1003/sys/src/brazil/carrera/clock.c /n/fornaxdump/1993/1224/sys/src/brazil/carrera/clock.c 78a kproftimer(ur->pc); . ## diffname carrera/clock.c 1994/0309 ## diff -e /n/fornaxdump/1993/1224/sys/src/brazil/carrera/clock.c /n/fornaxdump/1994/0309/sys/src/brazil/carrera/clock.c 78a ifjab(); . ## diffname carrera/clock.c 1994/0817 ## diff -e /n/fornaxdump/1994/0309/sys/src/brazil/carrera/clock.c /n/fornaxdump/1994/0817/sys/src/brazil/carrera/clock.c 96c if(up == 0 || up->state != Running) . ## diffname carrera/clock.c 1994/0902 ## diff -e /n/fornaxdump/1994/0817/sys/src/brazil/carrera/clock.c /n/fornaxdump/1994/0902/sys/src/brazil/carrera/clock.c 93a uartclock(); . ## diffname carrera/clock.c 1995/0104 ## diff -e /n/fornaxdump/1994/0902/sys/src/brazil/carrera/clock.c /n/fornaxdump/1995/0104/sys/src/brazil/carrera/clock.c 59,77c accounttime(); . 50,52d ## diffname carrera/clock.c 1995/0108 ## diff -e /n/fornaxdump/1995/0104/sys/src/brazil/carrera/clock.c /n/fornaxdump/1995/0108/sys/src/brazil/carrera/clock.c 79,80c if(anyready()) { n = up->inlock; if(n == 0) sched(); else up->inlock = n-1; } . 49a int n; . ## diffname carrera/clock.c 1995/0109 ## diff -e /n/fornaxdump/1995/0108/sys/src/brazil/carrera/clock.c /n/fornaxdump/1995/0109/sys/src/brazil/carrera/clock.c 81,87c if(anyready() && !up->inlock) sched(); . ## diffname carrera/clock.c 1995/0110 ## diff -e /n/fornaxdump/1995/0109/sys/src/brazil/carrera/clock.c /n/fornaxdump/1995/0110/sys/src/brazil/carrera/clock.c 81c if(anyready()) . 50d ## diffname carrera/clock.c 1995/1011 ## diff -e /n/fornaxdump/1995/0110/sys/src/brazil/carrera/clock.c /n/fornaxdump/1995/1011/sys/src/brazil/carrera/clock.c 75a randomclock(); . ## diffname carrera/clock.c 1996/0303 ## diff -e /n/fornaxdump/1995/1011/sys/src/brazil/carrera/clock.c /n/fornaxdump/1996/0303/sys/src/brazil/carrera/clock.c 85,86c if(ur->status & KUSER) { (*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1); segclock(ur->pc); } . 49a int l; Segment *s; . ## diffname carrera/clock.c 1996/0315 ## diff -e /n/fornaxdump/1996/0303/sys/src/brazil/carrera/clock.c /n/fornaxdump/1996/0315/sys/src/brazil/carrera/clock.c 50,52d ## diffname carrera/clock.c 1997/0117 ## diff -e /n/fornaxdump/1996/0315/sys/src/brazil/carrera/clock.c /n/fornaxdump/1997/0117/sys/src/brazil/carrera/clock.c 59c */ . 57c /* . ## diffname carrera/clock.c 1997/0327 ## diff -e /n/fornaxdump/1997/0117/sys/src/brazil/carrera/clock.c /n/emeliedump/1997/0327/sys/src/brazil/carrera/clock.c 73,75c if(m->machno == 0){ lock(&clock0lock); for(lp = clock0link; lp; lp = lp->link) lp->clock(); unlock(&clock0lock); } . 61a if(kproftimer != nil) kproftimer(ur->pc); . 57,60d 49a Clock0link *lp; . 9a void (*kproftimer)(ulong); typedef struct Clock0link Clock0link; typedef struct Clock0link { void (*clock)(void); Clock0link* link; } Clock0link; static Clock0link *clock0link; static Lock clock0lock; void addclock0link(void (*clock)(void)) { Clock0link *lp; if((lp = malloc(sizeof(Clock0link))) == 0){ print("addclock0link: too many links\n"); return; } ilock(&clock0lock); lp->clock = clock; lp->link = clock0link; clock0link = lp; iunlock(&clock0lock); } . ## diffname carrera/clock.c 1998/0721 ## diff -e /n/emeliedump/1997/0327/sys/src/brazil/carrera/clock.c /n/emeliedump/1998/0721/sys/src/brazil/carrera/clock.c 119a uvlong fastticks(uvlong *hz) { if(hz) *hz = HZ; return m->ticks; } . ## diffname carrera/clock.c 1998/0725 ## diff -e /n/emeliedump/1998/0721/sys/src/brazil/carrera/clock.c /n/emeliedump/1998/0725/sys/src/brazil/carrera/clock.c 107a if(m->flushmmu){ if(up) flushmmu(); m->flushmmu = 0; } . ## diffname carrera/clock.c 1999/0228 ## diff -e /n/emeliedump/1998/0725/sys/src/brazil/carrera/clock.c /n/emeliedump/1999/0228/sys/src/brazil/carrera/clock.c 131,132c *hz = HZ*100; return (vlong)m->ticks*100; . 127c vlong . ## diffname carrera/clock.c 1999/0301 ## diff -e /n/emeliedump/1999/0228/sys/src/brazil/carrera/clock.c /n/emeliedump/1999/0301/sys/src/brazil/carrera/clock.c 131,132c *hz = fasthz; return (vlong)cyclecount; . 129a uvlong cyclecount; int x; x = splhi(); cyclecount = updatefastclock(rdcount()); splx(x); . 79c count = rdcount(); wrcompare(count+incr); updatefastclock(count); . 77a ulong count; . 73a uvlong updatefastclock(ulong count) { uvlong cyclecount; /* keep track of higher precision time */ cyclecount = count; if(cyclecount < m->lastcyclecount) m->fastclock += (0x100000000LL - m->lastcyclecount) + cyclecount; else m->fastclock += cyclecount - m->lastcyclecount; m->lastcyclecount = cyclecount; return m->fastclock; } . 71c incr = (m->speed*1000000)/HZ; fasthz = m->speed*1000000; wrcompare(rdcount()+incr); . 19a static ulong incr; /* compare register increment */ static uvlong fasthz; /* ticks/sec of fast clock */ . ## diffname carrera/clock.c 1999/0302 ## diff -e /n/emeliedump/1999/0301/sys/src/brazil/carrera/clock.c /n/emeliedump/1999/0302/sys/src/brazil/carrera/clock.c 84,89c delta = count - m->lastcyclecount; if(delta < 0) delta += 0x100000000LL; m->lastcyclecount = count; m->fastclock += delta; . 81c vlong delta; . ## diffname carrera/clock.c 1999/0327 ## diff -e /n/emeliedump/1999/0302/sys/src/brazil/carrera/clock.c /n/emeliedump/1999/0327/sys/src/brazil/carrera/clock.c 162a } ulong timewarp; void idlehands(void) { ulong cnt, cmp, d; int x; x = splhi(); cnt = rdcount(); cmp = rdcompare(); cnt -= 100; /* to cover for time from splhi to rdcount */ d = cmp - cnt; if(d > incr+100){ wrcompare(lastcmp = cnt+incr); timewarp++; // print("%lud %lud %d %lux\n", cnt, cmp, cnt-cmp, d); } splx(x); . 146a if(anyready()) sched(); . 139,141d 100c wrcompare(lastcmp = count+incr); . 85,86d 81c ulong delta; . 75c wrcompare(lastcmp = rdcount()+incr); . 53a ulong lastcmp; . ## diffname carrera/clock.c 1999/0328 ## diff -e /n/emeliedump/1999/0327/sys/src/brazil/carrera/clock.c /n/emeliedump/1999/0328/sys/src/brazil/carrera/clock.c 183a #endif . 169a #ifdef adsfasdf . 165,166d 156c cnt = rdcount(); cyclecount = updatefastclock(cnt); d = lastcmp - cnt + 100; if(d > incr+100){ wrcompare(lastcmp = cnt+incr); timewarp++; } . 152a ulong cnt, d; . 148a ulong timewarp; . ## diffname carrera/clock.c 1999/0402 ## diff -e /n/emeliedump/1999/0328/sys/src/brazil/carrera/clock.c /n/emeliedump/1999/0402/sys/src/brazil/carrera/clock.c 154,192c if(hz != nil) *hz = HZ*100; return m->ticks*100; . 149,150d 100,101c if(lastcmp+incr < count+100) lastcmp = count+incr; else lastcmp += incr; wrcompare(lastcmp); . 80,92d 76d 54,55d 22a . 21c static ulong lastcmp; . ## diffname carrera/clock.c 2001/0527 # deleted ## diff -e /n/emeliedump/1999/0402/sys/src/brazil/carrera/clock.c /n/emeliedump/2001/0527/sys/src/9/carrera/clock.c 1,143d