53,9 → 53,6 |
|
#define POSIXSTAR_CHANGE_LEVEL 1 |
|
/* flags */ |
#define POSIXSTAR_FLAG_NOPREEMPT 4 |
|
/*+ the level redefinition for the Round Robin level +*/ |
typedef struct { |
level_des l; /*+ the standard level descriptor +*/ |
75,8 → 72,6 |
|
int budget[MAX_PROC]; |
|
int flag[MAX_PROC]; |
|
PID activated; |
int scheduling_level; |
int cap_lev; |
103,10 → 98,6 |
|
int prio; |
|
|
/* check if the task is preempteble or not */ |
if (lev->flag[lev->activated] & POSIXSTAR_FLAG_NOPREEMPT) return; |
|
prio = lev->maxpriority; |
|
for (;;) { |
218,8 → 209,7 |
proc_table[p].avail_time = lev->slice; |
proc_table[p].wcet = lev->slice; |
} |
|
lev->flag[p] = 0; |
|
#if defined POSIXSTAR_DEBUG |
kern_printf("(slice %d)", proc_table[p].wcet); |
#endif |
609,17 → 599,3 |
return 0; |
} |
|
|
void POSIXSTAR_set_nopreemtive_current(LEVEL l) { |
|
POSIXSTAR_level_des *lev = (POSIXSTAR_level_des *)(level_table[l]); |
|
lev->flag[lev->activated]|=POSIXSTAR_FLAG_NOPREEMPT; |
} |
|
void POSIXSTAR_unset_nopreemtive_current(LEVEL l) { |
|
POSIXSTAR_level_des *lev = (POSIXSTAR_level_des *)(level_table[l]); |
|
lev->flag[lev->activated]&=~POSIXSTAR_FLAG_NOPREEMPT; |
} |