62,19 → 62,9 |
int current; |
|
int scheduling_level; |
int cap_lev; |
|
} MPEGSTAR_level_des; |
|
|
|
static void capacity_handler(void *l) |
{ |
MPEGSTAR_level_des *lev = l; |
lev->cap_lev = NIL; |
event_need_reschedule(); |
} |
|
static int MPEGSTAR_public_eligible(LEVEL l, PID p) |
{ |
MPEGSTAR_level_des *lev = (MPEGSTAR_level_des *)(level_table[l]); |
108,7 → 98,6 |
static void MPEGSTAR_public_dispatch(LEVEL l, PID p, int nostop) |
{ |
MPEGSTAR_level_des *lev = (MPEGSTAR_level_des *)(level_table[l]); |
struct timespec ty; |
|
#ifdef MPEGSTAR_DEBUG |
kern_printf("(MS:Dsp:%d)",p); |
115,14 → 104,8 |
#endif |
|
if (!nostop) { |
TIMESPEC_ASSIGN(&ty, &schedule_time); |
|
/* ...and finally, we have to post a capacity event on exec task because the shadow_task consume |
* capacity on exe task always */ |
ADDUSEC2TIMESPEC(proc_table[p].avail_time ,&ty); |
lev->cap_lev = kern_event_post(&ty,capacity_handler, lev); |
level_table[ lev->scheduling_level ] -> |
private_dispatch(lev->scheduling_level, p, nostop); |
level_table[ lev->scheduling_level ] -> |
private_dispatch(lev->scheduling_level, p, nostop); |
} |
|
} |
130,10 → 113,6 |
static void MPEGSTAR_public_epilogue(LEVEL l, PID p) |
{ |
MPEGSTAR_level_des *lev = (MPEGSTAR_level_des *)(level_table[l]); |
if (lev->cap_lev!=NIL) { |
kern_event_delete(lev->cap_lev); |
lev->cap_lev=NIL; |
} |
|
#ifdef MPEGSTAR_DEBUG |
kern_printf("(MS:Epi:%d)",p); |
183,13 → 162,10 |
|
lev->current = NIL; |
|
kern_printf("(Ext %d)",p); |
#ifdef MPEGSTAR_DEBUG |
kern_printf("(MS:EndCycle:%d)",p); |
#endif |
|
if (lev->cap_lev != NIL) { |
kern_event_delete(lev->cap_lev); |
lev->cap_lev = NIL; |
} |
|
level_table[ lev->scheduling_level ]-> |
private_extract(lev->scheduling_level, p); |
|
245,6 → 221,8 |
|
lev->budget = NIL; |
lev->current = NIL; |
lev->server_Q = 0; |
lev->server_T = 0; |
|
lev->scheduling_level = master; |
|
281,8 → 259,9 |
|
} |
|
int MPEGSTAR_rescale(LEVEL l, TIME Q, TIME T) |
int MPEGSTAR_rescale(int budget, TIME Q, TIME T) |
{ |
LEVEL l = SERVER_get_local_scheduler_level_from_budget(fsf_get_server_level(),budget); |
MPEGSTAR_level_des *lev = (MPEGSTAR_level_des *)(level_table[l]); |
|
SERVER_adjust_budget(lev->scheduling_level,Q,T,lev->budget); |