reorganize port/clock.c to properly deal with >1 mach Reference: /n/atom/patch/applied2013/fsmpclock Date: Mon Aug 26 05:26:39 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/fs/port/clock.c Mon Aug 26 05:25:40 2013 +++ /sys/src/fs/port/clock.c Mon Aug 26 05:25:41 2013 @@ -92,11 +92,11 @@ void clock(Timet n, uintptr pc) { - int i; User *p; clockreload(n); - m->ticks++; + if(m->machno == 0) + m->ticks++; /* wrong */ if(cons.profile) { cons.profbuf[0] += TK2MS(1); @@ -108,27 +108,22 @@ cons.profbuf[1] += TK2MS(1); } - lights(Lreal, (m->ticks>>6)&1); + p = m->proc; + if(p == nil) + p = m->intrp; + if(p) + p->time.count += 10*TK2MS(1); + else + m->idle.count += 10*TK2MS(1); + m->intrp = 0; + if(m->machno == 0){ if(f.cons >= 0) { (*consputc)(f.cons); f.cons = -1; } - p = m->proc; - if(p == 0) - p = m->intrp; - if(p) - p->time.count += 10*TK2MS(1); - else - m->idle.count += 10*TK2MS(1); - for(i=1; iproc; - if(p && p != m->intrp) - p->time.count += 10*TK2MS(1); - } - } - m->intrp = 0; + + lights(Lreal, (m->ticks>>6)&1); f.time += TK2MS(1); while(f.time >= 1000) { @@ -138,7 +133,7 @@ } if(active.exiting && active.machs&(1<machno)){ - print("someone's exiting\n"); + print("cpu%d: someone's exiting\n", m->machno); exit(); }