| plan 9 kernel history: overview | file list | diff list |
2002/0503/port/edf.c (diff list | history)
| 2002/0420/sys/src/9/port/edf.c:252,257 – 2002/0503/sys/src/9/port/edf.c:252,258 (short | long | prev | next) | ||
| 2002/0410 | deadline(Proc *p, SEvent why) | |
| 2002/0315 | { Task *t, *nt; | |
| 2002/0503 | Ticks used; | |
| 2002/0315 | /* Task has reached its deadline, lock must be held */ | |
| 2002/0410 | DPRINT("%d deadline, %s, %d\n", m->machno, edfstatename[p->task->state], p->task->runq.n); | |
| 2002/0420/sys/src/9/port/edf.c:272,277 – 2002/0503/sys/src/9/port/edf.c:273,283 | ||
| 2002/0410 | timerdel(&deadlinetimer[m->machno]); deadlinetimer[m->machno].when = 0; | |
| 2002/0327 | } | |
| 2002/0503 | used = now - t->scheduled; t->S -= used; t->scheduled = now; t->total += used; t->aged = (t->aged*31 + t->C - t->S) >> 5; | |
| 2002/0315 | t->d = now; t->state = EdfDeadline; | |
| 2002/0316 | if(devrt) devrt(t, now, why); | |
| 2002/0420/sys/src/9/port/edf.c:330,335 – 2002/0503/sys/src/9/port/edf.c:336,342 | ||
| 2002/0315 | t->S = t->C; t->scheduled = now; t->state = EdfRunning; | |
| 2002/0503 | t->periods++; | |
| 2002/0316 | if(devrt) devrt(t, now, SRun); | |
| 2002/0320 | setdelta(); | |
| 2002/0315 | assert(t->runq.n > 0 || (up && up->task == t)); | |
| 2002/0420/sys/src/9/port/edf.c:457,462 – 2002/0503/sys/src/9/port/edf.c:464,470 | ||
| 2002/0315 | used = now - t->scheduled; t->scheduled = now; | |
| 2002/0503 | t->total += used; | |
| 2002/0315 | if (t->r < now){ if (t->S <= used) | |
| 2002/0420/sys/src/9/port/edf.c:466,473 – 2002/0503/sys/src/9/port/edf.c:474,483 | ||
| 2002/0315 | if (t->d <= now || t->S == 0LL){ /* Task has reached its deadline/slice, remove from queue */ | |
| 2002/0420 |
| |
| 2002/0503 | if (t->d <= now){ t->missed++; | |
| 2002/0420 | misseddeadlines++; | |
| 2002/0503 | } | |
| 2002/0410 | deadline(up, SSlice); | |
| 2002/0315 | while (t = edfstack[m->machno].head){ if (now < t->d) | |
| 2002/0420/sys/src/9/port/edf.c:728,736 – 2002/0503/sys/src/9/port/edf.c:738,746 | ||
| 2002/0315 | edfdequeue(&qreleased); assert(nt->runq.n >= 1); edfpush(nt); | |
| 2002/0503 | t->periods++; | |
| 2002/0315 | }else{ | |
| 2002/0410 | DPRINT("%d edfrunproc: current\n", m->machno); | |
| 2002/0315 | } | |
| 2002/0420/sys/src/9/port/edf.c:741,746 – 2002/0503/sys/src/9/port/edf.c:751,757 | ||
| 2002/0315 | * No need to lock runq, edflock always held to access runq */ t->state = EdfRunning; | |
| 2002/0503 | t->periods++; | |
| 2002/0315 | p = t->runq.head; if ((t->runq.head = p->rnext) == nil) t->runq.tail = nil; | |