| plan 9 kernel history: overview | file list | diff list |
1990/0227/power/clock.c (diff list | history)
| 1990/0227/sys/src/9/power/clock.c:17,23 – 1990/0614/sys/src/9/power/clock.c:17,23 (short | long) | ||
| 1990/0227 | if(ms < 0) ms = 0; a = newalarm(); | |
| 1990/0614 | a->dt = MS2TK(ms); | |
| 1990/0227 | a->f = f; a->arg = arg; s = splhi(); | |
| 1990/0614/sys/src/9/power/clock.c:135,147 – 1990/0728/sys/src/9/power/clock.c:135,149 (short | long) | ||
| 1990/0227 | m->ticks = 0; } | |
| 1990/0728 | #define NA 10 | |
| 1990/0227 | void clock(ulong n) { | |
| 1990/0728 | int i, na; | |
| 1990/0227 | Alarm *a; void (*f)(void*); Proc *p; | |
| 1990/0728 | Alarm *alist[NA]; | |
| 1990/0227 | if(n&INTR2){ i = *CLRTIM0; | |
| 1990/0614/sys/src/9/power/clock.c:170,185 – 1990/0728/sys/src/9/power/clock.c:172,193 | ||
| 1990/0227 | if(m->alarm){ a = m->alarm; a->dt--; | |
| 1990/0728 | for(na = 0; a && a->dt<=0 && na<NA; na++){ alist[na] = a; | |
| 1990/0227 | delete(&m->alarm, 0, a); | |
| 1990/0728 | 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); | |
| 1990/0227 | } return; } | |
| 1990/0728/sys/src/9/power/clock.c:107,119 – 1990/0731/sys/src/9/power/clock.c:107,129 (short | long) | ||
| 1990/0227 | junk3[3]; }; | |
| 1990/0731 | ||
| 1990/0227 | #define TIME0 (36*MS2HZ/10) | |
| 1990/0731 | #define TIME1 0xFFFFFFFF /* profiling disabled */ | |
| 1990/0227 | #define TIME2 1024 #define CTR(x) ((x)<<6) /* which counter x */ #define SET16 0x30 /* lsbyte then msbyte */ #define MODE2 0x04 /* interval timer */ | |
| 1990/0731 | #define PROFILING #ifdef PROFILING #undef TIME1 #define TIME1 211 /* profiling clock; prime; about 10ms per tick */ #define NPROF 50000 ulong profcnt[MAXMACH*NPROF]; #endif | |
| 1990/0227 | void clockinit(void) { | |
| 1990/0728/sys/src/9/power/clock.c:135,143 – 1990/0731/sys/src/9/power/clock.c:145,155 | ||
| 1990/0227 | m->ticks = 0; } | |
| 1990/0731 | ||
| 1990/0728 | #define NA 10 | |
| 1990/0227 | void | |
| 1990/0731 | clock(ulong n, ulong pc) | |
| 1990/0227 | { | |
| 1990/0728 | int i, na; | |
| 1990/0227 | Alarm *a; | |
| 1990/0728/sys/src/9/power/clock.c:192,198 – 1990/0731/sys/src/9/power/clock.c:204,218 | ||
| 1990/0227 | return; } if(n & INTR4){ | |
| 1990/0731 | extern ulong start; | |
| 1990/0227 | i = *CLRTIM1; | |
| 1990/0731 | #ifdef PROFILING pc -= (ulong)&start; pc /= sizeof(ulong); if(pc < NPROF) profcnt[m->machno*NPROF+pc]++; #endif | |
| 1990/0227 | return; } } | |
| 1990/0731/sys/src/9/power/clock.c:116,122 – 1990/0802/sys/src/9/power/clock.c:116,122 (short | long) | ||
| 1990/0227 | #define MODE2 0x04 /* interval timer */ | |
| 1990/0731 |
| |
| 1990/0802 | /* #define PROFILING /**/ | |
| 1990/0731 | #ifdef PROFILING #undef TIME1 #define TIME1 211 /* profiling clock; prime; about 10ms per tick */ | |
| 1990/0802/sys/src/9/power/clock.c:181,198 – 1990/1106/sys/src/9/power/clock.c:181,199 (short | long) | ||
| 1990/0227 | exit(); } if(canlock(&m->alarmlock)){ | |
| 1990/0728 |
| |
| 1990/1106 | a = m->alarm; if(a){ for(n=0; a && a->dt<=0 && n<NA; n++){ alist[n] = a; | |
| 1990/0227 | delete(&m->alarm, 0, a); a = m->alarm; } | |
| 1990/1106 | if(a) a->dt--; | |
| 1990/0728 | unlock(&m->alarmlock); /* execute alarm functions outside the lock */ | |
| 1990/1106 | for(i = 0; i < n; i++){ | |
| 1990/0728 | f = alist[i]->f; /* avoid race with cancel */ if(f) (*f)(alist[i]); | |
| 1990/1106/sys/src/9/power/clock.c:7,82 – 1990/1211/sys/src/9/power/clock.c:7,13 (short | long) | ||
| 1990/0227 | #include "ureg.h" | |
| 1990/0614 |
| |
| 1990/0227 |
| |
| 1990/1106/sys/src/9/power/clock.c:147,161 – 1990/1211/sys/src/9/power/clock.c:78,88 | ||
| 1990/0227 | ||
| 1990/0731 | ||
| 1990/0728 |
| |
| 1990/0227 | void | |
| 1990/0731 | clock(ulong n, ulong pc) | |
| 1990/0227 | { | |
| 1990/0728 |
| |
| 1990/0227 |
| |
| 1990/1211 | int i; | |
| 1990/0227 | Proc *p; | |
| 1990/0728 |
| |
| 1990/0227 | if(n&INTR2){ i = *CLRTIM0; | |
| 1990/1106/sys/src/9/power/clock.c:180,207 – 1990/1211/sys/src/9/power/clock.c:107,113 | ||
| 1990/0227 | print("someone's exiting\n"); exit(); } | |
| 1990/1106 |
| |
| 1990/0227 |
| |
| 1990/1106 |
| |
| 1990/0728 |
| |
| 1990/1106 |
| |
| 1990/0728 |
| |
| 1990/0227 |
| |
| 1990/1211 | checkalarms(); | |
| 1990/0227 | return; } if(n & INTR4){ | |
| 1990/1211/sys/src/9/power/clock.c:72,78 – 1990/1214/sys/src/9/power/clock.c:72,80 (short | long) | ||
| 1990/0227 | t->cnt0 = TIME0; t->cnt0 = (TIME0>>8)&0xFF; i = *CLRTIM0; | |
| 1990/1214 | USED(i); | |
| 1990/0227 | i = *CLRTIM1; | |
| 1990/1214 | USED(i); | |
| 1990/0227 | m->ticks = 0; } | |
| 1990/1211/sys/src/9/power/clock.c:86,91 – 1990/1214/sys/src/9/power/clock.c:88,94 | ||
| 1990/0227 | if(n&INTR2){ i = *CLRTIM0; | |
| 1990/1214 | USED(i); | |
| 1990/0227 | m->ticks++; if(m->machno == 0){ p = m->proc; | |
| 1990/1211/sys/src/9/power/clock.c:114,119 – 1990/1214/sys/src/9/power/clock.c:117,123 | ||
| 1990/0731 | extern ulong start; | |
| 1990/0227 | i = *CLRTIM1; | |
| 1990/1214 | USED(i); | |
| 1990/0731 | #ifdef PROFILING pc -= (ulong)&start; pc /= sizeof(ulong); | |
| 1990/1214/sys/src/9/power/clock.c:81,109 – 1991/0209/sys/src/9/power/clock.c:81,106 (short | long) | ||
| 1990/0731 | ||
| 1990/0227 | void | |
| 1990/0731 |
| |
| 1991/0209 | clock(Ureg *ur) | |
| 1990/0227 | { | |
| 1990/1211 | int i; | |
| 1990/0227 | Proc *p; | |
| 1991/0209 | if(ur->cause & INTR2){ | |
| 1990/0227 | i = *CLRTIM0; | |
| 1990/1214 | USED(i); | |
| 1990/0227 | m->ticks++; if(m->machno == 0){ p = m->proc; | |
| 1991/0209 | if(p) | |
| 1990/0227 | p->time[p->insyscall]++; } } | |
| 1990/1214/sys/src/9/power/clock.c:111,119 – 1991/0209/sys/src/9/power/clock.c:108,123 | ||
| 1990/0227 | exit(); } | |
| 1990/1211 | checkalarms(); | |
| 1991/0209 | p = m->proc; if((ur->status&IEP) && p && p->state==Running){ if(anyready()) sched(); if(u->nnote && (ur->status&KUP)) notify(ur); } | |
| 1990/0227 | return; } | |
| 1991/0209 | if(ur->cause & INTR4){ | |
| 1990/0731 | extern ulong start; | |
| 1990/0227 | i = *CLRTIM1; | |
| 1991/0209/sys/src/9/power/clock.c:108,115 – 1991/0215/sys/src/9/power/clock.c:108,114 (short | long) | ||
| 1990/0227 | exit(); } | |
| 1990/1211 | checkalarms(); | |
| 1991/0209 |
| |
| 1991/0215 | if(u && (ur->status&IEP) && u->p && u->p->state==Running){ | |
| 1991/0209 | if(anyready()) sched(); if(u->nnote && (ur->status&KUP)) | |
| 1991/0215/sys/src/9/power/clock.c:101,108 – 1991/0607/sys/src/9/power/clock.c:101,108 (short | long) | ||
| 1990/0227 | p->time[p->insyscall]++; } } | |
| 1991/0607 | duartslave(); | |
| 1990/0227 | if(active.exiting && active.machs&(1<<m->machno)){ print("someone's exiting\n"); exit(); | |
| 1991/0607/sys/src/9/power/clock.c:109,116 – 1991/0614/sys/src/9/power/clock.c:109,120 (short | long) | ||
| 1990/0227 | } | |
| 1990/1211 | checkalarms(); | |
| 1991/0215 | if(u && (ur->status&IEP) && u->p && u->p->state==Running){ | |
| 1991/0209 |
| |
| 1991/0614 | if(anyready()){ if(u->p->hasspin) u->p->hasspin = 0; /* just in case */ else sched(); } | |
| 1991/0209 | if(u->nnote && (ur->status&KUP)) notify(ur); } | |
| 1991/0614/sys/src/9/power/clock.c:115,122 – 1991/0710/sys/src/9/power/clock.c:115,125 (short | long) | ||
| 1991/0614 | else sched(); } | |
| 1991/0209 |
| |
| 1991/0710 | if(ur->status & KUP){ (*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1); /* profiling clock */ if(u->nnote) notify(ur); } | |
| 1991/0209 | } | |
| 1990/0227 | return; } | |
| 1991/0710/sys/src/9/power/clock.c:47,59 – 1991/1011/sys/src/9/power/clock.c:47,52 (short | long) | ||
| 1990/0227 | #define MODE2 0x04 /* interval timer */ | |
| 1990/0731 | ||
| 1990/0802 |
| |
| 1990/0731 |
| |
| 1990/0227 | void clockinit(void) | |
| 1991/0710/sys/src/9/power/clock.c:108,113 – 1991/1011/sys/src/9/power/clock.c:101,107 | ||
| 1990/0227 | exit(); } | |
| 1990/1211 | checkalarms(); | |
| 1991/1011 | kproftimer(ur->pc); | |
| 1991/0215 | if(u && (ur->status&IEP) && u->p && u->p->state==Running){ | |
| 1991/0614 | if(anyready()){ if(u->p->hasspin) | |
| 1991/0710/sys/src/9/power/clock.c:128,139 – 1991/1011/sys/src/9/power/clock.c:122,127 | ||
| 1990/0731 | ||
| 1990/0227 | i = *CLRTIM1; | |
| 1990/1214 | USED(i); | |
| 1990/0731 |
| |
| 1990/0227 | return; } } | |
| 1991/1011/sys/src/9/power/clock.c:111,118 – 1991/1110/sys/src/9/power/clock.c:111,117 (short | long) | ||
| 1991/0614 | } | |
| 1991/0710 | if(ur->status & KUP){ (*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1); /* profiling clock */ | |
| 1991/1110 | notify(ur); | |
| 1991/0710 | } | |
| 1991/0209 | } | |
| 1990/0227 | return; | |
| 1991/1110/sys/src/9/power/clock.c:76,82 – 1991/1112/sys/src/9/power/clock.c:76,82 (short | long) | ||
| 1990/0227 | void | |
| 1991/0209 | clock(Ureg *ur) | |
| 1990/0227 | { | |
| 1990/1211 |
| |
| 1991/1112 | int i, nrun = 0; | |
| 1990/0227 | Proc *p; | |
| 1991/0209 | if(ur->cause & INTR2){ | |
| 1991/1110/sys/src/9/power/clock.c:85,99 – 1991/1112/sys/src/9/power/clock.c:85,105 | ||
| 1990/0227 | m->ticks++; if(m->machno == 0){ p = m->proc; | |
| 1991/1112 | if(p) { nrun++; | |
| 1990/0227 | p->time[p->insyscall]++; | |
| 1991/1112 | } | |
| 1990/0227 | for(i=1; i<conf.nmach; i++){ if(active.machs & (1<<i)){ p = MACHP(i)->proc; | |
| 1991/0209 |
| |
| 1991/1112 | if(p) { | |
| 1990/0227 | p->time[p->insyscall]++; | |
| 1991/1112 | nrun++; } | |
| 1990/0227 | } } | |
| 1991/1112 | nrun = (nrdy+nrun)*1000; m->load = (m->load+nrun)/2; | |
| 1990/0227 | } | |
| 1991/0607 | duartslave(); | |
| 1990/0227 | if(active.exiting && active.machs&(1<<m->machno)){ | |
| 1991/1112/sys/src/9/power/clock.c:99,105 – 1991/1113/sys/src/9/power/clock.c:99,105 (short | long) | ||
| 1990/0227 | } } | |
| 1991/1112 | nrun = (nrdy+nrun)*1000; | |
| 1991/1113 | m->load = (m->load*19+nrun)/20; | |
| 1990/0227 | } | |
| 1991/0607 | duartslave(); | |
| 1990/0227 | if(active.exiting && active.machs&(1<<m->machno)){ | |
| 1991/1113/sys/src/9/power/clock.c:115,124 – 1991/1114/sys/src/9/power/clock.c:115,122 (short | long) | ||
| 1991/0614 | else sched(); } | |
| 1991/0710 |
| |
| 1991/1114 | if(ur->status & KUP) | |
| 1991/0710 | (*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1); /* profiling clock */ | |
| 1991/1110 |
| |
| 1991/0710 |
| |
| 1991/0209 | } | |
| 1990/0227 | return; } | |
| 1991/1114/sys/src/9/power/clock.c:1,5 – 1992/0321/sys/src/9/power/clock.c:1,5 (short | long) | ||
| 1990/0227 | #include "u.h" | |
| 1992/0321 | #include "../port/lib.h" | |
| 1990/0227 | #include "mem.h" #include "dat.h" #include "fns.h" | |
| 1992/0321/sys/src/9/power/clock.c:83,88 – 1992/0509/sys/src/9/power/clock.c:83,93 (short | long) | ||
| 1990/0227 | i = *CLRTIM0; | |
| 1990/1214 | USED(i); | |
| 1990/0227 | m->ticks++; | |
| 1992/0509 | if(m->ticks&(1<<4)) LEDON(LEDpulse); else LEDOFF(LEDpulse); | |
| 1990/0227 | if(m->machno == 0){ p = m->proc; | |
| 1991/1112 | if(p) { | |
| 1992/0509/sys/src/9/power/clock.c:10,16 – 1992/0711/sys/src/9/power/clock.c:10,15 (short | long) | ||
| 1990/0227 | void delay(int ms) { | |
| 1992/0711/sys/src/9/power/clock.c:86,91 – 1992/0805/sys/src/9/power/clock.c:86,93 (short | long) | ||
| 1992/0509 | LEDON(LEDpulse); else LEDOFF(LEDpulse); | |
| 1992/0805 | if(m->proc) m->proc->pc = ur->pc; | |
| 1992/0509 | ||
| 1990/0227 | if(m->machno == 0){ p = m->proc; | |
| 1992/0805/sys/src/9/power/clock.c:110,116 – 1992/0812/sys/src/9/power/clock.c:110,116 (short | long) | ||
| 1991/0607 | duartslave(); | |
| 1990/0227 | if(active.exiting && active.machs&(1<<m->machno)){ print("someone's exiting\n"); | |
| 1992/0812 | exit(0); | |
| 1990/0227 | } | |
| 1990/1211 | checkalarms(); | |
| 1991/1011 | kproftimer(ur->pc); | |
| 1992/0812/sys/src/9/power/clock.c:114,120 – 1992/0816/sys/src/9/power/clock.c:114,120 (short | long) | ||
| 1990/0227 | } | |
| 1990/1211 | checkalarms(); | |
| 1991/1011 | kproftimer(ur->pc); | |
| 1991/0215 |
| |
| 1992/0816 | if(u && (ur->status&IEP) && u->p->state==Running){ | |
| 1991/0614 | if(anyready()){ if(u->p->hasspin) u->p->hasspin = 0; /* just in case */ | |
| 1992/0816/sys/src/9/power/clock.c:115,128 – 1992/0828/sys/src/9/power/clock.c:115,129 (short | long) | ||
| 1990/1211 | checkalarms(); | |
| 1991/1011 | kproftimer(ur->pc); | |
| 1992/0816 | if(u && (ur->status&IEP) && u->p->state==Running){ | |
| 1991/0614 |
| |
| 1992/0828 | if(anyready()) { | |
| 1991/0614 | if(u->p->hasspin) u->p->hasspin = 0; /* just in case */ else sched(); } | |
| 1992/0828 | /* user profiling clock */ | |
| 1991/1114 | if(ur->status & KUP) | |
| 1991/0710 |
| |
| 1992/0828 | (*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1); | |
| 1991/0209 | } | |
| 1990/0227 | return; } | |
| 1992/0828/sys/src/9/power/clock.c:108,113 – 1992/1125/sys/src/9/power/clock.c:108,115 (short | long) | ||
| 1991/1113 | m->load = (m->load*19+nrun)/20; | |
| 1990/0227 | } | |
| 1991/0607 | duartslave(); | |
| 1992/1125 | if((active.machs&(1<<m->machno)) == 0) return; | |
| 1990/0227 | if(active.exiting && active.machs&(1<<m->machno)){ print("someone's exiting\n"); | |
| 1992/0812 | exit(0); | |
| Too many diffs (26 > 25). Stopping. | ||