/shark/trunk/kernel/int_sem.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: int_sem.c,v 1.3 2003-01-07 17:07:49 pj Exp $ |
CVS : $Id: int_sem.c,v 1.4 2003-11-05 15:05:11 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-01-07 17:07:49 $ |
Revision: $Revision: 1.4 $ |
Last update: $Date: 2003-11-05 15:05:11 $ |
------------ |
Internal semaphores. |
75,12 → 75,10 |
{ |
SYS_FLAGS f; |
//kern_cli(); |
f = kern_fsave(); |
if (s->count) { |
s->count--; |
//kern_sti(); |
kern_frestore(f); |
return; |
} |
114,18 → 112,14 |
{ |
SYS_FLAGS f; |
//kern_cli(); |
f = kern_fsave(); |
if (s->count) { |
s->count--; |
//kern_sti(); |
kern_frestore(f); |
return 0; |
} |
//kern_sti(); |
kern_frestore(f); |
return -1; |
} |
155,7 → 149,6 |
register int returnvalue; |
SYS_FLAGS f; |
//kern_cli(); |
f = kern_fsave(); |
if (s->blocked.first == -1) |
returnvalue = s->count; |
162,7 → 155,6 |
else |
returnvalue = -1; |
//kern_sti(); |
kern_frestore(f); |
return returnvalue; |
} |
/shark/trunk/kernel/activate.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: activate.c,v 1.3 2003-01-07 17:07:48 pj Exp $ |
CVS : $Id: activate.c,v 1.4 2003-11-05 15:05:10 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-01-07 17:07:48 $ |
Revision: $Revision: 1.4 $ |
Last update: $Date: 2003-11-05 15:05:10 $ |
------------ |
task_activate & group_activate |
182,8 → 182,8 |
trc_logevent(TRC_ACTIVATE,&i); |
l = proc_table[i].task_level; |
level_table[l]->public_activate(l,i); |
event_need_reschedule(); |
} |
event_need_reschedule(); |
kern_frestore(f); |
} |
else { |
/shark/trunk/kernel/mqueue.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: mqueue.c,v 1.3 2003-01-07 17:07:49 pj Exp $ |
CVS : $Id: mqueue.c,v 1.4 2003-11-05 15:05:11 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-01-07 17:07:49 $ |
Revision: $Revision: 1.4 $ |
Last update: $Date: 2003-11-05 15:05:11 $ |
------------ |
POSIX message queues |
114,8 → 114,9 |
mode_t m; |
mqd_t mq; |
struct mq_attr *attr; |
SYS_FLAGS f; |
kern_cli(); |
f = kern_fsave(); |
for (i = 0; i < MQ_OPEN_MAX; i++) |
if (mq_table[i].flags & MQ_USED) { |
127,20 → 128,20 |
if (found) { |
if (oflag == (O_CREAT | O_EXCL)) { |
errno = EEXIST; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} else { |
kern_sti(); |
kern_frestore(f); |
return i; |
} |
} else { |
if (!(oflag & O_CREAT)) { |
errno = ENOENT; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} else if (!(oflag & O_RDWR)) { |
errno = EACCES; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} else { |
va_list l; |
155,7 → 156,7 |
mq_table[mq].name = kern_alloc(strlen((char *)name)+1); |
if (!mq_table[mq].name) { |
errno = ENOSPC; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
strcpy(mq_table[mq].name, (char *)name); |
187,7 → 188,7 |
kern_free(mq_table[mq].name,strlen((char *)name)+1); |
errno = ENOSPC; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
199,7 → 200,7 |
mq_table[mq].maxmsg * mq_table[mq].msgsize); |
errno = ENOSPC; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
210,12 → 211,12 |
mq_table[mq].mq_first = 0; |
free_mq = mq_table[mq].next; |
kern_sti(); |
kern_frestore(f); |
return mq; |
} |
else { |
errno = ENOSPC; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
} |
224,13 → 225,15 |
int mq_close(mqd_t mqdes) |
{ |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
if (mqdes < 0 || |
mqdes >= MQ_OPEN_MAX || |
!(mq_table[mqdes].flags & MQ_USED) ) { |
errno = EBADF; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
244,7 → 247,7 |
mq_table[mqdes].next = free_mq; |
free_mq = mqdes; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
252,8 → 255,9 |
{ |
int i; |
int found = 0; |
SYS_FLAGS f; |
kern_cli(); |
f = kern_fsave(); |
for (i = 0; i < MQ_OPEN_MAX; i++) |
if (mq_table[i].flags & MQ_USED) { |
272,11 → 276,11 |
mq_table[i].flags = 0; |
mq_table[i].next = free_mq; |
free_mq = i; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} else { |
errno = ENOENT; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
} |
394,10 → 398,11 |
unsigned int msg_prio) |
{ |
int newmsg; |
SYS_FLAGS f; |
task_testcancel(); |
kern_cli(); |
f = kern_fsave(); |
/* first, if it is the first time that mq_receive or mq_send is called, |
register the cancellation point */ |
411,19 → 416,19 |
mqdes >= MQ_OPEN_MAX || |
!(mq_table[mqdes].flags & MQ_USED) ) { |
errno = EBADF; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
if (msg_len > mq_table[mqdes].msgsize) { |
errno = EMSGSIZE; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
if (msg_prio > MQ_PRIO_MAX) { |
errno = EINVAL; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
432,7 → 437,7 |
/* the message queue is full!!! */ |
if (mq_table[mqdes].flags & O_NONBLOCK) { |
errno = EAGAIN; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
else { |
465,7 → 470,7 |
if (mqproc_table[exec_shadow].intsig) { |
errno = EINTR; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
} |
545,7 → 550,7 |
} |
} |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
555,10 → 560,11 |
int msg; |
PID p; |
ssize_t returnvalue; |
SYS_FLAGS f; |
task_testcancel(); |
kern_cli(); |
f = kern_fsave(); |
/* first, if it is the first time that mq_receive or mq_send is called, |
register the cancellation point */ |
572,13 → 578,13 |
mqdes >= MQ_OPEN_MAX || |
!(mq_table[mqdes].flags & MQ_USED) ) { |
errno = EBADF; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
if (msg_len > mq_table[mqdes].msgsize) { |
errno = EMSGSIZE; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
587,7 → 593,7 |
/* the message queue is empty!!! */ |
if (mq_table[mqdes].flags & O_NONBLOCK) { |
errno = EAGAIN; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
else { |
620,7 → 626,7 |
if (mqproc_table[exec_shadow].intsig) { |
errno = EINTR; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
} |
666,19 → 672,21 |
return returnvalue; |
} |
kern_sti(); |
kern_frestore(f); |
return returnvalue; |
} |
int mq_notify(mqd_t mqdes, const struct sigevent *notification) |
{ |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
if (mqdes < 0 || |
mqdes >= MQ_OPEN_MAX || |
!(mq_table[mqdes].flags & MQ_USED) ) { |
errno = EBADF; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
685,12 → 693,12 |
if (mq_table[mqdes].flags & MQ_NOTIFICATION_PRESENT) { |
if (!notification) { |
mq_table[mqdes].flags &= ~MQ_NOTIFICATION_PRESENT; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
else { |
errno = EBUSY; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
} |
699,7 → 707,7 |
memcpy(&mq_table[mqdes].notification, notification,sizeof(struct sigevent)); |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
706,13 → 714,15 |
int mq_setattr(mqd_t mqdes, const struct mq_attr *mqstat, |
struct mq_attr *omqstat) |
{ |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
if (mqdes < 0 || |
mqdes >= MQ_OPEN_MAX || |
!(mq_table[mqdes].flags & MQ_USED) ) { |
errno = EBADF; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
725,19 → 735,21 |
mq_table[mqdes].flags = (mq_table[mqdes].flags & ~O_NONBLOCK) | |
(mqstat->mq_flags & O_NONBLOCK); |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat) |
{ |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
if (mqdes < 0 || |
mqdes >= MQ_OPEN_MAX || |
!(mq_table[mqdes].flags & MQ_USED) ) { |
errno = EBADF; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
746,6 → 758,6 |
mqstat->mq_msgsize = mq_table[mqdes].msgsize; |
mqstat->mq_curmsgs = mq_table[mqdes].count; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
/shark/trunk/kernel/mutex.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: mutex.c,v 1.3 2003-09-12 10:10:41 giacomo Exp $ |
CVS : $Id: mutex.c,v 1.4 2003-11-05 15:05:12 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-09-12 10:10:41 $ |
Revision: $Revision: 1.4 $ |
Last update: $Date: 2003-11-05 15:05:12 $ |
------------ |
This file contains the mutex and condition variables handling functions. |
89,9 → 89,10 |
int mutex_init(mutex_t *mutex, const mutexattr_t *attr) |
{ |
RLEVEL l; |
SYS_FLAGS f; |
int result; |
kern_cli(); |
f = kern_fsave(); |
mutex->mutexlevel = -1; |
mutex->use = 0; |
102,12 → 103,12 |
/* can the mutex level manage the mutexattr_t ? */ |
if ((result = m->init(l, mutex, attr)) >=0) { |
kern_sti(); |
kern_frestore(f); |
return result; |
} |
} |
} |
kern_sti(); |
kern_frestore(f); |
return EINVAL; |
} |
/shark/trunk/kernel/conditio.c |
---|
20,11 → 20,11 |
/** |
------------ |
CVS : $Id: conditio.c,v 1.3 2003-01-07 17:07:49 pj Exp $ |
CVS : $Id: conditio.c,v 1.4 2003-11-05 15:05:11 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-01-07 17:07:49 $ |
Revision: $Revision: 1.4 $ |
Last update: $Date: 2003-11-05 15:05:11 $ |
------------ |
This file contains the condition variables handling functions. |
217,7 → 217,6 |
exec = exec_shadow = -1; |
scheduler(); |
ll_context_to(proc_table[exec_shadow].context); |
kern_sti(); |
/* when we arrive here: |
- the task did't die while it was waiting on the condition |
341,8 → 340,6 |
if (proc_table[exec_shadow].delay_timer != -1) |
kern_event_delete(proc_table[exec_shadow].delay_timer); |
kern_sti(); |
/* when we arrive here: |
- the task did't die while it was waiting on the condition |
(normally, the cancelability state is set to deferred; |
/shark/trunk/kernel/keys.c |
---|
19,11 → 19,11 |
/** |
------------ |
CVS : $Id: keys.c,v 1.1.1.1 2002-03-29 14:12:52 pj Exp $ |
CVS : $Id: keys.c,v 1.2 2003-11-05 15:05:11 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.1.1.1 $ |
Last update: $Date: 2002-03-29 14:12:52 $ |
Revision: $Revision: 1.2 $ |
Last update: $Date: 2003-11-05 15:05:11 $ |
------------ |
task_specific data |
127,11 → 127,12 |
int task_key_create(task_key_t *key, void (*d)(void *)) |
{ |
PID p; |
SYS_FLAGS f; |
kern_cli(); |
f = kern_fsave(); |
if (freekey == -1) { |
kern_sti(); |
kern_frestore(f); |
return (EAGAIN); |
} |
147,7 → 148,7 |
for (p=0; p<MAX_PROC; p++) |
proc_table[p].keys[*key] = NULL; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
158,10 → 159,11 |
void *task_getspecific(task_key_t key) |
{ |
void *ret; |
SYS_FLAGS f; |
kern_cli(); |
f = kern_fsave(); |
ret = proc_table[exec_shadow].keys[key]; |
kern_sti(); |
kern_frestore(f); |
return ret; |
} |
168,13 → 170,15 |
int task_setspecific(task_key_t key, const void *value) |
{ |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
if (key < 0 || key >= PTHREAD_KEYS_MAX || !key_data[key].used) { |
kern_sti(); |
kern_frestore(f); |
return (EINVAL); |
} |
proc_table[exec_shadow].keys[key] = (void *)value; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
/shark/trunk/kernel/pthread.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: pthread.c,v 1.2 2003-10-07 09:25:33 giacomo Exp $ |
CVS : $Id: pthread.c,v 1.3 2003-11-05 15:05:12 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.2 $ |
Last update: $Date: 2003-10-07 09:25:33 $ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-11-05 15:05:12 $ |
------------ |
pthread.c |
135,10 → 135,12 |
struct sched_param *param) |
{ |
int returnvalue; |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
returnvalue = POSIX_getschedparam(level_sched, thread, policy, |
¶m->sched_priority); |
kern_sti(); |
kern_frestore(f); |
return returnvalue; |
} |
145,8 → 147,10 |
int pthread_setschedparam(pthread_t thread, int policy, const struct sched_param *param) |
{ |
int returnvalue; |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
returnvalue = POSIX_setschedparam(level_sched, thread, policy, |
param->sched_priority); |
155,7 → 159,7 |
sched_get_priority_max(SCHED_RR) - |
param->sched_priority); |
kern_sti(); |
kern_frestore(f); |
return returnvalue; |
} |
260,14 → 264,16 |
int pthread_once(pthread_once_t *once_control, void (*init_routine)(void)) |
{ |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
if (!(*once_control)) { |
*once_control = 1; |
kern_sti(); |
kern_frestore(f); |
init_routine(); |
} |
else |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
/shark/trunk/kernel/kill.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: kill.c,v 1.3 2003-01-07 17:07:49 pj Exp $ |
CVS : $Id: kill.c,v 1.4 2003-11-05 15:05:11 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-01-07 17:07:49 $ |
Revision: $Revision: 1.4 $ |
Last update: $Date: 2003-11-05 15:05:11 $ |
------------ |
This file contains: |
223,8 → 223,10 |
*/ |
void task_abort(void *returnvalue) |
{ |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
task_makefree(returnvalue); |
ll_context_to(proc_table[exec_shadow].context); |
239,18 → 241,19 |
int task_kill(PID i) |
{ |
int j; /* a counter */ |
SYS_FLAGS f; |
kern_cli(); |
f = kern_fsave(); |
if (proc_table[i].control & NO_KILL || |
proc_table[i].status == FREE) { |
errno = EINVALID_KILL; |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
if (proc_table[i].control & KILL_REQUEST) { |
/* the task was already killed before... do nothing!!! */ |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
274,7 → 277,7 |
proc_table[i].control |= KILL_REQUEST; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
285,6 → 288,7 |
{ |
BYTE autokill; |
register PID i; |
SYS_FLAGS f; |
int j; /* a counter */ |
293,7 → 297,7 |
return -1; |
} |
kern_cli(); |
f = kern_fsave(); |
/* Detect suicide */ |
autokill = (g == proc_table[exec].group); |
329,7 → 333,7 |
ll_context_to(proc_table[exec].context); |
} |
else |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
/shark/trunk/kernel/time.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: time.c,v 1.2 2003-01-07 17:07:49 pj Exp $ |
CVS : $Id: time.c,v 1.3 2003-11-05 15:05:12 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.2 $ |
Last update: $Date: 2003-01-07 17:07:49 $ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-11-05 15:05:12 $ |
------------ |
This file contains the functions defined in time.h |
142,15 → 142,17 |
int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid) |
{ |
SYS_FLAGS f; |
if (clock_id != CLOCK_REALTIME) { |
errno = EINVAL; |
return -1; |
} |
kern_cli(); |
f = kern_fsave(); |
if (timerqueue_free == -1 || sigqueue_free == -1) { |
kern_sti(); |
kern_frestore(f); |
errno = EAGAIN; |
return -1; |
} |
184,7 → 186,7 |
timer_table[*timerid].overrun = 0; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
195,15 → 197,17 |
int timer_delete(timer_t timerid) |
{ |
SYS_FLAGS f; |
if (timerid < 0 || timerid >= TIMER_MAX) { |
errno = EINVAL; |
return -1; |
} |
kern_cli(); |
f = kern_fsave(); |
if (!timer_table[timerid].used) { |
kern_sti(); |
kern_frestore(f); |
errno = EINVAL; |
return -1; |
} |
228,7 → 232,7 |
~(USED_FOR_TIMER | SIGNAL_POSTED); |
} |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
322,6 → 326,7 |
{ |
struct timespec ct; /* current time */ |
int ct_read = 0; /* we take the current time only once */ |
SYS_FLAGS f; |
if (timerid < 0 || timerid >= TIMER_MAX || !value) { |
errno = EINVAL; |
340,10 → 345,10 |
return -1; |
} |
kern_cli(); |
f = kern_fsave(); |
if (!timer_table[timerid].used) { |
kern_sti(); |
kern_frestore(f); |
errno = EINVAL; |
return -1; |
} |
389,7 → 394,7 |
timer_table[timerid].current.tv_nsec/1000); */ |
} |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
396,6 → 401,7 |
int timer_gettime(timer_t timerid, struct itimerspec *value) |
{ |
struct timespec ct; /* current time */ |
SYS_FLAGS f; |
if (timerid < 0 || timerid >= TIMER_MAX) { |
errno = EINVAL; |
402,10 → 408,10 |
return -1; |
} |
kern_cli(); |
f = kern_fsave(); |
if (!timer_table[timerid].used) { |
kern_sti(); |
kern_frestore(f); |
errno = EINVAL; |
return -1; |
} |
421,7 → 427,7 |
/* and return the reactivation period */ |
TIMESPEC_ASSIGN(&value->it_interval, &timer_table[timerid].period); |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
428,6 → 434,7 |
int timer_getoverrun(timer_t timerid) |
{ |
int returnvalue; |
SYS_FLAGS f; |
if (timerid < 0 || timerid >= TIMER_MAX) { |
errno = EINVAL; |
434,16 → 441,16 |
return -1; |
} |
kern_cli(); |
f = kern_fsave(); |
if (!timer_table[timerid].used) { |
kern_sti(); |
kern_frestore(f); |
errno = EINVAL; |
return -1; |
} |
returnvalue = timer_table[timerid].overrun; |
kern_sti(); |
kern_frestore(f); |
return returnvalue; |
} |
/shark/trunk/kernel/join.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: join.c,v 1.3 2003-01-07 17:07:49 pj Exp $ |
CVS : $Id: join.c,v 1.4 2003-11-05 15:05:11 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-01-07 17:07:49 $ |
Revision: $Revision: 1.4 $ |
Last update: $Date: 2003-11-05 15:05:11 $ |
------------ |
task join and related primitives |
199,12 → 199,14 |
returns ESRCH if p is non correct +*/ |
int task_joinable(PID p) |
{ |
SYS_FLAGS f; |
if (p<0 || p>=MAX_PROC) return ESRCH; |
if (proc_table[p].status == FREE) return ESRCH; |
kern_cli(); |
f = kern_fsave(); |
proc_table[p].control |= TASK_JOINABLE; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
215,19 → 217,21 |
ESRCH if p is not correct +*/ |
int task_unjoinable(PID p) |
{ |
SYS_FLAGS f; |
if (p<0 || p>=MAX_PROC) return ESRCH; |
if (proc_table[p].status == FREE) return ESRCH; |
kern_cli(); |
f = kern_fsave(); |
if (!(proc_table[p].control & TASK_JOINABLE) || |
proc_table[p].waiting_for_me != NIL) { |
kern_sti(); |
kern_frestore(f); |
return EINVAL; |
} |
proc_table[p].control |= TASK_JOINABLE; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
/shark/trunk/kernel/tpreempt.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: tpreempt.c,v 1.2 2003-01-07 17:07:49 pj Exp $ |
CVS : $Id: tpreempt.c,v 1.3 2003-11-05 15:05:12 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.2 $ |
Last update: $Date: 2003-01-07 17:07:49 $ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-11-05 15:05:12 $ |
------------ |
task_preempt and task_nopreempt |
68,14 → 68,16 |
descriptor control field +*/ |
void task_nopreempt(void) |
{ |
SYS_FLAGS f; |
if ((~proc_table[exec_shadow].control) & NO_PREEMPT) { |
kern_cli(); |
f = kern_fsave(); |
proc_table[exec_shadow].control |= NO_PREEMPT; |
if (cap_timer != NIL) { |
kern_event_delete(cap_timer); |
cap_timer = NIL; |
} |
kern_sti(); |
kern_frestore(f); |
} |
} |
/shark/trunk/kernel/grpcreat.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: grpcreat.c,v 1.3 2003-01-07 17:07:49 pj Exp $ |
CVS : $Id: grpcreat.c,v 1.4 2003-11-05 15:05:11 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-01-07 17:07:49 $ |
Revision: $Revision: 1.4 $ |
Last update: $Date: 2003-11-05 15:05:11 $ |
------------ |
This file contains: |
290,7 → 290,7 |
/* grx_close(); |
{ int i; |
for (i = 0; i<10000; i++) |
kern_printf("!!!\n"); } ll_abort(666);*/ |
kern_printf("!!!\n"); ll_abort(666);*/ |
kern_free(tos, proc_table[i].stacksize); |
group_create_reject(i); |
errno = ENO_AVAIL_TSS; |
/shark/trunk/kernel/signal.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: signal.c,v 1.4 2003-09-12 10:10:41 giacomo Exp $ |
CVS : $Id: signal.c,v 1.5 2003-11-05 15:05:12 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.4 $ |
Last update: $Date: 2003-09-12 10:10:41 $ |
Revision: $Revision: 1.5 $ |
Last update: $Date: 2003-11-05 15:05:12 $ |
------------ |
This file contains: |
244,8 → 244,9 |
{ |
proc_des *task; /* current executing task... */ |
int err = 0; |
SYS_FLAGS f; |
kern_cli(); |
f = kern_fsave(); |
task = &proc_table[exec_shadow]; |
284,7 → 285,7 |
kern_deliver_async_signal(sig); |
} |
kern_sti(); |
kern_frestore(f); |
return err; |
} |
296,6 → 297,7 |
task_signal(PID p, int signo) |
{ |
// int enabled; |
SYS_FLAGS f; |
/* Error check? Sure! */ |
if (!signo) |
307,7 → 309,7 |
if (proc_table[p].status == FREE) |
return EINVAL; |
kern_cli(); |
f = kern_fsave(); |
/* |
* Look at the process sigactions. If the "process" is ignoring |
315,7 → 317,7 |
*/ |
if (!(sigactions[signo].sa_flags & SA_SIGINFO) && |
sigactions[signo].sa_handler == SIG_IGN) { |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
347,7 → 349,7 |
kern_deliver_pending_signals(); |
} |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
719,11 → 721,12 |
int thissig; |
LEVEL l; |
SYS_FLAGS f; |
task_testcancel(); |
/* siglock and pthread siglock are taken from an interrupt handler */ |
kern_cli(); |
f = kern_fsave(); |
/* |
* First check for process pending signals. Must take and hold |
744,7 → 747,7 |
sigdelset(&pthread->sigpending, thissig); |
sigdelset(&procsigpending, thissig); |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
774,7 → 777,7 |
sig_queue[sos].next = sigqueue_free; |
sigqueue_free = sos; |
} |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
787,7 → 790,7 |
info->si_code = SI_USER; |
info->si_value.sival_int = 0; |
sigdelset(&pthread->sigpending, thissig); |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
796,7 → 799,7 |
* is zero, its an error. |
*/ |
if (timeout && timeout->tv_sec == 0 && timeout->tv_nsec == 0) { |
kern_sti(); |
kern_frestore(f); |
return EAGAIN; |
} |
851,7 → 854,7 |
* Look for timeout. |
*/ |
if (proc_table[exec_shadow].control & SIGTIMEOUT_EXPIRED) { |
kern_sti(); |
kern_frestore(f); |
return EAGAIN; |
} |
873,7 → 876,7 |
info->si_value.sival_int = 0; |
sigdelset(&procsigpending, thissig); |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
903,7 → 906,7 |
sigqueue_free = sos; |
} |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
913,7 → 916,7 |
* thread wait was interrupted for some other reason. Return EINTR. |
*/ |
if (! (pthread->sigpending & *set)) { |
kern_sti(); |
kern_frestore(f); |
return EINTR; |
} |
925,7 → 928,7 |
info->si_code = SI_USER; |
info->si_value.sival_int = 0; |
sigdelset(&pthread->sigpending, thissig); |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
1016,12 → 1019,12 |
int sigsuspend(const sigset_t *set) |
{ |
proc_des *pthread = &proc_table[exec_shadow]; |
SYS_FLAGS f; |
LEVEL l; |
task_testcancel(); |
kern_cli(); |
f = kern_fsave(); |
/* |
* Now check for pthread pending signals. |
1028,7 → 1031,7 |
*/ |
if (pthread->sigpending & *set) { |
kern_deliver_pending_signals(); |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
1064,7 → 1067,7 |
* thread wait was interrupted for some other reason. Return EINTR. |
*/ |
if (! (pthread->sigpending & *set)) { |
kern_sti(); |
kern_frestore(f); |
return EINTR; |
} |
1072,7 → 1075,7 |
* Otherwise, deliver the signals. |
*/ |
kern_deliver_pending_signals(); |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
1092,8 → 1095,9 |
unsigned int alarm(unsigned int seconds) |
{ |
struct timespec returnvalue, temp; |
SYS_FLAGS f; |
kern_cli(); |
f = kern_fsave(); |
kern_gettime(&temp); |
1113,7 → 1117,7 |
else |
alarm_timer = -1; |
kern_sti(); |
kern_frestore(f); |
return returnvalue.tv_sec; |
} |
1300,7 → 1304,6 |
sigmask |= act.sa_mask; |
sigdelset(&task->sigpending, sig); |
task->sigmask = sigmask; |
kern_sti(); |
/* |
* and call the handler ... |
1314,7 → 1317,6 |
/* NB: when we pass the kern_cli(), there can be the case that |
an irq (and/or a timer...) fired... and do a context change. |
so, we return here after an indefinite time... */ |
kern_cli(); |
task->sigmask = oldmask; |
kern_frestore(f); |
1328,6 → 1330,7 |
void kern_raise(int n, PID p) |
{ |
union sigval v; |
SYS_FLAGS f; |
PID sos; /* temp. PID */ |
v.sival_int = n; |
1335,7 → 1338,7 |
/* sigqueue set the p field to exec_shadow... so whe change it for a |
little... because sigqueue fill descriptor with exec_shadow... */ |
kern_cli(); |
f = kern_fsave(); |
sos = exec_shadow; |
exec_shadow = p; |
1344,7 → 1347,7 |
active_exc = 0; |
exec_shadow = sos; |
kern_sti(); |
kern_frestore(f); |
/* (*) |
when we are in an exception, we don't have to call the |
/shark/trunk/kernel/jet.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: jet.c,v 1.1.1.1 2002-03-29 14:12:51 pj Exp $ |
CVS : $Id: jet.c,v 1.2 2003-11-05 15:05:11 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.1.1.1 $ |
Last update: $Date: 2002-03-29 14:12:51 $ |
Revision: $Revision: 1.2 $ |
Last update: $Date: 2003-11-05 15:05:11 $ |
------------ |
Kernel Job Execution Time functions |
84,12 → 84,14 |
+*/ |
int jet_getstat(PID p, TIME *sum, TIME *max, int *n, TIME *curr) |
{ |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
if (p<0 || p>=MAX_PROC || |
!(proc_table[p].control & JET_ENABLED) || |
proc_table[p].status == FREE) { |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
98,7 → 100,7 |
if (n != NULL) *n = proc_table[p].jet_n; |
if (curr != NULL) *curr= proc_table[p].jet_table[proc_table[p].jet_curr]; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
109,12 → 111,14 |
the task doesn't have the JET_ENABLE bit set. +*/ |
int jet_delstat(PID p) |
{ |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
if (p<0 || p>=MAX_PROC || |
!(proc_table[p].control & JET_ENABLED) || |
proc_table[p].status == FREE) { |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
122,7 → 126,7 |
proc_table[p].jet_n = 0; |
proc_table[p].jet_max = 0; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
142,13 → 146,14 |
int jet_gettable(PID p, TIME *table, int n) |
{ |
int i; |
SYS_FLAGS f; |
kern_cli(); |
f = kern_fsave(); |
if (p<0 || p>=MAX_PROC || |
!(proc_table[p].control & JET_ENABLED) || |
proc_table[p].status == FREE) { |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
165,7 → 170,7 |
i= (i+1) % JET_TABLE_DIM) |
*table++ = proc_table[p].jet_table[i]; |
kern_sti(); |
kern_frestore(f); |
return n; |
} |
/shark/trunk/kernel/cancel.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: cancel.c,v 1.2 2003-09-12 10:10:40 giacomo Exp $ |
CVS : $Id: cancel.c,v 1.3 2003-11-05 15:05:11 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.2 $ |
Last update: $Date: 2003-09-12 10:10:40 $ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-11-05 15:05:11 $ |
------------ |
This file contains: |
85,10 → 85,12 |
/*+ This primitive set the cancellation state of the task +*/ |
int task_setcancelstate(int state, int *oldstate) |
{ |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
if (state != TASK_CANCEL_ENABLE && |
state != TASK_CANCEL_DISABLE) { |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
96,7 → 98,7 |
proc_table[exec_shadow].control &= ~KILL_ENABLED; |
proc_table[exec_shadow].control |= state; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |
103,10 → 105,12 |
/*+ This primitive set the cancellation type of the task +*/ |
int task_setcanceltype(int type, int *oldtype) |
{ |
kern_cli(); |
SYS_FLAGS f; |
f = kern_fsave(); |
if (type != TASK_CANCEL_DEFERRED && |
type != TASK_CANCEL_ASYNCHRONOUS) { |
kern_sti(); |
kern_frestore(f); |
return -1; |
} |
114,6 → 118,6 |
proc_table[exec_shadow].control &= ~KILL_DEFERRED; |
proc_table[exec_shadow].control |= type; |
kern_sti(); |
kern_frestore(f); |
return 0; |
} |