[Xenomai-git] Gilles Chanteperdrix : cobalt: move semaphore syscalls to sem.c
Module: xenomai-forge Branch: master Commit: 9dc2882c499fab4ff111e661012ee62ce4c26cdf URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=9dc2882c499fab4ff111e661012ee62ce4c26cdf Author: Gilles Chanteperdrix Date: Tue Nov 22 00:57:00 2011 +0100 cobalt: move semaphore syscalls to sem.c --- include/cobalt/semaphore.h | 39 +--- kernel/cobalt/internal.h |2 - kernel/cobalt/sem.c| 608 kernel/cobalt/sem.h| 47 +++- kernel/cobalt/syscall.c| 311 ++- kernel/cobalt/timer.c |8 +- lib/cobalt/semaphore.c | 118 ++--- 7 files changed, 464 insertions(+), 669 deletions(-) diff --git a/include/cobalt/semaphore.h b/include/cobalt/semaphore.h index 3804bcb..c7a29c3 100644 --- a/include/cobalt/semaphore.h +++ b/include/cobalt/semaphore.h @@ -69,44 +69,7 @@ union __xeno_sem { } shadow_sem; }; -#if defined(__KERNEL__) || defined(__XENO_SIM__) - -#ifdef __cplusplus -extern "C" { -#endif - -#undef sem_init -#define sem_init cobalt_sem_init - -int cobalt_sem_init(sem_t *sem, - int pshared, - unsigned int value); - -int sem_destroy(sem_t *sem); - -int sem_post(sem_t *sem); - -int sem_trywait(sem_t *sem); - -int sem_wait(sem_t *sem); - -int sem_timedwait(sem_t *sem, - const struct timespec *abs_timeout); - -int sem_getvalue(sem_t *sem, -int *value); - -sem_t *sem_open(const char *name, int oflag, ...); - -int sem_close(sem_t *sem); - -int sem_unlink(const char *name); - -#ifdef __cplusplus -} -#endif - -#else /* !(__KERNEL__ || __XENO_SIM__) */ +#if !(defined(__KERNEL__) || defined(__XENO_SIM__)) #ifdef __cplusplus extern "C" { diff --git a/kernel/cobalt/internal.h b/kernel/cobalt/internal.h index 1d5237f..280c5e7 100644 --- a/kernel/cobalt/internal.h +++ b/kernel/cobalt/internal.h @@ -38,13 +38,11 @@ #define COBALT_THREAD_ATTR_MAGIC COBALT_MAGIC(02) #define COBALT_MUTEX_ATTR_MAGIC (COBALT_MAGIC(04) & ((1 << 24) - 1)) #define COBALT_COND_ATTR_MAGIC (COBALT_MAGIC(06) & ((1 << 24) - 1)) -#define COBALT_SEM_MAGIC COBALT_MAGIC(07) #define COBALT_KEY_MAGIC COBALT_MAGIC(08) #define COBALT_ONCE_MAGICCOBALT_MAGIC(09) #define COBALT_MQ_MAGIC COBALT_MAGIC(0A) #define COBALT_MQD_MAGIC COBALT_MAGIC(0B) #define COBALT_INTR_MAGICCOBALT_MAGIC(0C) -#define COBALT_NAMED_SEM_MAGIC COBALT_MAGIC(0D) #define COBALT_TIMER_MAGIC COBALT_MAGIC(0E) #define COBALT_SHM_MAGIC COBALT_MAGIC(0F) diff --git a/kernel/cobalt/sem.c b/kernel/cobalt/sem.c index 0184f67..75ea1c1 100644 --- a/kernel/cobalt/sem.c +++ b/kernel/cobalt/sem.c @@ -62,7 +62,7 @@ typedef struct cobalt_named_sem { union __xeno_sem descriptor; } nsem_t; -#define sem2named_sem(saddr) ((nsem_t *) (saddr)) +#define sem2named_sem(saddr) ((nsem_t *)(saddr)) #define node2sem(naddr) container_of(naddr, nsem_t, nodebase) #ifndef __XENO_SIM__ @@ -78,7 +78,7 @@ typedef struct cobalt_uptr { #endif /* !__XENO_SIM__ */ -static int sem_destroy_inner(cobalt_sem_t * sem, cobalt_kqueues_t *q) +static int sem_destroy_inner(cobalt_sem_t *sem, cobalt_kqueues_t *q) { int ret = 0; spl_t s; @@ -100,12 +100,12 @@ static int sem_destroy_inner(cobalt_sem_t * sem, cobalt_kqueues_t *q) } /* Called with nklock locked, irq off. */ -static int sem_init_inner(cobalt_sem_t * sem, int flags, unsigned int value) +static int sem_init_inner(cobalt_sem_t *sem, int flags, unsigned int value) { int pshared, sflags; if (value > (unsigned)SEM_VALUE_MAX) - return EINVAL; + return -EINVAL; pshared = !!(flags & SEM_PSHARED); sflags = flags & SEM_FIFO ? 0 : XNSYNCH_PRIO; @@ -121,37 +121,32 @@ static int sem_init_inner(cobalt_sem_t * sem, int flags, unsigned int value) return 0; } -static int do_sem_init(sem_t *sm, int flags, unsigned int value) +static int do_sem_init(struct __shadow_sem *sm, int flags, unsigned int value) { - struct __shadow_sem *shadow = &((union __xeno_sem *)sm)->shadow_sem; xnholder_t *holder; cobalt_sem_t *sem; xnqueue_t *semq; int ret; spl_t s; - if ((flags & SEM_PULSE) != 0 && value > 0) { - ret = EINVAL; - goto error; - } + if ((flags & SEM_PULSE) != 0 && value > 0) + return -EINVAL; - sem = xnmalloc(sizeof(cobalt_sem_t)); - if (sem == NULL) { - ret = ENOSPC; - goto error; - } + sem = (cobalt_sem_t *)xnmalloc(sizeof(*sem)); + if (sem == NULL) + return -ENOSPC; xnlock_get_irqsave(&nklock, s); semq = &cobalt_kqueues(!!(flags & SEM_PSHARED))->semq; - if (shadow->magic == COBALT_SEM_MAGIC - || shadow->magic == COBALT_NAMED_SEM_MAGIC - || shadow->magic == ~COBALT_NAMED_SEM_MAGIC) { +
[Xenomai-git] Gilles Chanteperdrix : cobalt: move semaphore syscalls to sem.c
Module: xenomai-gch Branch: for-forge Commit: 9dc2882c499fab4ff111e661012ee62ce4c26cdf URL: http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=9dc2882c499fab4ff111e661012ee62ce4c26cdf Author: Gilles Chanteperdrix Date: Tue Nov 22 00:57:00 2011 +0100 cobalt: move semaphore syscalls to sem.c --- include/cobalt/semaphore.h | 39 +--- kernel/cobalt/internal.h |2 - kernel/cobalt/sem.c| 608 kernel/cobalt/sem.h| 47 +++- kernel/cobalt/syscall.c| 311 ++- kernel/cobalt/timer.c |8 +- lib/cobalt/semaphore.c | 118 ++--- 7 files changed, 464 insertions(+), 669 deletions(-) diff --git a/include/cobalt/semaphore.h b/include/cobalt/semaphore.h index 3804bcb..c7a29c3 100644 --- a/include/cobalt/semaphore.h +++ b/include/cobalt/semaphore.h @@ -69,44 +69,7 @@ union __xeno_sem { } shadow_sem; }; -#if defined(__KERNEL__) || defined(__XENO_SIM__) - -#ifdef __cplusplus -extern "C" { -#endif - -#undef sem_init -#define sem_init cobalt_sem_init - -int cobalt_sem_init(sem_t *sem, - int pshared, - unsigned int value); - -int sem_destroy(sem_t *sem); - -int sem_post(sem_t *sem); - -int sem_trywait(sem_t *sem); - -int sem_wait(sem_t *sem); - -int sem_timedwait(sem_t *sem, - const struct timespec *abs_timeout); - -int sem_getvalue(sem_t *sem, -int *value); - -sem_t *sem_open(const char *name, int oflag, ...); - -int sem_close(sem_t *sem); - -int sem_unlink(const char *name); - -#ifdef __cplusplus -} -#endif - -#else /* !(__KERNEL__ || __XENO_SIM__) */ +#if !(defined(__KERNEL__) || defined(__XENO_SIM__)) #ifdef __cplusplus extern "C" { diff --git a/kernel/cobalt/internal.h b/kernel/cobalt/internal.h index 1d5237f..280c5e7 100644 --- a/kernel/cobalt/internal.h +++ b/kernel/cobalt/internal.h @@ -38,13 +38,11 @@ #define COBALT_THREAD_ATTR_MAGIC COBALT_MAGIC(02) #define COBALT_MUTEX_ATTR_MAGIC (COBALT_MAGIC(04) & ((1 << 24) - 1)) #define COBALT_COND_ATTR_MAGIC (COBALT_MAGIC(06) & ((1 << 24) - 1)) -#define COBALT_SEM_MAGIC COBALT_MAGIC(07) #define COBALT_KEY_MAGIC COBALT_MAGIC(08) #define COBALT_ONCE_MAGICCOBALT_MAGIC(09) #define COBALT_MQ_MAGIC COBALT_MAGIC(0A) #define COBALT_MQD_MAGIC COBALT_MAGIC(0B) #define COBALT_INTR_MAGICCOBALT_MAGIC(0C) -#define COBALT_NAMED_SEM_MAGIC COBALT_MAGIC(0D) #define COBALT_TIMER_MAGIC COBALT_MAGIC(0E) #define COBALT_SHM_MAGIC COBALT_MAGIC(0F) diff --git a/kernel/cobalt/sem.c b/kernel/cobalt/sem.c index 0184f67..75ea1c1 100644 --- a/kernel/cobalt/sem.c +++ b/kernel/cobalt/sem.c @@ -62,7 +62,7 @@ typedef struct cobalt_named_sem { union __xeno_sem descriptor; } nsem_t; -#define sem2named_sem(saddr) ((nsem_t *) (saddr)) +#define sem2named_sem(saddr) ((nsem_t *)(saddr)) #define node2sem(naddr) container_of(naddr, nsem_t, nodebase) #ifndef __XENO_SIM__ @@ -78,7 +78,7 @@ typedef struct cobalt_uptr { #endif /* !__XENO_SIM__ */ -static int sem_destroy_inner(cobalt_sem_t * sem, cobalt_kqueues_t *q) +static int sem_destroy_inner(cobalt_sem_t *sem, cobalt_kqueues_t *q) { int ret = 0; spl_t s; @@ -100,12 +100,12 @@ static int sem_destroy_inner(cobalt_sem_t * sem, cobalt_kqueues_t *q) } /* Called with nklock locked, irq off. */ -static int sem_init_inner(cobalt_sem_t * sem, int flags, unsigned int value) +static int sem_init_inner(cobalt_sem_t *sem, int flags, unsigned int value) { int pshared, sflags; if (value > (unsigned)SEM_VALUE_MAX) - return EINVAL; + return -EINVAL; pshared = !!(flags & SEM_PSHARED); sflags = flags & SEM_FIFO ? 0 : XNSYNCH_PRIO; @@ -121,37 +121,32 @@ static int sem_init_inner(cobalt_sem_t * sem, int flags, unsigned int value) return 0; } -static int do_sem_init(sem_t *sm, int flags, unsigned int value) +static int do_sem_init(struct __shadow_sem *sm, int flags, unsigned int value) { - struct __shadow_sem *shadow = &((union __xeno_sem *)sm)->shadow_sem; xnholder_t *holder; cobalt_sem_t *sem; xnqueue_t *semq; int ret; spl_t s; - if ((flags & SEM_PULSE) != 0 && value > 0) { - ret = EINVAL; - goto error; - } + if ((flags & SEM_PULSE) != 0 && value > 0) + return -EINVAL; - sem = xnmalloc(sizeof(cobalt_sem_t)); - if (sem == NULL) { - ret = ENOSPC; - goto error; - } + sem = (cobalt_sem_t *)xnmalloc(sizeof(*sem)); + if (sem == NULL) + return -ENOSPC; xnlock_get_irqsave(&nklock, s); semq = &cobalt_kqueues(!!(flags & SEM_PSHARED))->semq; - if (shadow->magic == COBALT_SEM_MAGIC - || shadow->magic == COBALT_NAMED_SEM_MAGIC - || shadow->magic == ~COBALT_NAMED_SEM_MAGIC) { +