84,7 → 84,9 |
|
/* flags */ |
#define EDFSTAR_FLAG_NORAISEEXC 2 |
#define EDFSTAR_FLAG_SPORADIC 1 |
|
|
/* the level redefinition for the Earliest Deadline First level */ |
typedef struct { |
level_des l; /* the standard level descriptor */ |
249,7 → 251,7 |
if (m->pclass != HARD_PCLASS) return -1; |
if (m->level != 0 && m->level != l) return -1; |
h = (HARD_TASK_MODEL *)m; |
if (!h->wcet || !h->mit || h->periodicity != PERIODIC) return -1; |
if (!h->wcet || !h->mit /* || h->periodicity != PERIODIC */) return -1; |
/* now we know that m is a valid model */ |
|
|
260,6 → 262,10 |
lev->period[p] = h->mit; |
|
lev->flag[p] = 0; |
|
if (h->periodicity == APERIODIC) |
lev->flag[p] |= EDFSTAR_FLAG_SPORADIC; |
|
lev->deadline_timer[p] = -1; |
lev->dline_miss[p] = 0; |
lev->wcet_miss[p] = 0; |
378,7 → 384,12 |
/* save activation (only if needed... */ |
if (proc_table[p].status != SLEEP) { |
/* a periodic task cannot be activated when it is already active */ |
/* but aperiodic task can be reactivate before */ |
if (lev->flag[p] & EDFSTAR_FLAG_SPORADIC) |
lev->nact[p]++; |
else |
kern_raise(XACTIVATION,p); |
|
return; |
} |
|
517,6 → 528,7 |
proc_table[p].status = FREE; |
|
iq_insertfirst(p,&freedesc); |
lev->activated=NIL; |
|
if (lev->deadline_timer[p] != -1) { |
kern_event_delete(lev->deadline_timer[p]); |