void hzclock(Ureg *ur) { m->ticks++; if(m->proc) m->proc->pc = ur->pc; if(m->flushmmu){ if(up) flushmmu(); m->flushmmu = 0; } accounttime(); kmapinval(); if(kproftimer != nil) kproftimer(ur->pc); if((active.machs&(1<<m->machno)) == 0) return; if(active.exiting) { print("someone's exiting\n"); exit(0); } checkalarms(); if(up && up->state == Running) hzsched(); /* in proc.c */ }
void hzclock(Ureg *ur) { Proc *up = externup(); uintptr_t pc; machp()->ticks++; if(machp()->machno == 0) sys->ticks = machp()->ticks; pc = userpc(ur); if(machp()->proc) machp()->proc->pc = pc; if(machp()->mmuflush){ if(up) mmuflush(); machp()->mmuflush = 0; } accounttime(); kmapinval(); if(kproftimer != nil) kproftimer(pc); oprof_alarm_handler(ur); if(machp()->online == 0) return; if(active.exiting) { print("someone's exiting\n"); exit(0); } if(machp()->machno == 0) { /* since sys->ticks is only updated if machp()->machno == 0 */ checkalarms(); } if(up && up->state == Running) hzsched(); /* in proc.c */ }