Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 338 → Rev 339

/shark/trunk/ports/first/include/fsf_server.h
3,6 → 3,8
 
#define FSF_GRUBSTAR
 
int fsf_get_server_level(void);
 
#ifdef FSF_CBSSTAR
 
#include "cbsstar.h"
/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
/shark/trunk/ports/first/first-server.c
252,6 → 252,13
 
}
 
int fsf_get_server_level(void)
{
 
return fsf_server_level;
 
}
 
int fsf_cancel_contract
(fsf_server_id_t *server)
{