20,11 → 20,11 |
|
/** |
------------ |
CVS : $Id: rm.c,v 1.11 2004-09-15 11:55:16 giacomo Exp $ |
CVS : $Id: rm.c,v 1.10 2004-06-21 11:43:02 anton Exp $ |
|
File: $File$ |
Revision: $Revision: 1.11 $ |
Last update: $Date: 2004-09-15 11:55:16 $ |
Revision: $Revision: 1.10 $ |
Last update: $Date: 2004-06-21 11:43:02 $ |
------------ |
|
This file contains the scheduling module RM (rate-/deadline-monotonic) |
105,7 → 105,6 |
struct timespec adeadline; /* latest assigned deadline */ |
int dl_timer; /* deadline timer */ |
int eop_timer; /* end of period timer */ |
int off_timer; /* offset timer */ |
int dl_miss; /* deadline miss counter */ |
int wcet_miss; /* WCET miss counter */ |
int act_miss; /* activation miss counter */ |
168,8 → 167,6 |
RM_level_des *lev = (RM_level_des *)level_table[proc_table[p].task_level]; |
RM_task_des *td = &lev->tvec[p]; |
|
td->dl_timer = -1; |
|
TRACER_LOGEVENT(FTrace_EVT_task_deadline_miss, |
(unsigned short int)proc_table[p].context,0); |
|
186,10 → 183,6 |
PID p = (PID) par; |
RM_level_des *lev; |
lev = (RM_level_des *)level_table[proc_table[p].task_level]; |
RM_task_des *td = &lev->tvec[p]; |
|
td->off_timer = -1; |
|
/* release the task now */ |
RM_intern_release(p, lev); |
} |
198,17 → 191,9 |
static void RM_timer_guest_deadline(void *par) |
{ |
PID p = (PID) par; |
RM_level_des *lev; |
lev = (RM_level_des *)level_table[proc_table[p].task_level]; |
RM_task_des *td = &lev->tvec[p]; |
|
td->dl_timer = -1; |
|
TRACER_LOGEVENT(FTrace_EVT_task_deadline_miss, |
(unsigned short int)proc_table[p].context,0); |
|
kern_raise(XDEADLINE_MISS,p); |
|
} |
|
|
224,10 → 209,6 |
if (lev->flags & RM_ENABLE_DL_CHECK) { |
temp = td->release; |
ADDUSEC2TIMESPEC(td->rdeadline, &temp); |
if (td->dl_timer != -1) { |
kern_event_delete(td->dl_timer); |
td->dl_timer = -1; |
} |
td->dl_timer = kern_event_post(&temp,RM_timer_deadline,(void *)p); |
} |
|
253,10 → 234,6 |
/* increase release time */ |
ADDUSEC2TIMESPEC(td->period, &td->release); |
/* post end of period timer */ |
if (td->eop_timer != -1) { |
kern_event_delete(td->eop_timer); |
td->eop_timer = -1; |
} |
td->eop_timer = kern_event_post(&td->release, RM_timer_endperiod,(void *)p); |
|
TRACER_LOGEVENT(FTrace_EVT_task_timer, |
331,7 → 308,6 |
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; |
431,11 → 407,7 |
|
if (TIMESPEC_A_GT_B(&td->release, &clocktime)) { |
/* release later, post an offset timer */ |
if (td->off_timer != -1) { |
kern_event_delete(td->off_timer); |
td->off_timer = -1; |
} |
td->off_timer = kern_event_post(&td->release,RM_timer_offset,(void *)p); |
kern_event_post(&td->release,RM_timer_offset,(void *)p); |
} else { |
/* release now */ |
RM_intern_release(p, lev); |
602,13 → 574,10 |
iq_priority_insert(p,&lev->ready); |
proc_table[p].status = RM_READY; |
|
td->dl_timer = -1; |
|
td->period = job->period; |
|
if (td->dl_timer != -1) { |
kern_event_delete(td->dl_timer); |
td->dl_timer = -1; |
} |
|
if (!job->noraiseexc) { |
td->dl_timer = kern_event_post(iq_query_timespec(p, &lev->ready), |
RM_timer_guest_deadline,(void *)p); |
660,7 → 629,6 |
{ |
LEVEL l; /* the level that we register */ |
RM_level_des *lev; /* for readableness only */ |
int i; |
|
printk("RM_register_level\n"); |
|
703,18 → 671,6 |
|
lev->U = 0; |
|
for (i=0;i<MAX_PROC;i++) { |
RM_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; |
} |
|