138,8 → 138,8 |
ADDUSEC2TIMESPEC(et->T, &et->dline); |
|
#ifdef ELASTIC_DEBUG |
cprintf("At %s: activating %s; rel=%s; dl=%s\n", pnow(), proc_table[p].name, |
ptime1(&et->release), ptime2(&et->dline)); |
/* cprintf("At %s: activating %s; rel=%s; dl=%s\n", pnow(), proc_table[p].name, |
ptime1(&et->release), ptime2(&et->dline)); */ |
#endif |
|
mul32div32to32(et->C,lev->c_scaling_factor,SCALING_UNIT,proc_table[p].avail_time); |
498,8 → 498,9 |
ELASTIC_level_des *lev = (ELASTIC_level_des *)(level_table[l]); |
ELASTIC_task_descr *et = &lev->elist[p]; |
|
if (et->dltimer != -1) |
if (et->dltimer != -1) { |
kern_event_delete(et->dltimer); |
} |
|
if (et->flags & ELASTIC_JOB_PRESENT) { |
level_table[ lev->scheduling_level ]-> |
566,8 → 567,9 |
} |
|
|
/* Force the period of task p to a given value */ |
|
/* Force the period of task p to a given value (between Tmin and Tmax) */ |
|
int ELASTIC_set_period(PID p, TIME period) { |
|
SYS_FLAGS f; |
574,6 → 576,7 |
int saveE; |
unsigned int temp; |
ext_bandwidth_t saveU; |
TIME saveT; |
|
f = kern_fsave(); |
|
581,19 → 584,27 |
lev = (ELASTIC_level_des *)level_table[proc_table[p].task_level]; |
ELASTIC_task_descr *et = &lev->elist[p]; |
|
if (period < et->Tmin || period > et->Tmax) { |
kern_frestore(f); |
return -1; |
} |
|
saveE = et->E; |
saveU = et->U; |
saveT = et->T; |
|
et->E = 0; /* set elasticity to zero to force period */ |
mul32div32to32(et->C,lev->c_scaling_factor,SCALING_UNIT,temp); |
et->U = ((long long)MAX_BANDWIDTH * (long long)(temp))/((long long)period); |
et->T = period; |
|
if (ELASTIC_compress(lev) == -1) { |
#ifdef ELASTIC_DEBUG |
cprintf("ELASTIC_set_period failed: could not compress\n"); |
cprintf("ELASTIC_set_period failed!\n"); |
#endif |
et->E = saveE; |
et->U = saveU; |
et->T = saveT; |
kern_frestore(f); |
return -1; |
} |
633,6 → 644,9 |
ELASTIC_level_des *lev = (ELASTIC_level_des *)level_table[proc_table[p].task_level]; |
ELASTIC_task_descr *et = &lev->elist[p]; |
TIME saveTmin; |
TIME saveT; |
ext_bandwidth_t saveU; |
unsigned int temp; |
|
f = kern_fsave(); |
|
639,13 → 653,23 |
if (et->flags & ELASTIC_PRESENT) { |
|
saveTmin = et->Tmin; |
saveT = et->T; |
saveU = et->U; |
|
et->Tmin = Tmin; |
if (Tmin > et->T) { |
et->T = Tmin; |
mul32div32to32(et->C,lev->c_scaling_factor,SCALING_UNIT,temp); |
et->U = ((long long)MAX_BANDWIDTH * (long long)(temp))/((long long)Tmin); |
} |
|
if (ELASTIC_compress(lev) == -1) { |
#ifdef ELASTIC_DEBUG |
cprintf("ELASTIC_set_Tmin failed: could not compress\n"); |
#endif |
et->Tmin = saveTmin; |
et->T = saveT; |
et->U = saveU; |
kern_frestore(f); |
return -1; |
} |
685,6 → 709,53 |
} |
|
|
int ELASTIC_set_Tmax(PID p, TIME Tmax) |
{ |
SYS_FLAGS f; |
ELASTIC_level_des *lev = (ELASTIC_level_des *)level_table[proc_table[p].task_level]; |
ELASTIC_task_descr *et = &lev->elist[p]; |
TIME saveTmax; |
TIME saveT; |
ext_bandwidth_t saveU; |
unsigned int temp; |
|
f = kern_fsave(); |
|
if (et->flags & ELASTIC_PRESENT) { |
|
saveTmax = et->Tmax; |
saveT = et->T; |
saveU = et->U; |
|
et->Tmax = Tmax; |
if (Tmax < et->T) { |
et->T = Tmax; |
mul32div32to32(et->C,lev->c_scaling_factor,SCALING_UNIT,temp); |
et->U = ((long long)MAX_BANDWIDTH * (long long)(temp))/((long long)Tmax); |
} |
|
if (ELASTIC_compress(lev) == -1) { |
#ifdef ELASTIC_DEBUG |
cprintf("ELASTIC_set_Tmax failed: could not compress\n"); |
#endif |
et->Tmax = saveTmax; |
et->T = saveT; |
et->U = saveU; |
kern_frestore(f); |
return -1; |
} |
|
kern_frestore(f); |
return 0; |
|
} else { |
|
kern_frestore(f); |
return -1; |
} |
} |
|
|
int ELASTIC_get_Tmax(PID p) { |
|
SYS_FLAGS f; |
708,7 → 779,48 |
|
} |
|
int ELASTIC_set_C(PID p, TIME C) |
{ |
SYS_FLAGS f; |
ELASTIC_level_des *lev = (ELASTIC_level_des *)level_table[proc_table[p].task_level]; |
ELASTIC_task_descr *et = &lev->elist[p]; |
TIME saveC; |
ext_bandwidth_t saveU; |
unsigned int temp; |
|
f = kern_fsave(); |
|
if (et->flags & ELASTIC_PRESENT) { |
|
saveC = et->C; |
saveU = et->U; |
|
et->C = C; |
|
mul32div32to32(et->C,lev->c_scaling_factor,SCALING_UNIT,temp); |
et->U = ((long long)MAX_BANDWIDTH * (long long)(temp))/((long long)et->T); |
|
if (ELASTIC_compress(lev) == -1) { |
#ifdef ELASTIC_DEBUG |
cprintf("ELASTIC_set_C failed: could not compress\n"); |
#endif |
et->C = saveC; |
et->U = saveU; |
kern_frestore(f); |
return -1; |
} |
|
kern_frestore(f); |
return 0; |
|
} else { |
|
kern_frestore(f); |
return -1; |
} |
} |
|
|
int ELASTIC_get_C(PID p) { |
|
SYS_FLAGS f; |