44,7 → 44,6 |
struct budget_struct { |
TIME Q; /* budget */ |
TIME T; /* period */ |
bandwidth_t Ub; /* bandwidth */ |
|
struct timespec dline; /* deadline */ |
int dline_timer; /* oslib event for budget reactivation*/ |
106,8 → 105,11 |
if (b->avail > b->Q) b->avail = b->Q; |
|
if (b->flags==GRUBSTAR_RECLAIMING && b->avail>0) { |
lev->Uf += b->Ub; |
bandwidth_t bw; |
bw = (MAX_BANDWIDTH / b->T) * b->Q; |
|
lev->Uf += bw; |
|
#ifdef GRUBSTAR_DEBUG |
kern_printf("BW=%ld, U=%u, Uf=%u",(long)bw, lev->U, lev->Uf); |
#endif |
164,13 → 166,19 |
|
b->vtimer = NIL; |
if (b->current == NIL && iq_query_first(&(b->tasks)) == NIL && b->flags != GRUBSTAR_RECLAIMING) { |
b->flags = GRUBSTAR_RECLAIMING; |
lev->Uf -= b->Ub; |
bandwidth_t bw; |
|
b->flags=GRUBSTAR_RECLAIMING; |
|
bw = (MAX_BANDWIDTH / b->T) * b->Q; |
|
lev->Uf -= bw; |
|
#ifdef GRUBSTAR_DEBUG |
kern_printf("bw=%ld, U=%u, Uf=%u",(long)bw, lev->U, lev->Uf); |
#endif |
|
|
} |
|
#ifdef GRUBSTAR_DEBUG |
206,7 → 214,11 |
} |
|
if (b->flags==GRUBSTAR_RECLAIMING) { |
lev->Uf += b->Ub; |
bandwidth_t bw; |
|
bw = (MAX_BANDWIDTH / b->T) * b->Q; |
|
lev->Uf += bw; |
|
#ifdef grubSTAR_DEBUG |
kern_printf("BW=%ld, U=%u, Uf=%u",(long)bw, lev->U, lev->Uf); |
328,7 → 340,11 |
b->avail = b->Q; |
|
if (b->flags == GRUBSTAR_RECLAIMING) { |
lev->Uf += b->Ub; |
bandwidth_t bw; |
|
bw = (MAX_BANDWIDTH / b->T) * b->Q; |
lev->Uf += bw; |
|
} |
|
b->flags = GRUBSTAR_ACTIVE; |
515,8 → 531,14 |
case (long)(NULL): |
|
if (b->current == NIL && iq_query_first(&(b->tasks)) == NIL && b->flags != GRUBSTAR_RECLAIMING) { |
bandwidth_t bw; |
|
b->flags = GRUBSTAR_RECLAIMING; |
lev->Uf -= b->Ub; |
|
bw = (MAX_BANDWIDTH / b->T) * b->Q; |
|
lev->Uf -= bw; |
|
} |
|
break; |
561,7 → 583,6 |
for (i=0; i<n; i++) { |
lev->b[i].Q = 0; |
lev->b[i].T = 0; |
lev->b[i].Ub = 0; |
NULL_TIMESPEC(&lev->b[i].dline); |
lev->b[i].dline_timer = NIL; |
lev->b[i].vtimer=NIL; |
613,7 → 634,6 |
|
lev->b[r].Q = Q; |
lev->b[r].T = T; |
lev->b[r].Ub = b; |
lev->b[r].avail = Q; |
lev->b[r].flags = GRUBSTAR_ACTIVE; |
lev->b[r].loc_sched_id = scheduler_id; |
642,13 → 662,11 |
|
lev->b[budget].Q = 0; |
lev->b[budget].T = 0; |
lev->b[budget].Ub = 0; |
NULL_TIMESPEC(&lev->b[budget].dline); |
lev->b[budget].dline_timer = NIL; |
lev->b[budget].avail = 0; |
lev->b[budget].current = -1; |
lev->b[budget].flags = GRUBSTAR_ACTIVE; |
lev->b[budget].last_reclaiming = 0; |
|
return 0; |
|
661,7 → 679,6 |
|
lev->b[budget].Q = Q; |
lev->b[budget].T = T; |
lev->b[budget].Ub = (MAX_BANDWIDTH / T) * Q; |
|
return 0; |
|