/shark/trunk/ports/first/modules/mpegstar.c |
---|
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); |
/shark/trunk/ports/first/modules/grubstar.c |
---|
185,7 → 185,9 |
t3.tv_sec = t / 1000000; |
t3.tv_nsec = (t % 1000000) * 1000; |
kern_printf("(GS:Act %d)",p); |
#ifdef GRUBSTAR_DEBUG |
kern_printf("(GS:Act %d)",p); |
#endif |
if (b->vtimer!=NIL) kern_event_delete(b->vtimer); |
b->vtimer=NIL; |
340,9 → 342,9 |
} |
budget = (BUDGET_TASK_MODEL *)m; |
//#ifdef GRUBSTAR_DEBUG |
#ifdef GRUBSTAR_DEBUG |
kern_printf("(GS:PriIns:%d:%d", p, budget->b); |
//#endif |
#endif |
if (budget->b == -1) |
return; |
349,8 → 351,6 |
lev->tb[p] = budget->b; |
kern_printf("(GS:Curr:%d)", lev->b[budget->b].current); |
if (lev->b[budget->b].current == NIL && lev->b[budget->b].flags ) { |
/* This is the first task in the budget, |
the task have to be inserted into the master module */ |
364,9 → 364,9 |
iq_insertlast(p,&lev->b[budget->b].tasks); |
} |
//#ifdef GRUBSTAR_DEBUG |
#ifdef GRUBSTAR_DEBUG |
kern_printf(")"); |
//#endif |
#endif |
} |
374,9 → 374,9 |
{ |
GRUBSTAR_level_des *lev = (GRUBSTAR_level_des *)(level_table[l]); |
//#ifdef GRUBSTAR_DEBUG |
#ifdef GRUBSTAR_DEBUG |
kern_printf("(GS:Ext:%d)", p); |
//#endif |
#endif |
/* a task is removed from execution for some reasons. It must be |
that it is the first in its budget queue (only the first task in |
385,8 → 385,6 |
/* remove the task from execution (or from the ready queue) */ |
if (lev->b[lev->tb[p]].current == p) { |
kern_printf("(GS:Ext2:%d)", p); |
GRUBSTAR_account_capacity(lev,p); |
/* remove the task from the master module */ |
level_table[ lev->scheduling_level ]-> |
402,8 → 400,6 |
PID n; |
struct timespec t; |
kern_printf("(GS:Ext3:%d)", p); |
kern_gettime(&t); |
n = iq_getfirst(&lev->b[lev->tb[p]].tasks); |
GRUBSTAR_activation(lev,n,&t); // it modifies b[lev->tb[p]].current |
500,9 → 496,9 |
case (long)(NULL): |
//#ifdef GRUBSTAR_DEBUG |
#ifdef GRUBSTAR_DEBUG |
kern_printf("(GS:EndCycle:%d:%d)",p,lev->tb[p]); |
//#endif |
#endif |
if (b->current == NIL && iq_query_first(&(b->tasks)) == NIL && b->flags != GRUBSTAR_RECLAIMING) { |
b->flags = GRUBSTAR_RECLAIMING; |
584,9 → 580,9 |
GRUBSTAR_level_des *lev = (GRUBSTAR_level_des *)(level_table[l]); |
int r; |
//#ifdef GRUBSTAR_DEBUG |
#ifdef GRUBSTAR_DEBUG |
kern_printf("(GS:SetBud)"); |
//#endif |
#endif |
for (r = 0; r < lev->n; r++) |
if (lev->b[r].Q == 0) break; |
611,8 → 607,6 |
lev->b[r].loc_sched_level = local_scheduler_level; |
lev->b[r].last_reclaiming = 0; |
kern_printf("(GS:EndBud %d)",r); |
return r; |
} |
else |