## diffname power/clock.c 1990/0227 ## diff -e /dev/null /n/bootesdump/1990/0227/sys/src/9/mips/clock.c 0a #include "u.h" #include "lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "io.h" #include "ureg.h" Alarm *alarmtab; Alarm* alarm(int ms, void (*f)(Alarm*), void *arg) { Alarm *a, *w, *pw; ulong s; if(ms < 0) ms = 0; a = newalarm(); a->dt = ms/MS2HZ; a->f = f; a->arg = arg; s = splhi(); lock(&m->alarmlock); pw = 0; for(w=m->alarm; w; pw=w, w=w->next){ if(w->dt <= a->dt){ a->dt -= w->dt; continue; } w->dt -= a->dt; break; } insert(&m->alarm, pw, a); unlock(&m->alarmlock); splx(s); return a; } void cancel(Alarm *a) { a->f = 0; } Alarm* newalarm(void) { int i; Alarm *a; for(i=0,a=alarmtab; ibusy==0 && a->f==0 && canlock(a)){ if(a->busy){ unlock(a); continue; } a->f = 0; a->arg = 0; a->busy = 1; unlock(a); return a; } panic("newalarm"); } void alarminit(void) { int i; alarmtab = ialloc(conf.nalarm*sizeof(Alarm), 0); for(i=0; ictl = CTR(2)|SET16|MODE2; t->cnt2 = TIME2&0xFF; t->cnt2 = (TIME2>>8)&0xFF; t->ctl = CTR(1)|SET16|MODE2; t->cnt1 = TIME1&0xFF; t->cnt1 = (TIME1>>8)&0xFF; t->ctl = CTR(0)|SET16|MODE2; t->cnt0 = TIME0; t->cnt0 = (TIME0>>8)&0xFF; i = *CLRTIM0; i = *CLRTIM1; m->ticks = 0; } void clock(ulong n) { int i; Alarm *a; void (*f)(void*); Proc *p; if(n&INTR2){ i = *CLRTIM0; m->ticks++; if(m->machno == 0){ p = m->proc; if(p == 0) p = m->intrp; if(p) p->time[p->insyscall]++; for(i=1; iproc; if(p && p!=m->intrp) p->time[p->insyscall]++; } } m->intrp = 0; printslave(); } if(active.exiting && active.machs&(1<machno)){ print("someone's exiting\n"); exit(); } if(canlock(&m->alarmlock)){ if(m->alarm){ a = m->alarm; a->dt--; while(a && a->dt<=0){ f = a->f; /* avoid race with cancel */ if(f) (*f)(a); delete(&m->alarm, 0, a); a->busy = 0; a = m->alarm; } } unlock(&m->alarmlock); } return; } if(n & INTR4){ i = *CLRTIM1; return; } } . ## diffname power/clock.c 1990/0614 ## diff -e /n/bootesdump/1990/0227/sys/src/9/mips/clock.c /n/bootesdump/1990/0614/sys/src/9/mips/clock.c 20c a->dt = MS2TK(ms); . ## diffname power/clock.c 1990/0728 ## diff -e /n/bootesdump/1990/0614/sys/src/9/mips/clock.c /n/bootesdump/1990/0728/sys/src/9/mips/clock.c 181,182c unlock(&m->alarmlock); /* execute alarm functions outside the lock */ for(i = 0; i < na; i++){ f = alist[i]->f; /* avoid race with cancel */ if(f) (*f)(alist[i]); alist[i]->busy = 0; } } else unlock(&m->alarmlock); . 178d 173,176c for(na = 0; a && a->dt<=0 && namachno*NPROF+pc]++; #endif . 194a extern ulong start; . 140c clock(ulong n, ulong pc) . 137a . 116a #define PROFILING #ifdef PROFILING #undef TIME1 #define TIME1 211 /* profiling clock; prime; about 10ms per tick */ #define NPROF 50000 ulong profcnt[MAXMACH*NPROF]; #endif . 111c #define TIME1 0xFFFFFFFF /* profiling disabled */ . 109a . ## diffname power/clock.c 1990/0802 ## diff -e /n/bootesdump/1990/0731/sys/src/9/mips/clock.c /n/bootesdump/1990/0802/sys/src/9/mips/clock.c 119c /* #define PROFILING /**/ . ## diffname power/clock.c 1990/1106 ## diff -e /n/bootesdump/1990/0802/sys/src/9/mips/clock.c /n/bootesdump/1990/1106/sys/src/9/mips/clock.c 195c for(i = 0; i < n; i++){ . 191a if(a) a->dt--; . 184,188c a = m->alarm; if(a){ for(n=0; a && a->dt<=0 && ncause & INTR4){ . 113a p = m->proc; if((ur->status&IEP) && p && p->state==Running){ if(anyready()) sched(); if(u->nnote && (ur->status&KUP)) notify(ur); } . 106d 102c if(p) . 95,96d 89c if(ur->cause & INTR2){ . 84c clock(Ureg *ur) . ## diffname power/clock.c 1991/0215 ## diff -e /n/bootesdump/1991/0209/sys/src/9/power/clock.c /n/bootesdump/1991/0215/sys/src/9/power/clock.c 111,112c if(u && (ur->status&IEP) && u->p && u->p->state==Running){ . ## diffname power/clock.c 1991/0607 ## diff -e /n/bootesdump/1991/0215/sys/src/9/power/clock.c /n/bootesdump/1991/0607/sys/src/9/power/clock.c 105a duartslave(); . 104d ## diffname power/clock.c 1991/0614 ## diff -e /n/bootesdump/1991/0607/sys/src/9/power/clock.c /n/bootesdump/1991/0614/sys/src/9/power/clock.c 112,113c if(anyready()){ if(u->p->hasspin) u->p->hasspin = 0; /* just in case */ else sched(); } . ## diffname power/clock.c 1991/0710 ## diff -e /n/bootesdump/1991/0614/sys/src/9/power/clock.c /n/bootesdump/1991/0710/sys/src/9/power/clock.c 118,119c if(ur->status & KUP){ (*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1); /* profiling clock */ if(u->nnote) notify(ur); } . ## diffname power/clock.c 1991/1011 ## diff -e /n/bootesdump/1991/0710/sys/src/9/power/clock.c /n/bootesdump/1991/1011/sys/src/9/power/clock.c 131,136d 110a kproftimer(ur->pc); . 50,56d ## diffname power/clock.c 1991/1110 ## diff -e /n/bootesdump/1991/1011/sys/src/9/power/clock.c /n/bootesdump/1991/1110/sys/src/9/power/clock.c 114,115c notify(ur); . ## diffname power/clock.c 1991/1112 ## diff -e /n/bootesdump/1991/1110/sys/src/9/power/clock.c /n/bootesdump/1991/1112/sys/src/9/power/clock.c 96a nrun = (nrdy+nrun)*1000; m->load = (m->load+nrun)/2; . 94a nrun++; } . 93c if(p) { . 89a } . 88c if(p) { nrun++; . 79c int i, nrun = 0; . ## diffname power/clock.c 1991/1113 ## diff -e /n/bootesdump/1991/1112/sys/src/9/power/clock.c /n/bootesdump/1991/1113/sys/src/9/power/clock.c 102c m->load = (m->load*19+nrun)/20; . ## diffname power/clock.c 1991/1114 ## diff -e /n/bootesdump/1991/1113/sys/src/9/power/clock.c /n/bootesdump/1991/1114/sys/src/9/power/clock.c 120,121d 118c if(ur->status & KUP) . ## diffname power/clock.c 1992/0321 ## diff -e /n/bootesdump/1991/1114/sys/src/9/power/clock.c /n/bootesdump/1992/0321/sys/src/9/power/clock.c 2c #include "../port/lib.h" . ## diffname power/clock.c 1992/0509 ## diff -e /n/bootesdump/1992/0321/sys/src/9/power/clock.c /n/bootesdump/1992/0509/sys/src/9/power/clock.c 85a if(m->ticks&(1<<4)) LEDON(LEDpulse); else LEDOFF(LEDpulse); . ## diffname power/clock.c 1992/0711 ## diff -e /n/bootesdump/1992/0509/sys/src/9/power/clock.c /n/bootesdump/1992/0711/sys/src/9/power/clock.c 13d ## diffname power/clock.c 1992/0805 ## diff -e /n/bootesdump/1992/0711/sys/src/9/power/clock.c /n/bootesdump/1992/0805/sys/src/9/power/clock.c 88a if(m->proc) m->proc->pc = ur->pc; . ## diffname power/clock.c 1992/0812 ## diff -e /n/bootesdump/1992/0805/sys/src/9/power/clock.c /n/bootesdump/1992/0812/sys/src/9/power/clock.c 113c exit(0); . ## diffname power/clock.c 1992/0816 ## diff -e /n/bootesdump/1992/0812/sys/src/9/power/clock.c /n/bootesdump/1992/0816/sys/src/9/power/clock.c 117c if(u && (ur->status&IEP) && u->p->state==Running){ . ## diffname power/clock.c 1992/0828 ## diff -e /n/bootesdump/1992/0816/sys/src/9/power/clock.c /n/bootesdump/1992/0828/sys/src/9/power/clock.c 125c (*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1); . 123a /* user profiling clock */ . 118c if(anyready()) { . ## diffname power/clock.c 1992/1125 ## diff -e /n/bootesdump/1992/0828/sys/src/9/power/clock.c /n/bootesdump/1992/1125/sys/src/9/power/clock.c 110a if((active.machs&(1<machno)) == 0) return; . ## diffname power/clock.c 1993/0501 ## diff -e /n/bootesdump/1992/1125/sys/src/9/power/clock.c /n/fornaxdump/1993/0501/sys/src/brazil/power/clock.c 138c if(anyready()) sched(); /* user profiling clock */ if(ur->status & KUP) (*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1); . 135,136c checkalarms(); kproftimer(ur->pc); if(up == 0 || (ur->status&IEP) == 0 || up->state != Running) . 132,133d 130a if(active.exiting && active.machs&(1<machno)) { print("someone's exiting\n"); exit(0); . 110,129c nrun = (nrdy+nrun)*1000; m->load = (m->load*19+nrun)/20; } duartslave(); if((active.machs&(1<machno)) == 0) . 107,108d 92,104c m->ticks++; if(m->proc) m->proc->pc = ur->pc; 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++; . 81,90c if((ur->cause&INTR2) == 0) { if(ur->cause & INTR4) { i = *CLRTIM1; USED(i); } return; } nrun = 0; i = *CLRTIM0; USED(i); . 79a int i, nrun; . 78d 73,74d 48,49d 26c * To get 100Hz, 36864==9*4096=36*1024 so clock ctr2 * every 1024 and ctr0 every 36. . 23,24c * ctr2 is clocked at 3.6864 MHz. ctr2 output clocks ctr0 and ctr1. . 15c ms *= 7000; /* experimentally determined */ . ## diffname power/clock.c 1995/0104 ## diff -e /n/fornaxdump/1993/0501/sys/src/brazil/power/clock.c /n/fornaxdump/1995/0104/sys/src/brazil/power/clock.c 92,109c accounttime(); . 74,75c int i; . ## diffname power/clock.c 1995/0108 ## diff -e /n/fornaxdump/1995/0104/sys/src/brazil/power/clock.c /n/fornaxdump/1995/0108/sys/src/brazil/power/clock.c 83d ## diffname power/clock.c 1995/0109 ## diff -e /n/fornaxdump/1995/0108/sys/src/brazil/power/clock.c /n/fornaxdump/1995/0109/sys/src/brazil/power/clock.c 106c if(anyready() && !up->inlock) . ## diffname power/clock.c 1995/0110 ## diff -e /n/fornaxdump/1995/0109/sys/src/brazil/power/clock.c /n/fornaxdump/1995/0110/sys/src/brazil/power/clock.c 106c if(anyready()) . ## diffname power/clock.c 1997/0327 # deleted ## diff -e /n/fornaxdump/1995/0110/sys/src/brazil/power/clock.c /n/emeliedump/1997/0327/sys/src/brazil/power/clock.c 1,112d