20,11 → 20,11 |
|
/** |
------------ |
CVS : $Id: sem.c,v 1.2 2002-11-11 08:32:07 pj Exp $ |
CVS : $Id: sem.c,v 1.3 2003-01-07 17:07:51 pj Exp $ |
|
File: $File$ |
Revision: $Revision: 1.2 $ |
Last update: $Date: 2002-11-11 08:32:07 $ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-01-07 17:07:51 $ |
------------ |
|
This file contains the Hartik 3.3.1 Semaphore functions |
115,7 → 115,7 |
iq_extract(i,&sem_table[ sp_table[i].sem ].blocked); |
|
l = proc_table[i].task_level; |
level_table[l]->task_insert(l,i); |
level_table[l]->public_unblock(l,i); |
|
return 1; |
} |
350,25 → 350,14 |
if (s1->blocked.first != NIL || s1->count == 0) { |
/* We must block exec task */ |
LEVEL l; /* for readableness only */ |
TIME tx; /* a dummy TIME for timespec operations */ |
struct timespec ty; /* a dummy timespec for timespec operations */ |
|
/* tracer stuff */ |
trc_logevent(TRC_SEM_WAIT,s); |
|
/* SAME AS SCHEDULER... manage the capacity event and the load_info */ |
ll_gettime(TIME_EXACT, &schedule_time); |
SUBTIMESPEC(&schedule_time, &cap_lasttime, &ty); |
tx = TIMESPEC2USEC(&ty); |
proc_table[exec_shadow].avail_time -= tx; |
jet_update_slice(tx); |
if (cap_timer != NIL) { |
event_delete(cap_timer); |
cap_timer = NIL; |
} |
|
kern_epilogue_macro(); |
|
l = proc_table[exec_shadow].task_level; |
level_table[l]->task_extract(l,exec_shadow); |
level_table[l]->public_block(l,exec_shadow); |
|
/* we insert the task in the semaphore queue */ |
proc_table[exec_shadow].status = WAIT_SEM; |
476,25 → 465,14 |
if (s1->blocked.first != NIL || s1->count < n) { |
/* We must block exec task */ |
LEVEL l; /* for readableness only */ |
TIME tx; /* a dummy TIME for timespec operations */ |
struct timespec ty; /* a dummy timespec for timespec operations */ |
|
/* tracer */ |
trc_logevent(TRC_SEM_WAIT,s); |
|
/* SAME AS SCHEDULER... manage the capacity event and the load_info */ |
ll_gettime(TIME_EXACT, &schedule_time); |
SUBTIMESPEC(&schedule_time, &cap_lasttime, &ty); |
tx = TIMESPEC2USEC(&ty); |
proc_table[exec_shadow].avail_time -= tx; |
jet_update_slice(tx); |
if (cap_timer != NIL) { |
event_delete(cap_timer); |
cap_timer = NIL; |
} |
|
kern_epilogue_macro(); |
|
l = proc_table[exec_shadow].task_level; |
level_table[l]->task_extract(l,exec_shadow); |
level_table[l]->public_block(l,exec_shadow); |
|
/* we insert the task in the semaphore queue */ |
proc_table[exec_shadow].status = WAIT_SEM; |
557,7 → 535,7 |
iq_extract(p,&s1->blocked); |
|
l = proc_table[p].task_level; |
level_table[l]->task_insert(l,p); |
level_table[l]->public_unblock(l,p); |
/* only a task can be awaken */ |
/* Preempt if necessary */ |
event_need_reschedule(); |
582,7 → 560,7 |
iq_extract(p,&s1->blocked); |
|
l = proc_table[p].task_level; |
level_table[l]->task_insert(l,p); |
level_table[l]->public_unblock(l,p); |
/* only a task can be awaken */ |
/* Preempt if necessary */ |
scheduler(); |
630,7 → 608,7 |
iq_extract(p,&s1->blocked); |
|
l = proc_table[p].task_level; |
level_table[l]->task_insert(l,p); |
level_table[l]->public_unblock(l,p); |
|
/* Next task to wake */ |
p = s1->blocked.first; |
660,7 → 638,7 |
iq_extract(p,&s1->blocked); |
|
l = proc_table[p].task_level; |
level_table[l]->task_insert(l,p); |
level_table[l]->public_unblock(l,p); |
|
/* Next task to wake */ |
p = s1->blocked.first; |