44,6 → 44,7 |
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*/ |
105,11 → 106,8 |
if (b->avail > b->Q) b->avail = b->Q; |
|
if (b->flags==GRUBSTAR_RECLAIMING && b->avail>0) { |
bandwidth_t bw; |
bw = (MAX_BANDWIDTH / b->T) * b->Q; |
lev->Uf += b->Ub; |
|
lev->Uf += bw; |
|
#ifdef GRUBSTAR_DEBUG |
kern_printf("BW=%ld, U=%u, Uf=%u",(long)bw, lev->U, lev->Uf); |
#endif |
166,19 → 164,13 |
|
b->vtimer = NIL; |
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; |
|
#ifdef GRUBSTAR_DEBUG |
kern_printf("bw=%ld, U=%u, Uf=%u",(long)bw, lev->U, lev->Uf); |
#endif |
|
|
} |
|
#ifdef GRUBSTAR_DEBUG |
214,12 → 206,8 |
} |
|
if (b->flags==GRUBSTAR_RECLAIMING) { |
bandwidth_t bw; |
lev->Uf += b->Ub; |
|
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 |
340,11 → 328,7 |
b->avail = b->Q; |
|
if (b->flags == GRUBSTAR_RECLAIMING) { |
bandwidth_t bw; |
|
bw = (MAX_BANDWIDTH / b->T) * b->Q; |
lev->Uf += bw; |
|
lev->Uf += b->Ub; |
} |
|
b->flags = GRUBSTAR_ACTIVE; |
531,14 → 515,8 |
case (long)(NULL): |
|
if (b->current == NIL && iq_query_first(&(b->tasks)) == NIL && b->flags != GRUBSTAR_RECLAIMING) { |
bandwidth_t bw; |
|
b->flags = GRUBSTAR_RECLAIMING; |
|
bw = (MAX_BANDWIDTH / b->T) * b->Q; |
|
lev->Uf -= bw; |
|
lev->Uf -= b->Ub; |
} |
|
break; |
583,6 → 561,7 |
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; |
634,6 → 613,7 |
|
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; |
662,11 → 642,13 |
|
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; |
|
679,6 → 661,7 |
|
lev->b[budget].Q = Q; |
lev->b[budget].T = T; |
lev->b[budget].Ub = (MAX_BANDWIDTH / T) * Q; |
|
return 0; |
|