Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 736 → Rev 737

/shark/trunk/kernel/modules/elastic.c
5,7 → 5,7
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Authors:
* Giacomo Guidi <giacomo@gandalf.sssup.it>
* Mauro Marinoni
* Anton Cervin
147,6 → 147,7
job_task_default_model(job, et->dline);
level_table[lev->scheduling_level]->
private_insert(lev->scheduling_level, p, (TASK_MODEL *)&job);
et->flags |= ELASTIC_JOB_PRESENT;
}
 
 
252,7 → 253,7
if (et->U < et->oldU) {
/* Task has been compressed. Change its deadline NOW! */
if (et->flags & ELASTIC_JOB_PRESENT) {
/* Remove job from level and change its deadline */
/* Remove job from level */
level_table[lev->scheduling_level]->
private_extract(lev->scheduling_level, i);
}
296,8 → 297,6
{
ELASTIC_level_des *lev = (ELASTIC_level_des *)(level_table[l]);
 
return 1;
 
if (*freebandwidth >= lev->U) {
*freebandwidth -= (unsigned int)lev->U;
return 1;
304,6 → 303,7
} else {
return 0;
}
 
}
 
 
437,6 → 437,7
static int ELASTIC_public_message(LEVEL l, PID p, void *m)
{
ELASTIC_level_des *lev = (ELASTIC_level_des *)(level_table[l]);
ELASTIC_task_descr *et = &lev->elist[p];
 
switch((long)(m)) {
 
444,6 → 445,7
 
level_table[lev->scheduling_level]->
private_extract(lev->scheduling_level,p);
et->flags &= ~ELASTIC_JOB_PRESENT;
 
proc_table[p].status = ELASTIC_IDLE;
 
456,6 → 458,7
 
level_table[ lev->scheduling_level ]->
private_extract(lev->scheduling_level,p);
et->flags &= ~ELASTIC_JOB_PRESENT;
 
proc_table[p].status = SLEEP;
 
472,9 → 475,11
static void ELASTIC_public_end(LEVEL l, PID p)
{
ELASTIC_level_des *lev = (ELASTIC_level_des *)(level_table[l]);
ELASTIC_task_descr *et = &lev->elist[p];
 
level_table[ lev->scheduling_level ]->
private_extract(lev->scheduling_level,p);
et->flags &= ~ELASTIC_JOB_PRESENT;
 
}
 
550,7 → 555,7
saveE = et->E;
saveU = et->U;
 
et->E = 0; /* set elasticity to zero to make correct compression */
et->E = 0; /* set elasticity to zero to force period */
et->U = ((long long)MAX_BANDWIDTH * (long long)et->C)/period;
if (ELASTIC_compress(lev) == -1) {
573,13 → 578,14
SYS_FLAGS f;
ELASTIC_level_des *lev;
lev = (ELASTIC_level_des *)level_table[proc_table[p].task_level];
TIME retval;
 
f = kern_fsave();
 
if (lev->elist[p].flags & ELASTIC_PRESENT) {
 
retval = lev->elist[p].T;
kern_frestore(f);
return lev->elist[p].T;
return retval;
 
} else {
 
590,8 → 596,8
 
}
 
int ELASTIC_set_E(PID p, int E) {
int ELASTIC_set_E(PID p, int E)
{
SYS_FLAGS f;
ELASTIC_level_des *lev = (ELASTIC_level_des *)level_table[proc_table[p].task_level];
ELASTIC_task_descr *et = &lev->elist[p];
598,12 → 604,12
int saveE;
 
f = kern_fsave();
if (et->flags & ELASTIC_PRESENT) {
saveE = et->E;
et->E = E;
et->E = E;
if (ELASTIC_compress(lev) == -1) {
#ifdef ELASTIC_DEBUG
cprintf("ELASTIC_set_E failed: could not compress\n");
611,45 → 617,40
et->E = saveE;
kern_frestore(f);
return -1;
}
kern_frestore(f);
return 0;
} else {
 
kern_frestore(f);
return -1;
}
}
 
int ELASTIC_get_E(PID p) {
 
SYS_FLAGS f;
ELASTIC_level_des *lev;
lev = (ELASTIC_level_des *)level_table[proc_table[p].task_level];
 
f = kern_fsave();
 
if (lev->elist[p].flags & ELASTIC_PRESENT) {
 
kern_frestore(f);
return lev->elist[p].E;
 
} else {
 
kern_frestore(f);
return -1;
}
}
 
int ELASTIC_set_beta(PID p, int beta) {
 
SYS_FLAGS f;
ELASTIC_level_des *lev = (ELASTIC_level_des *)level_table[proc_table[p].task_level];
ELASTIC_task_descr *et = &lev->elist[p];
656,12 → 657,13
int saveBeta;
 
f = kern_fsave();
 
if (et->flags & ELASTIC_PRESENT) {
 
saveBeta = et->beta;
et->beta = beta;
 
et->beta = beta;
 
if (ELASTIC_compress(lev) == -1) {
#ifdef ELASTIC_DEBUG
cprintf("ELASTIC_set_beta failed: could not compress\n");
669,44 → 671,44
et->beta = saveBeta;
kern_frestore(f);
return -1;
}
 
kern_frestore(f);
return 0;
 
} else {
 
kern_frestore(f);
return -1;
 
}
 
}
 
int ELASTIC_get_beta(PID p) {
 
SYS_FLAGS f;
ELASTIC_level_des *lev = (ELASTIC_level_des *)level_table[proc_table[p].task_level];
int retval;
 
f = kern_fsave();
 
if (lev->elist[p].flags & ELASTIC_PRESENT) {
retval = lev->elist[p].beta;
kern_frestore(f);
return lev->elist[p].beta;
return retval;
 
} else {
 
kern_frestore(f);
return -1;
 
}
 
}
 
int ELASTIC_set_bandwidth(LEVEL level, ext_bandwidth_t U) {
 
SYS_FLAGS f;
ELASTIC_level_des *lev = (ELASTIC_level_des *)level_table[level];
721,16 → 723,16
kern_frestore(f);
return -1;
}
 
kern_frestore(f);
return 0;
 
}
 
ext_bandwidth_t ELASTIC_get_bandwidth(LEVEL level) {
 
ELASTIC_level_des *lev = (ELASTIC_level_des *)level_table[level];;
return lev->U;
 
}