Module: xenomai-gch Branch: for-forge Commit: e921ba7a9431fc1f6506d99c038c9c09aa46b903 URL: http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=e921ba7a9431fc1f6506d99c038c9c09aa46b903
Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org> Date: Tue Nov 15 02:38:35 2011 +0100 cobalt: inline completely condition variables system calls --- kernel/cobalt/cond.c | 45 ++++++++------------------------------------- kernel/cobalt/cond.h | 29 ++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/kernel/cobalt/cond.c b/kernel/cobalt/cond.c index d398afb..a5c6928 100644 --- a/kernel/cobalt/cond.c +++ b/kernel/cobalt/cond.c @@ -230,11 +230,11 @@ static int pthread_cond_destroy(pthread_cond_t * cnd) return 0; } -static int cobalt_cond_timedwait_prologue(xnthread_t *cur, - cobalt_cond_t *cond, - cobalt_mutex_t *mutex, - int timed, - xnticks_t abs_to) +static inline int cobalt_cond_timedwait_prologue(xnthread_t *cur, + cobalt_cond_t *cond, + cobalt_mutex_t *mutex, + int timed, + xnticks_t abs_to) { spl_t s; int err; @@ -320,9 +320,9 @@ static int cobalt_cond_timedwait_prologue(xnthread_t *cur, return err; } -static int cobalt_cond_timedwait_epilogue(xnthread_t *cur, - cobalt_cond_t *cond, - cobalt_mutex_t *mutex) +static inline int cobalt_cond_timedwait_epilogue(xnthread_t *cur, + cobalt_cond_t *cond, + cobalt_mutex_t *mutex) { int err; spl_t s; @@ -349,35 +349,6 @@ static int cobalt_cond_timedwait_epilogue(xnthread_t *cur, return err; } -int cobalt_cond_deferred_signals(struct cobalt_cond *cond) -{ - unsigned long pending_signals; - int need_resched, i; - - pending_signals = *(cond->pending_signals); - - switch(pending_signals) { - case ~0UL: - need_resched = - xnsynch_flush(&cond->synchbase, 0) == XNSYNCH_RESCHED; - break; - - case 0: - need_resched = 0; - break; - - default: - for(i = 0, need_resched = 0; i < pending_signals; i++) - need_resched |= - xnsynch_wakeup_one_sleeper(&cond->synchbase) - != NULL; - } - - *cond->pending_signals = 0; - - return need_resched; -} - int cobalt_cond_init(union __xeno_cond __user *u_cnd, const pthread_condattr_t __user *u_attr) { diff --git a/kernel/cobalt/cond.h b/kernel/cobalt/cond.h index 8d77ad9..0936579 100644 --- a/kernel/cobalt/cond.h +++ b/kernel/cobalt/cond.h @@ -67,7 +67,34 @@ typedef struct cobalt_cond { cobalt_kqueues_t *owningq; } cobalt_cond_t; -int cobalt_cond_deferred_signals(struct cobalt_cond *cond); +static inline int cobalt_cond_deferred_signals(struct cobalt_cond *cond) +{ + unsigned long pending_signals; + int need_resched, i; + + pending_signals = *(cond->pending_signals); + + switch(pending_signals) { + case ~0UL: + need_resched = + xnsynch_flush(&cond->synchbase, 0) == XNSYNCH_RESCHED; + break; + + case 0: + need_resched = 0; + break; + + default: + for(i = 0, need_resched = 0; i < pending_signals; i++) { + if (xnsynch_wakeup_one_sleeper(&cond->synchbase) == NULL) + break; + need_resched = 1; + } + } + *cond->pending_signals = 0; + + return need_resched; +} int cobalt_cond_init(union __xeno_cond __user *u_cnd, const pthread_condattr_t __user *u_attr); _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git