Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 866 → Rev 867

/shark/trunk/ports/first/modules/grubstar.c
47,6 → 47,12
TIME Q; /* Budget */
TIME T; /* Period */
TIME D; /* Deadline */
 
/* Negotiate parameter */
TIME N_Q; /* Negotiate budget */
TIME N_T; /* Negotiate Period */
TIME N_D; /* Negotiate Deadline */
 
bandwidth_t Ub; /* Bandwidth */
 
struct timespec dline; /* deadline */
63,6 → 69,7
PID current; /* the task currently put in execution */
int flags;
int negotiation;
 
IQUEUE tasks; /* a FIFO queue for the tasks handled
using the budget */
87,6 → 94,7
 
int cap_lev;
struct timespec cap_lasttime;
int negotiation_in_progress;
 
LEVEL scheduling_level;
 
108,6 → 116,19
b->replenish_timer = NIL;
 
b->last_reclaiming = 0;
if (b->negotiation) {
lev->negotiation_in_progress--;
b->negotiation=0;
b->Q=b->N_Q;
b->T=b->N_T;
b->D=b->N_D;
 
b->N_Q=0;
b->N_T=0;
b->N_D=0;
}
 
b->avail += b->Q;
if (b->avail > b->Q) b->avail = b->Q;
 
214,6 → 235,18
ADDUSEC2TIMESPEC(b->T, &b->replenish);
TIMESPEC_ASSIGN(&b->dline, acttime);
ADDUSEC2TIMESPEC(b->D, &b->dline);
if (b->negotiation) {
lev->negotiation_in_progress--;
b->negotiation=0;
b->Q=b->N_Q;
b->T=b->N_T;
b->D=b->N_D;
b->N_Q=0;
b->N_T=0;
b->N_D=0;
}
 
b->avail = b->Q;
b->last_reclaiming = 0;
}
322,6 → 355,17
ADDUSEC2TIMESPEC(b->T, &b->replenish);
 
/* and the capacity */
if (b->negotiation) {
lev->negotiation_in_progress--;
b->negotiation=0;
b->Q=b->N_Q;
b->T=b->N_T;
b->D=b->N_D;
b->N_Q=0;
b->N_T=0;
b->N_D=0;
}
b->avail = b->Q;
b->last_reclaiming = 0;
600,6 → 644,11
lev->b[i].Q = 0;
lev->b[i].T = 0;
lev->b[i].D = 0;
lev->b[i].N_Q = 0;
lev->b[i].N_T = 0;
lev->b[i].N_D = 0;
 
lev->b[i].Ub = 0;
NULL_TIMESPEC(&lev->b[i].dline);
NULL_TIMESPEC(&lev->b[i].replenish);
610,6 → 659,7
lev->b[i].flags = GRUBSTAR_ACTIVE;
lev->b[i].l = l;
lev->b[i].last_reclaiming = 0;
lev->b[i].negotiation = 0;
iq_init(&lev->b[i].tasks, NULL, 0);
}
 
619,6 → 669,7
for (i=0; i<MAX_PROC; i++)
lev->tb[i] = NIL;
 
lev->negotiation_in_progress=0;
lev->U = 0;
lev->Uf = 0;
lev->cap_lev = NIL;
655,12 → 706,18
lev->b[r].Q = Q;
lev->b[r].T = T;
lev->b[r].D = D;
 
lev->b[r].N_Q = 0;
lev->b[r].N_T = 0;
lev->b[r].N_D = 0;
lev->b[r].negotiation=0;
 
lev->b[r].Ub = b;
lev->b[r].avail = Q;
lev->b[r].flags = GRUBSTAR_RECLAIMING;
lev->b[r].loc_sched_id = scheduler_id;
lev->b[r].loc_sched_level = local_scheduler_level;
lev->b[r].last_reclaiming = 0;
lev->b[r].last_reclaiming = 0;
 
return r;
}
686,6 → 743,13
lev->b[budget].Q = 0;
lev->b[budget].T = 0;
lev->b[budget].D = 0;
 
lev->b[budget].N_Q = 0;
lev->b[budget].N_T = 0;
lev->b[budget].N_D = 0;
 
lev->b[budget].negotiation=0;
 
lev->b[budget].Ub = 0;
NULL_TIMESPEC(&lev->b[budget].dline);
NULL_TIMESPEC(&lev->b[budget].replenish);
714,10 → 778,24
lev->U -= b;
if (lev->b[budget].flags != GRUBSTAR_RECLAIMING) lev->Uf -= b;
 
lev->b[budget].Q = Q;
lev->b[budget].T = T;
lev->b[budget].D = D;
lev->b[budget].N_Q = Q;
lev->b[budget].N_T = T;
lev->b[budget].N_D = D;
 
if (lev->b[budget].current!=NIL) {
lev->b[budget].N_Q = Q;
lev->b[budget].N_T = T;
lev->b[budget].N_D = D;
if (!lev->b[budget].negotiation) {
lev->negotiation_in_progress++;
lev->b[budget].negotiation=1;
}
} else {
lev->b[budget].Q = Q;
lev->b[budget].T = T;
lev->b[budget].D = D;
}
 
mul32div32to32(MAX_BANDWIDTH,Q,T,lev->b[budget].Ub);
 
lev->U += lev->b[budget].Ub;
740,13 → 818,16
{
 
GRUBSTAR_level_des *lev = (GRUBSTAR_level_des *)(level_table[l]);
*Q = lev->b[budget].Q;
*T = lev->b[budget].T;
*D = lev->b[budget].D;
 
return 0;
if (lev->b[budget].Q) {
if (Q) *Q = lev->b[budget].Q;
if (T) *T = lev->b[budget].T;
if (D) *D = lev->b[budget].D;
return 0;
}
 
return -1;
 
}
 
int GRUBSTAR_get_last_reclaiming(LEVEL l, PID p)
835,4 → 916,10
}
 
int GRUBSTAR_get_renegotiation_status(LEVEL l, int budget)
{
GRUBSTAR_level_des *lev = (GRUBSTAR_level_des *)(level_table[l]);
if (lev->negotiation_in_progress) return 1;
else return 0;
}