20,11 → 20,11 |
|
/** |
------------ |
CVS : $Id: edf.c,v 1.19 2004-09-14 09:50:12 giacomo Exp $ |
CVS : $Id: edf.c,v 1.20 2004-09-15 11:44:11 giacomo Exp $ |
|
File: $File$ |
Revision: $Revision: 1.19 $ |
Last update: $Date: 2004-09-14 09:50:12 $ |
Revision: $Revision: 1.20 $ |
Last update: $Date: 2004-09-15 11:44:11 $ |
------------ |
|
This file contains the scheduling module EDF (Earliest Deadline First) |
105,6 → 105,7 |
struct timespec adeadline; /* latest assigned deadline */ |
int dl_timer; /* deadline timer */ |
int eop_timer; /* end of period timer */ |
int off_timer; /* timer offset */ |
int dl_miss; /* deadline miss counter */ |
int wcet_miss; /* WCET miss counter */ |
int act_miss; /* activation miss counter */ |
185,8 → 186,13 |
PID p = (PID) par; |
EDF_level_des *lev; |
lev = (EDF_level_des *)level_table[proc_table[p].task_level]; |
EDF_task_des *td = &lev->tvec[p]; |
|
td->off_timer = -1; |
|
/* release the task now */ |
EDF_intern_release(p, lev); |
|
} |
|
/* This function is called when a guest task misses its deadline */ |
200,7 → 206,9 |
|
TRACER_LOGEVENT(FTrace_EVT_task_deadline_miss, |
(unsigned short int)proc_table[p].context,0); |
|
kern_raise(XDEADLINE_MISS,p); |
|
} |
|
|
324,6 → 332,7 |
td->offset = h->offset; |
td->dl_timer = -1; |
td->eop_timer = -1; |
td->off_timer = -1; |
td->dl_miss = 0; |
td->wcet_miss = 0; |
td->act_miss = 0; |
423,7 → 432,11 |
|
if (TIMESPEC_A_GT_B(&td->release, &clocktime)) { |
/* release later, post an offset timer */ |
kern_event_post(&td->release,EDF_timer_offset,(void *)p); |
if (td->off_timer != -1) { |
kern_event_delete(td->off_timer); |
td->off_timer = -1; |
} |
td->off_timer = kern_event_post(&td->release,EDF_timer_offset,(void *)p); |
} else { |
/* release now */ |
EDF_intern_release(p, lev); |
646,6 → 659,7 |
{ |
LEVEL l; /* the level that we register */ |
EDF_level_des *lev; /* for readableness only */ |
int i; |
|
printk("EDF_register_level\n"); |
|
688,6 → 702,18 |
|
lev->U = 0; |
|
for (i=0;i<MAX_PROC;i++) { |
EDF_task_des *td = &lev->tvec[i]; |
td->flags = 0; |
td->dl_timer = -1; |
td->eop_timer = -1; |
td->off_timer = -1; |
td->dl_miss = 0; |
td->wcet_miss = 0; |
td->act_miss = 0; |
td->nact = 0; |
} |
|
return l; |
} |
|