Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 317 → Rev 318

/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,13 → 182,13
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 {
proc_table[exec_shadow].context = kern_context_save();
 
for (i=0 ; i<MAX_PROC; i++)
if (proc_table[i].group == g) {
if (proc_table[i].control & FREEZE_ACTIVATION) {
/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,
&param->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:
289,8 → 289,8
if (!c) { // || c == global_context) {
/* grx_close();
{ int i;
for (i = 0; i<10000; i++)
kern_printf("!!!\n"); } ll_abort(666);*/
for (i = 0; i<10000; i++)
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,7 → 297,8
task_signal(PID p, int signo)
{
// int enabled;
 
SYS_FLAGS f;
/* Error check? Sure! */
if (!signo)
return 0;
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;
}