[Xenomai-git] Gilles Chanteperdrix : cobalt: move semaphore syscalls to sem.c

2011-11-22 Thread GIT version control
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

2011-11-21 Thread GIT version control
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) {
+