[Xenomai-git] Gilles Chanteperdrix : drivers/testing: adapt rtdmtest after RTDM changes

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: aae8153b52bb9914055ffa49947c577987b9d254
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=aae8153b52bb9914055ffa49947c577987b9d254

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sun Feb  2 00:58:07 2014 +0100

drivers/testing: adapt rtdmtest after RTDM changes

---

 include/rtdm/uapi/testing.h   |3 +--
 kernel/drivers/testing/rtdmtest.c |   54 -
 testsuite/unit/rtdm.c |   11 
 3 files changed, 18 insertions(+), 50 deletions(-)

diff --git a/include/rtdm/uapi/testing.h b/include/rtdm/uapi/testing.h
index 87a97fd..76d9678 100644
--- a/include/rtdm/uapi/testing.h
+++ b/include/rtdm/uapi/testing.h
@@ -103,8 +103,7 @@ struct rttst_swtest_error {
 };
 
 #define RTTST_RTDM_NORMAL_CLOSE0
-#define RTTST_RTDM_DEFER_CLOSE_HANDLER 1
-#define RTTST_RTDM_DEFER_CLOSE_CONTEXT 2
+#define RTTST_RTDM_DEFER_CLOSE_CONTEXT 1
 
 #define RTIOC_TYPE_TESTING RTDM_CLASS_TESTING
 
diff --git a/kernel/drivers/testing/rtdmtest.c 
b/kernel/drivers/testing/rtdmtest.c
index 900a2dc..20a423f 100644
--- a/kernel/drivers/testing/rtdmtest.c
+++ b/kernel/drivers/testing/rtdmtest.c
@@ -48,11 +48,9 @@ static void close_timer_proc(rtdm_timer_t *timer)
rtdm_context_unlock(rtdm_private_to_context(ctx));
 }
 
-static int rtdm_test_open(struct rtdm_dev_context *context,
- rtdm_user_info_t *user_info, int oflags)
+static int rtdm_test_open(struct rtdm_fd *context, int oflags)
 {
-   struct rtdm_test_context *ctx =
-   (struct rtdm_test_context *)context-dev_private;
+   struct rtdm_test_context *ctx = rtdm_context_to_private(context);
 
rtdm_timer_init(ctx-close_timer, close_timer_proc,
rtdm close test);
@@ -62,60 +60,42 @@ static int rtdm_test_open(struct rtdm_dev_context *context,
return 0;
 }
 
-static int rtdm_test_close(struct rtdm_dev_context *context,
-  rtdm_user_info_t *user_info)
+static void rtdm_test_close(struct rtdm_fd *context)
 {
-   struct rtdm_test_context *ctx =
-   (struct rtdm_test_context *)context-dev_private;
+   struct rtdm_test_context *ctx = rtdm_context_to_private(context);
 
ctx-close_counter++;
 
switch (ctx-close_deferral) {
-   case RTTST_RTDM_DEFER_CLOSE_HANDLER:
-   if (ctx-close_counter = 3)
-   return -EAGAIN;
-   if (ctx-close_counter  4) {
-   printk(KERN_ERR
-  rtdmtest: %s: close_counter is %lu, 
-  should be 2!\n,
-  __FUNCTION__, ctx-close_counter);
-   return 0;
-   }
-   break;
-
case RTTST_RTDM_DEFER_CLOSE_CONTEXT:
-   if (ctx-close_counter == 1) {
-   rtdm_context_lock(context);
-   rtdm_timer_start(ctx-close_timer, 3ULL, 0,
-RTDM_TIMERMODE_RELATIVE);
-   return 0;
-   }
-   if (ctx-close_counter  2) {
+   if (ctx-close_counter != 2) {
printk(KERN_ERR
   rtdmtest: %s: close_counter is %lu, 
   should be 2!\n,
   __FUNCTION__, ctx-close_counter);
-   return 0;
+   return;
}
break;
}
 
rtdm_timer_destroy(ctx-close_timer);
-
-   return 0;
 }
 
-static int rtdm_test_ioctl(struct rtdm_dev_context *context,
-  rtdm_user_info_t *user_info,
-  unsigned int request, void __user *arg)
+static int
+rtdm_test_ioctl(struct rtdm_fd *context, unsigned int request, void __user 
*arg)
 {
-   struct rtdm_test_context *ctx =
-   (struct rtdm_test_context *)context-dev_private;
+   struct rtdm_test_context *ctx = rtdm_context_to_private(context);
int err = 0;
 
switch (request) {
case RTTST_RTIOC_RTDM_DEFER_CLOSE:
ctx-close_deferral = (unsigned long)arg;
+   if (ctx-close_deferral == RTTST_RTDM_DEFER_CLOSE_CONTEXT) {
+   ++ctx-close_counter;
+   rtdm_context_lock(context);
+   rtdm_timer_start(ctx-close_timer, 3ULL, 0,
+   RTDM_TIMERMODE_RELATIVE);
+   }
break;
 
default:
@@ -132,10 +112,10 @@ static struct rtdm_device device[2] = { [0 ... 1] = {
.context_size   = sizeof(struct rtdm_test_context),
.device_name= ,
 
-   .open_nrt   = rtdm_test_open,
+   .open   = rtdm_test_open,
 
.ops = {
-   .close_nrt  = 

[Xenomai-git] Gilles Chanteperdrix : testsuite/latency: rebase on posix and timerfd

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 349f6758a00528cc2e1cb41257c20cd9d379fdec
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=349f6758a00528cc2e1cb41257c20cd9d379fdec

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Thu Dec 26 23:45:36 2013 +0100

testsuite/latency: rebase on posix and timerfd

---

 testsuite/latency/Makefile.am |6 +-
 testsuite/latency/latency.c   |  285 +
 2 files changed, 180 insertions(+), 111 deletions(-)

diff --git a/testsuite/latency/Makefile.am b/testsuite/latency/Makefile.am
index 7acff32..55ba31b 100644
--- a/testsuite/latency/Makefile.am
+++ b/testsuite/latency/Makefile.am
@@ -1,5 +1,7 @@
 testdir = @XENO_TEST_DIR@
 
+CCLD = $(top_srcdir)/scripts/wrap-link.sh $(CC)
+
 test_PROGRAMS = latency
 
 latency_SOURCES = latency.c
@@ -8,7 +10,7 @@ latency_CPPFLAGS = \
$(XENO_USER_CFLAGS) \
-I$(top_srcdir)/include
 
-latency_LDFLAGS =
+latency_LDFLAGS = $(XENO_POSIX_WRAPPERS)
 
 core_libs =
 if XENO_COBALT
@@ -16,8 +18,6 @@ core_libs += ../../lib/cobalt/libcobalt.la
 endif
 
 latency_LDADD = \
-   ../../lib/alchemy/libalchemy.la \
-   ../../lib/copperplate/libcopperplate.la \
$(core_libs)\
 @XENO_USER_LDADD@  \
-lpthread -lrt -lm
diff --git a/testsuite/latency/latency.c b/testsuite/latency/latency.c
index 5efc344..ddfe450 100644
--- a/testsuite/latency/latency.c
+++ b/testsuite/latency/latency.c
@@ -9,17 +9,21 @@
 #include sys/mman.h
 #include sys/time.h
 #include unistd.h
-#include copperplate/init.h
-#include alchemy/task.h
-#include alchemy/timer.h
-#include alchemy/sem.h
+#include pthread.h
+#include semaphore.h
+#include sys/timerfd.h
 #include rtdm/testing.h
+#include trace.h
 
-RT_TASK latency_task, display_task;
+pthread_t latency_task, display_task;
 
-RT_SEM display_sem;
+sem_t *display_sem;
 
-#define TEN_MILLION1000
+#define TEN_MILLION1000
+#define ONE_BILLION10
+
+#define HIPRIO 99
+#define LOPRIO 0
 
 unsigned max_relaxed;
 long minjitter, maxjitter, avgjitter;
@@ -33,9 +37,10 @@ int quiet = 0;   /* suppress printing of 
RTH, RTD lines when -T given */
 int benchdev_no = 0;
 int benchdev = -1;
 int freeze_max = 0;
-int priority = T_HIPRIO;
+int priority = HIPRIO;
 int stop_upon_switch = 0;
 sig_atomic_t sampling_relaxed = 0;
+char sem_name[16];
 
 #define USER_TASK   0
 #define KERNEL_TASK 1
@@ -69,38 +74,70 @@ int bucketsize = 1000;  /* default = 1000ns, -B 
size to override */
 static inline void add_histogram(long *histogram, long addval)
 {
/* bucketsize steps */
-   long inabs =
-   rt_timer_tsc2ns(addval = 0 ? addval : -addval) / bucketsize;
+   long inabs = (addval = 0 ? addval : -addval) / bucketsize;
histogram[inabs  histogram_size ? inabs : histogram_size - 1]++;
 }
 
-static void latency(void *cookie)
+static inline long long diff_ts(struct timespec *left, struct timespec *right)
+{
+   return (long long)(left-tv_sec - right-tv_sec) * ONE_BILLION
+   + left-tv_nsec - right-tv_nsec;
+}
+
+static void *latency(void *cookie)
 {
int err, count, nsamples, warmup = 1;
-   RTIME expected_tsc, period_tsc, start_ticks, fault_threshold;
-   RT_TIMER_INFO timer_info;
+   unsigned long long fault_threshold;
+   struct itimerspec timer_conf;
+   struct timespec expected;
unsigned old_relaxed = 0;
+   char task_name[16];
+   int tfd;
 
-   err = rt_timer_inquire(timer_info);
+   snprintf(task_name, sizeof(task_name), sampling-%d, getpid());
+   err = pthread_setname_np(pthread_self(), task_name);
+   if (err) {
+   fprintf(stderr, latency: setting name: error code %d\n, err);
+   return NULL;
+   }
 
+#ifdef CONFIG_XENO_COBALT
+   err = pthread_set_mode_np(0, PTHREAD_WARNSW, NULL);
if (err) {
-   fprintf(stderr, latency: rt_timer_inquire, code %d\n, err);
-   return;
+   fprintf(stderr, latency: setting WARNSW: error code %d\n, 
err);
+   return NULL;
+   }
+#endif
+
+   tfd = timerfd_create(CLOCK_MONOTONIC, 0);
+   if (tfd == -1) {
+   fprintf(stderr, latency: timerfd_create: %m\n);
+   return NULL;
}
 
-   fault_threshold = rt_timer_ns2tsc(CONFIG_XENO_DEFAULT_PERIOD);
+   err = clock_gettime(CLOCK_MONOTONIC, expected);
+   if (err) {
+   fprintf(stderr, latency: clock_gettime: %m\n);
+   return NULL;
+   }
+
+   fault_threshold = CONFIG_XENO_DEFAULT_PERIOD;
nsamples = ONE_BILLION / period_ns;
-   period_tsc = rt_timer_ns2tsc(period_ns);
/* start time: one millisecond from now. */
-   start_ticks = timer_info.date + rt_timer_ns2ticks(100);
-   

[Xenomai-git] Philippe Gerum : cobalt/posix: silence spurious warnings

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: ce9347347111a9dad02ceafd83f56a8e7f66fc26
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=ce9347347111a9dad02ceafd83f56a8e7f66fc26

Author: Philippe Gerum r...@xenomai.org
Date:   Fri May 16 16:22:27 2014 +0200

cobalt/posix: silence spurious warnings

---

 kernel/cobalt/posix/clock.c  |2 +-
 kernel/cobalt/posix/mqueue.c |   22 +-
 2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/kernel/cobalt/posix/clock.c b/kernel/cobalt/posix/clock.c
index 951daf8..8f06a3a 100644
--- a/kernel/cobalt/posix/clock.c
+++ b/kernel/cobalt/posix/clock.c
@@ -219,7 +219,7 @@ int cobalt_clock_gettime(clockid_t clock_id, struct 
timespec __user *u_ts)
 int cobalt_clock_settime(clockid_t clock_id, const struct timespec __user 
*u_ts)
 {
struct timespec ts;
-   int _ret, ret;
+   int _ret, ret = 0;
xnticks_t now;
spl_t s;
 
diff --git a/kernel/cobalt/posix/mqueue.c b/kernel/cobalt/posix/mqueue.c
index 76e9155..48a1c7a 100644
--- a/kernel/cobalt/posix/mqueue.c
+++ b/kernel/cobalt/posix/mqueue.c
@@ -1186,18 +1186,18 @@ int cobalt_mq_timedreceive(mqd_t uqd, void __user 
*u_buf,
 
if (__xn_get_user(len, u_len)) {
err = -EFAULT;
-   goto out;
+   goto fail;
}
 
if (len  0  !access_wok(u_buf, len)) {
err = -EFAULT;
-   goto out;
+   goto fail;
}
 
if (u_ts) {
if (__xn_safe_copy_from_user(timeout, u_ts, sizeof(timeout))) {
err = -EFAULT;
-   goto out;
+   goto fail;
}
 
timeoutp = timeout;
@@ -1207,23 +1207,22 @@ int cobalt_mq_timedreceive(mqd_t uqd, void __user 
*u_buf,
msg = cobalt_mq_timedrcv_inner(mqd, len, timeoutp);
if (IS_ERR(msg)) {
err = PTR_ERR(msg);
-   goto out;
+   goto fail;
}
 
if (__xn_copy_to_user(u_buf, msg-data, msg-len)) {
cobalt_mq_finish_rcv(mqd, msg);
err = -EFAULT;
-   goto out;
+   goto fail;
}
+
len = msg-len;
prio = msg-prio;
-
err = cobalt_mq_finish_rcv(mqd, msg);
+   if (err)
+   goto fail;
 
-  out:
cobalt_mqd_put(mqd);
-   if (err)
-   return err;
 
if (__xn_put_user(len, u_len))
return -EFAULT;
@@ -1232,6 +1231,11 @@ int cobalt_mq_timedreceive(mqd_t uqd, void __user *u_buf,
return -EFAULT;
 
return 0;
+
+fail:
+   cobalt_mqd_put(mqd);
+
+   return err;
 }
 
 int cobalt_mq_pkg_init(void)


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : drivers/ipc: adapt XDDP after RTDM changes

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 2fbc728cb99567aca845412c35583ca86f069538
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=2fbc728cb99567aca845412c35583ca86f069538

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Tue Feb  4 21:29:02 2014 +0100

drivers/ipc: adapt XDDP after RTDM changes

---

 kernel/drivers/ipc/internal.h |   26 -
 kernel/drivers/ipc/rtipc.c|   67 +++
 kernel/drivers/ipc/xddp.c |  117 ++---
 3 files changed, 106 insertions(+), 104 deletions(-)

diff --git a/kernel/drivers/ipc/internal.h b/kernel/drivers/ipc/internal.h
index 34985df..4422ba0 100644
--- a/kernel/drivers/ipc/internal.h
+++ b/kernel/drivers/ipc/internal.h
@@ -42,28 +42,28 @@ struct rtipc_protocol {
void (*proto_exit)(void);
struct {
int (*socket)(struct rtipc_private *priv,
- rtdm_user_info_t *user_info);
-   int (*close)(struct rtipc_private *priv,
-rtdm_user_info_t *user_info);
+ struct rtdm_fd *context);
+   void (*close)(struct rtipc_private *priv,
+   struct rtdm_fd *context);
ssize_t (*recvmsg)(struct rtipc_private *priv,
-  rtdm_user_info_t *user_info,
+  struct rtdm_fd *context,
   struct msghdr *msg, int flags);
ssize_t (*sendmsg)(struct rtipc_private *priv,
-  rtdm_user_info_t *user_info,
+  struct rtdm_fd *context,
   const struct msghdr *msg, int flags);
ssize_t (*read)(struct rtipc_private *priv,
-   rtdm_user_info_t *user_info,
+   struct rtdm_fd *context,
void *buf, size_t len);
ssize_t (*write)(struct rtipc_private *priv,
-rtdm_user_info_t *user_info,
+struct rtdm_fd *context,
 const void *buf, size_t len);
int (*ioctl)(struct rtipc_private *priv,
-rtdm_user_info_t *user_info,
+struct rtdm_fd *context,
 unsigned int request, void *arg);
} proto_ops;
 };
 
-static inline void *rtipc_context_to_state(struct rtdm_dev_context *context)
+static inline void *rtipc_context_to_state(struct rtdm_fd *context)
 {
struct rtipc_private *p = rtdm_context_to_private(context);
return p-state;
@@ -97,16 +97,16 @@ static inline void rtipc_ns_to_timeval(struct timeval *tv, 
nanosecs_rel_t ns)
tv-tv_usec = nsecs / 1000;
 }
 
-int rtipc_get_arg(rtdm_user_info_t *user_info,
+int rtipc_get_arg(struct rtdm_fd *fd,
  void *dst, const void *src, size_t len);
 
-int rtipc_put_arg(rtdm_user_info_t *user_info,
+int rtipc_put_arg(struct rtdm_fd *fd,
  void *dst, const void *src, size_t len);
 
-int rtipc_get_sockaddr(rtdm_user_info_t *user_info,
+int rtipc_get_sockaddr(struct rtdm_fd *fd,
   const void *arg, struct sockaddr_ipc **saddrp);
 
-int rtipc_put_sockaddr(rtdm_user_info_t *user_info, void *arg,
+int rtipc_put_sockaddr(struct rtdm_fd *fd, void *arg,
   const struct sockaddr_ipc *saddr);
 
 ssize_t rtipc_get_iov_flatlen(struct iovec *iov, int iovlen);
diff --git a/kernel/drivers/ipc/rtipc.c b/kernel/drivers/ipc/rtipc.c
index 20c2a74..e9e815b 100644
--- a/kernel/drivers/ipc/rtipc.c
+++ b/kernel/drivers/ipc/rtipc.c
@@ -37,11 +37,11 @@ static struct rtipc_protocol *protocols[IPCPROTO_MAX] = {
 
 DEFINE_XNPTREE(rtipc_ptree, rtipc);
 
-int rtipc_get_arg(rtdm_user_info_t *user_info,
+int rtipc_get_arg(struct rtdm_fd *context,
  void *dst, const void *src, size_t len)
 {
-   if (user_info) {
-   if (rtdm_safe_copy_from_user(user_info, dst, src, len))
+   if (rtdm_context_user_p(context)) {
+   if (rtdm_safe_copy_from_user(context, dst, src, len))
return -EFAULT;
} else
memcpy(dst, src, len);
@@ -49,11 +49,11 @@ int rtipc_get_arg(rtdm_user_info_t *user_info,
return 0;
 }
 
-int rtipc_put_arg(rtdm_user_info_t *user_info,
+int rtipc_put_arg(struct rtdm_fd *context,
  void *dst, const void *src, size_t len)
 {
-   if (user_info) {
-   if (rtdm_safe_copy_to_user(user_info, dst, src, len))
+   if (rtdm_context_user_p(context)) {
+   if (rtdm_safe_copy_to_user(context, dst, src, len))
return -EFAULT;
} else
memcpy(dst, src, len);
@@ -61,12 +61,12 @@ int rtipc_put_arg(rtdm_user_info_t *user_info,
return 0;
 }
 
-int 

[Xenomai-git] Gilles Chanteperdrix : cobalt/rtdm: base named devices on nucleus registry

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: f5d9edb7f95405311b1e66a3a56cca9fe767007a
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=f5d9edb7f95405311b1e66a3a56cca9fe767007a

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sun Jan 26 23:47:24 2014 +0100

cobalt/rtdm: base named devices on nucleus registry

---

 include/cobalt/kernel/rtdm/driver.h |   12 ++--
 kernel/cobalt/rtdm/device.c |  124 ++-
 kernel/cobalt/rtdm/internal.h   |2 +-
 kernel/cobalt/rtdm/proc.c   |   94 --
 4 files changed, 70 insertions(+), 162 deletions(-)

diff --git a/include/cobalt/kernel/rtdm/driver.h 
b/include/cobalt/kernel/rtdm/driver.h
index 27cddcb..0815246 100644
--- a/include/cobalt/kernel/rtdm/driver.h
+++ b/include/cobalt/kernel/rtdm/driver.h
@@ -447,8 +447,12 @@ rtdm_private_to_context(void *dev_private)
 }
 
 struct rtdm_dev_reserved {
+   unsigned magic;
union {
-   struct list_head entry;
+   struct {
+   struct list_head entry;
+   xnhandle_t handle;
+   };
struct xnid id;
};
atomic_t refcount;
@@ -463,6 +467,9 @@ struct rtdm_dev_reserved {
  * not reside in write-protected memory.
  */
 struct rtdm_device {
+   /** Data stored by RTDM inside a registered device (internal use only) 
*/
+   struct rtdm_dev_reserved reserved;
+
/** Revision number of this structure, see
 *  @ref drv_versioning Driver Versioning defines */
int struct_version;
@@ -531,9 +538,6 @@ struct rtdm_device {
int device_id;
/** Driver definable device data */
void *device_data;
-
-   /** Data stored by RTDM inside a registered device (internal use only) 
*/
-   struct rtdm_dev_reserved reserved;
 };
 /** @} devregister */
 
diff --git a/kernel/cobalt/rtdm/device.c b/kernel/cobalt/rtdm/device.c
index e6d7bfe..2a9dd82 100644
--- a/kernel/cobalt/rtdm/device.c
+++ b/kernel/cobalt/rtdm/device.c
@@ -32,6 +32,8 @@
 #include rtdm/internal.h
 #include trace/events/cobalt-rtdm.h
 
+#define RTDM_DEVICE_MAGIC  0x82846877
+
 #define SET_DEFAULT_OP(device, operation)  \
(device).operation##_rt  = (void *)rtdm_no_support; \
(device).operation##_nrt = (void *)rtdm_no_support
@@ -45,13 +47,7 @@
 #define ANY_HANDLER(device, operation) \
((device).operation##_rt || (device).operation##_nrt)
 
-unsigned int devname_hashtab_size = DEF_DEVNAME_HASHTAB_SIZE;
-module_param(devname_hashtab_size, uint, 0400);
-MODULE_PARM_DESC(devname_hashtab_size,
-Size of hash table for named devices (must be power of 2));
-
-struct list_head *rtdm_named_devices;  /* hash table */
-static int name_hashkey_mask;
+struct list_head rtdm_named_devices;   /* hash table */
 struct rb_root rtdm_protocol_devices;
 
 int rtdm_apc;
@@ -75,18 +71,6 @@ int rtdm_select_bind_no_support(struct rtdm_dev_context 
*context,
return -EBADF;
 }
 
-static inline int get_name_hash(const char *str, int limit, int hashkey_mask)
-{
-   int hash = 0;
-
-   while (*str != 0) {
-   hash += *str++;
-   if (--limit == 0)
-   break;
-   }
-   return hash  hashkey_mask;
-}
-
 static inline unsigned long long get_proto_id(int pf, int type)
 {
unsigned long long llpf = (unsigned)pf;
@@ -100,30 +84,28 @@ static inline void rtdm_reference_device(struct 
rtdm_device *device)
 
 struct rtdm_device *get_named_device(const char *name)
 {
-   struct list_head *entry;
struct rtdm_device *device;
-   int hashkey;
+   xnhandle_t handle;
+   int err;
spl_t s;
 
-   hashkey = get_name_hash(name, RTDM_MAX_DEVNAME_LEN, name_hashkey_mask);
+   err = xnregistry_bind(name, XN_NONBLOCK, XN_RELATIVE, handle);
+   if (err == -EWOULDBLOCK)
+   return NULL;
 
xnlock_get_irqsave(rt_dev_lock, s);
 
-   list_for_each(entry, rtdm_named_devices[hashkey]) {
-   device = list_entry(entry, struct rtdm_device, reserved.entry);
-
-   if (strcmp(name, device-device_name) == 0) {
+   device = xnregistry_lookup(handle, NULL);
+   if (device) {
+   if (device-reserved.magic != RTDM_DEVICE_MAGIC)
+   device = NULL;
+   else
rtdm_reference_device(device);
-
-   xnlock_put_irqrestore(rt_dev_lock, s);
-
-   return device;
-   }
}
 
xnlock_put_irqrestore(rt_dev_lock, s);
 
-   return NULL;
+   return device;
 }
 
 struct rtdm_device *get_protocol_device(int protocol_family, int socket_type)
@@ -185,10 +167,7 @@ struct rtdm_device *get_protocol_device(int 
protocol_family, int socket_type)
 int rtdm_dev_register(struct rtdm_device *device)

[Xenomai-git] Gilles Chanteperdrix : cobalt/posix: remove the now unused posix registry

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: af55ca9ae4a19c395b5c18e2289c66773a1272a5
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=af55ca9ae4a19c395b5c18e2289c66773a1272a5

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Tue Dec 24 15:46:35 2013 +0100

cobalt/posix: remove the now unused posix registry

---

 kernel/cobalt/posix/Makefile   |3 +-
 kernel/cobalt/posix/init.c |4 +-
 kernel/cobalt/posix/internal.h |4 +-
 kernel/cobalt/posix/registry.c |  446 
 kernel/cobalt/posix/registry.h |  126 
 5 files changed, 6 insertions(+), 577 deletions(-)

diff --git a/kernel/cobalt/posix/Makefile b/kernel/cobalt/posix/Makefile
index aad94a6..40c682e 100644
--- a/kernel/cobalt/posix/Makefile
+++ b/kernel/cobalt/posix/Makefile
@@ -10,9 +10,8 @@ posix-y :=\
mqueue.o\
mutex.o \
mutex_attr.o\
-   registry.o  \
-   sem.o   \
nsem.o  \
+   sem.o   \
select.o\
signal.o\
syscall.o   \
diff --git a/kernel/cobalt/posix/init.c b/kernel/cobalt/posix/init.c
index 4ad6b90..a78e31a 100644
--- a/kernel/cobalt/posix/init.c
+++ b/kernel/cobalt/posix/init.c
@@ -61,6 +61,8 @@ MODULE_DESCRIPTION(Xenomai/cobalt POSIX interface);
 MODULE_AUTHOR(gilles.chanteperd...@xenomai.org);
 MODULE_LICENSE(GPL);
 
+struct cobalt_kqueues cobalt_global_kqueues;
+
 void cobalt_cleanup(void)
 {
cobalt_syscall_cleanup();
@@ -71,7 +73,6 @@ void cobalt_cleanup(void)
cobalt_sem_pkg_cleanup();
cobalt_cond_pkg_cleanup();
cobalt_mutex_pkg_cleanup();
-   cobalt_reg_pkg_cleanup();
 }
 
 int __init cobalt_init(void)
@@ -82,7 +83,6 @@ int __init cobalt_init(void)
if (ret)
return ret;
 
-   cobalt_reg_pkg_init(64, 128);   /* FIXME: replace with compilation 
constants. */
cobalt_mutex_pkg_init();
cobalt_sem_pkg_init();
cobalt_cond_pkg_init();
diff --git a/kernel/cobalt/posix/internal.h b/kernel/cobalt/posix/internal.h
index c6fbd0f..642ca05 100644
--- a/kernel/cobalt/posix/internal.h
+++ b/kernel/cobalt/posix/internal.h
@@ -24,10 +24,12 @@
 #include cobalt/kernel/assert.h
 #include cobalt/kernel/list.h
 #include cobalt/kernel/arith.h
-#include registry.h
 #include process.h
 #include extension.h
 
+#define COBALT_MAXNAME 64
+#define COBALT_PERMS_MASK (O_RDONLY | O_WRONLY | O_RDWR)
+
 #define COBALT_MAGIC(n) (0x8686##n##n)
 #define COBALT_ANY_MAGIC COBALT_MAGIC(00)
 #define COBALT_THREAD_MAGIC  COBALT_MAGIC(01)
diff --git a/kernel/cobalt/posix/registry.c b/kernel/cobalt/posix/registry.c
deleted file mode 100644
index a0e4fd4..000
--- a/kernel/cobalt/posix/registry.c
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * Written by Gilles Chanteperdrix gilles.chanteperd...@xenomai.org.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include linux/fcntl.h
-#include internal.h
-#include thread.h
-
-#define BITS_PER_INT 32
-
-struct {
-   cobalt_node_t **node_buckets;
-   unsigned buckets_count;
-
-   cobalt_desc_t **descs;
-   unsigned maxfds;
-   unsigned *fdsmap;
-   unsigned mapsz;
-} cobalt_reg;
-
-static unsigned cobalt_reg_crunch(const char *key)
-{
-   unsigned h = 0, g;
-
-#define HQON24 /* Higher byte position */
-#define HBYTE   0xf000 /* Higher nibble on */
-
-   while (*key) {
-   h = (h  4) + *key++;
-   if ((g = (h  HBYTE)) != 0)
-   h = (h ^ (g  HQON)) ^ g;
-   }
-
-   return h % cobalt_reg.buckets_count;
-}
-
-static int cobalt_node_lookup(cobalt_node_t *** node_linkp,
-const char *name, unsigned long magic)
-{
-   cobalt_node_t **node_link;
-
-   if (strnlen(name, sizeof((*node_link)-name)) ==
-   sizeof((*node_link)-name))
-   return ENAMETOOLONG;
-
-   node_link = cobalt_reg.node_buckets[cobalt_reg_crunch(name)];
-
-   while (*node_link) {
-   cobalt_node_t *node = *node_link;
-
-   if (!strncmp(node-name, name, COBALT_MAXNAME)
-node-magic == magic)
-   break;
-
-   node_link = node-next;
-   

[Xenomai-git] Philippe Gerum : cobalt/posix: guard for unimplemented syscalls in table

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: c103d28d1ad925a7bd705afcf9b90ae5341de815
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=c103d28d1ad925a7bd705afcf9b90ae5341de815

Author: Philippe Gerum r...@xenomai.org
Date:   Fri May 16 14:37:19 2014 +0200

cobalt/posix: guard for unimplemented syscalls in table

---

 include/cobalt/uapi/syscall.h   |2 ++
 kernel/cobalt/include/asm-generic/xenomai/syscall.h |3 +++
 kernel/cobalt/posix/syscall.c   |6 ++
 3 files changed, 11 insertions(+)

diff --git a/include/cobalt/uapi/syscall.h b/include/cobalt/uapi/syscall.h
index 57a6b65..a47d520 100644
--- a/include/cobalt/uapi/syscall.h
+++ b/include/cobalt/uapi/syscall.h
@@ -119,4 +119,6 @@
 #define sc_cobalt_timerfd_settime  96
 #define sc_cobalt_timerfd_gettime  97
 
+#define __NR_COBALT_SYSCALLS   98
+
 #endif /* !_COBALT_UAPI_SYSCALL_H */
diff --git a/kernel/cobalt/include/asm-generic/xenomai/syscall.h 
b/kernel/cobalt/include/asm-generic/xenomai/syscall.h
index eac54fc..dcf6df7 100644
--- a/kernel/cobalt/include/asm-generic/xenomai/syscall.h
+++ b/kernel/cobalt/include/asm-generic/xenomai/syscall.h
@@ -80,6 +80,9 @@ struct xnsyscall {
 #define SKINCALL_DEF(nr, fn, fl)   \
[nr] = { .svc = __syscast__(fn), .flags = __xn_exec_##fl }
 
+#define SKINCALL_NI\
+   { .svc = __syscast__(cobalt_syscall_ni), .flags = 0 }
+
 #define access_rok(addr, size) access_ok(VERIFY_READ, (addr), (size))
 #define access_wok(addr, size) access_ok(VERIFY_WRITE, (addr), (size))
 
diff --git a/kernel/cobalt/posix/syscall.c b/kernel/cobalt/posix/syscall.c
index e41d3dc..7e9b93a 100644
--- a/kernel/cobalt/posix/syscall.c
+++ b/kernel/cobalt/posix/syscall.c
@@ -80,7 +80,13 @@ static void cobalt_process_detach(void *arg)
kfree(cc);
 }
 
+static int cobalt_syscall_ni(void)
+{
+   return -ENOSYS;
+}
+
 static struct xnsyscall cobalt_syscalls[] = {
+   [0 ... __NR_COBALT_SYSCALLS-1] = SKINCALL_NI,
SKINCALL_DEF(sc_cobalt_thread_create, cobalt_thread_create, init),
SKINCALL_DEF(sc_cobalt_thread_setschedparam_ex, 
cobalt_thread_setschedparam_ex, conforming),
SKINCALL_DEF(sc_cobalt_thread_getschedparam_ex, 
cobalt_thread_getschedparam_ex, any),


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : drivers/rtdm: increment API and structs versions

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 3b04e216f7b42f45915931211494f609489e7ed7
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=3b04e216f7b42f45915931211494f609489e7ed7

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sat May 10 18:06:44 2014 +0200

drivers/rtdm: increment API and structs versions

---

 include/cobalt/kernel/rtdm/driver.h |4 ++--
 include/rtdm/uapi/rtdm.h|4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/include/cobalt/kernel/rtdm/driver.h 
b/include/cobalt/kernel/rtdm/driver.h
index 63d12b5..e3ccc9c 100644
--- a/include/cobalt/kernel/rtdm/driver.h
+++ b/include/cobalt/kernel/rtdm/driver.h
@@ -87,10 +87,10 @@ enum rtdm_selecttype;
  * @{
  */
 /** Version of struct rtdm_device */
-#define RTDM_DEVICE_STRUCT_VER 5
+#define RTDM_DEVICE_STRUCT_VER 6
 
 /** Version of struct rtdm_dev_context */
-#define RTDM_CONTEXT_STRUCT_VER3
+#define RTDM_CONTEXT_STRUCT_VER4
 
 /** Flag indicating a secure variant of RTDM (not supported here) */
 #define RTDM_SECURE_DEVICE 0x8000
diff --git a/include/rtdm/uapi/rtdm.h b/include/rtdm/uapi/rtdm.h
index 1580574..3562c69 100644
--- a/include/rtdm/uapi/rtdm.h
+++ b/include/rtdm/uapi/rtdm.h
@@ -33,10 +33,10 @@
  * @anchor api_versioning @name API Versioning
  * @{ */
 /** Common user and driver API version */
-#define RTDM_API_VER   8
+#define RTDM_API_VER   9
 
 /** Minimum API revision compatible with the current release */
-#define RTDM_API_MIN_COMPAT_VER6
+#define RTDM_API_MIN_COMPAT_VER9
 /** @} API Versioning */
 
 /** RTDM type for representing absolute dates. Its base type is a 64 bit


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : analogy: adapt to RTDM API changes

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 1430693899f8cd5ae2b4fdcecb30e49f49428570
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=1430693899f8cd5ae2b4fdcecb30e49f49428570

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sun May 11 22:00:17 2014 +0200

analogy: adapt to RTDM API changes

---

 include/cobalt/kernel/rtdm/analogy/buffer.h|   12 +++--
 include/cobalt/kernel/rtdm/analogy/context.h   |8 +--
 include/cobalt/kernel/rtdm/analogy/subdevice.h |2 +-
 kernel/drivers/analogy/buffer.c|   46 +-
 kernel/drivers/analogy/command.c   |4 +-
 kernel/drivers/analogy/device.c|   10 ++--
 kernel/drivers/analogy/instruction.c   |   17 ---
 kernel/drivers/analogy/intel/8255.c|3 +-
 kernel/drivers/analogy/intel/parport.c |4 +-
 .../analogy/national_instruments/mio_common.c  |   16 ++
 kernel/drivers/analogy/rtdm_interface.c|   51 +++-
 kernel/drivers/analogy/subdevice.c |   23 +
 kernel/drivers/analogy/testing/fake.c  |   12 ++---
 kernel/drivers/analogy/testing/loop.c  |4 +-
 14 files changed, 95 insertions(+), 117 deletions(-)

diff --git a/include/cobalt/kernel/rtdm/analogy/buffer.h 
b/include/cobalt/kernel/rtdm/analogy/buffer.h
index 9c48ac3..5a1e966 100644
--- a/include/cobalt/kernel/rtdm/analogy/buffer.h
+++ b/include/cobalt/kernel/rtdm/analogy/buffer.h
@@ -98,6 +98,7 @@ static inline int __produce(a4l_cxt_t *cxt,
a4l_buf_t *buf, void *pin, unsigned long count)
 {
unsigned long start_ptr = (buf-prd_count % buf-size);
+   struct rtdm_fd *fd = rtdm_private_to_fd(cxt);
unsigned long tmp_cnt = count;
int ret = 0;
 
@@ -107,10 +108,10 @@ static inline int __produce(a4l_cxt_t *cxt,
buf-size - start_ptr : tmp_cnt;
 
/* Perform the copy */
-   if (cxt == NULL)
+   if (rtdm_fd_is_user(fd) == 0)
memcpy(buf-buf + start_ptr, pin, blk_size);
else
-   ret = rtdm_safe_copy_from_user(cxt-user_info,
+   ret = rtdm_safe_copy_from_user(fd,
   buf-buf + start_ptr,
   pin, blk_size);
 
@@ -130,6 +131,7 @@ static inline int __consume(a4l_cxt_t *cxt,
a4l_buf_t *buf, void *pout, unsigned long count)
 {
unsigned long start_ptr = (buf-cns_count % buf-size);
+   struct rtdm_fd *fd = rtdm_private_to_fd(cxt);
unsigned long tmp_cnt = count;
int ret = 0;
 
@@ -139,10 +141,10 @@ static inline int __consume(a4l_cxt_t *cxt,
buf-size - start_ptr : tmp_cnt;
 
/* Perform the copy */
-   if (cxt == NULL)
+   if (rtdm_fd_is_user(fd) == 0)
memcpy(pout, buf-buf + start_ptr, blk_size);
else
-   ret = rtdm_safe_copy_to_user(cxt-user_info,
+   ret = rtdm_safe_copy_to_user(fd,
 pout,
 buf-buf + start_ptr,
 blk_size);
@@ -391,7 +393,7 @@ void a4l_cleanup_buffer(a4l_buf_t * buf_desc);
 
 int a4l_setup_buffer(a4l_cxt_t *cxt, a4l_cmd_t *cmd);
 
-int a4l_cancel_buffer(a4l_cxt_t *cxt);
+void a4l_cancel_buffer(a4l_cxt_t *cxt);
 
 int a4l_buf_prepare_absput(struct a4l_subdevice *subd,
   unsigned long count);
diff --git a/include/cobalt/kernel/rtdm/analogy/context.h 
b/include/cobalt/kernel/rtdm/analogy/context.h
index a96d931..6cc25bb 100644
--- a/include/cobalt/kernel/rtdm/analogy/context.h
+++ b/include/cobalt/kernel/rtdm/analogy/context.h
@@ -28,10 +28,6 @@ struct a4l_device;
 struct a4l_buffer;
 
 struct a4l_device_context {
-
-   /* Needed to call rtdm_*_copy_from/to_user functions */
-   rtdm_user_info_t *user_info;
-
/* The adequate device pointer
   (retrieved thanks to minor at open time) */
struct a4l_device *dev;
@@ -46,9 +42,9 @@ typedef struct a4l_device_context a4l_cxt_t;
 static inline int a4l_get_minor(a4l_cxt_t *cxt)
 {
/* Get a pointer on the container structure */
-   struct rtdm_dev_context * rtdm_cxt = rtdm_private_to_context(cxt);
+   struct rtdm_fd *fd = rtdm_private_to_fd(cxt);
/* Get the minor index */
-   return rtdm_cxt-device-device_id;
+   return rtdm_fd_device(fd)-device_id;
 }
 
 #endif /* !_COBALT_RTDM_ANALOGY_CONTEXT_H */
diff --git a/include/cobalt/kernel/rtdm/analogy/subdevice.h 
b/include/cobalt/kernel/rtdm/analogy/subdevice.h
index f42c1d3..e3a27d8 100644
--- a/include/cobalt/kernel/rtdm/analogy/subdevice.h
+++ 

[Xenomai-git] Philippe Gerum : config: bump UAPI level

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 476c5dfc3c150c2173b42dde21934ab15afc27a8
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=476c5dfc3c150c2173b42dde21934ab15afc27a8

Author: Philippe Gerum r...@xenomai.org
Date:   Thu Apr 24 16:11:15 2014 +0200

config: bump UAPI level

---

 config/apirev |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/config/apirev b/config/apirev
index 7ed6ff8..1e8b314 100644
--- a/config/apirev
+++ b/config/apirev
@@ -1 +1 @@
-5
+6


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : config: bump UAPI level

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 476c5dfc3c150c2173b42dde21934ab15afc27a8
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=476c5dfc3c150c2173b42dde21934ab15afc27a8

Author: Philippe Gerum r...@xenomai.org
Date:   Thu Apr 24 16:11:15 2014 +0200

config: bump UAPI level

---

 config/apirev |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/config/apirev b/config/apirev
index 7ed6ff8..1e8b314 100644
--- a/config/apirev
+++ b/config/apirev
@@ -1 +1 @@
-5
+6


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : cobalt: add timerfd services

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: a67c4eb81298bb7c9122e0a53b3e9c6c26fc9019
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=a67c4eb81298bb7c9122e0a53b3e9c6c26fc9019

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Thu Dec 26 22:29:04 2013 +0100

cobalt: add timerfd services

---

 doc/asciidoc/MIGRATION.adoc|7 +
 include/cobalt/sys/timerfd.h   |   42 +
 include/cobalt/uapi/syscall.h  |3 +
 include/cobalt/uapi/time.h |8 +
 kernel/cobalt/posix/Makefile   |3 +-
 kernel/cobalt/posix/internal.h |1 +
 kernel/cobalt/posix/syscall.c  |5 +
 kernel/cobalt/posix/timer.c|   70 +---
 kernel/cobalt/posix/timer.h|7 +
 kernel/cobalt/posix/timerfd.c  |  296 
 kernel/cobalt/posix/timerfd.h  |   14 ++
 lib/cobalt/Makefile.am |1 +
 lib/cobalt/cobalt.wrappers |3 +
 lib/cobalt/timerfd.c   |   73 
 lib/copperplate/regd/regd.c|   28 +--
 testsuite/regression/posix/Makefile.am |5 +-
 testsuite/regression/posix/timerfd.c   |  294 +++
 17 files changed, 817 insertions(+), 43 deletions(-)

diff --git a/doc/asciidoc/MIGRATION.adoc b/doc/asciidoc/MIGRATION.adoc
index e6fa554..cd2a1a4 100644
--- a/doc/asciidoc/MIGRATION.adoc
+++ b/doc/asciidoc/MIGRATION.adoc
@@ -598,6 +598,13 @@ int pthread_make_periodic_np(pthread_t thread, clockid_t 
clk_id,
 struct timespec *starttp, struct timespec *periodtp);
 ---
 
+.Timerfd
+
+[normal] Cobalt replacements for +timerfd_create()+,
++timerfd_settime()+ and +timerfd_gettime()+ have been introduced. The
+implementation delivers I/O notifications to RTDM file descriptors
+upon Cobalt-originated real-time signals.
+
 .Message queues
 
 - +mq_open()+ default attributes align on the regular kernel values,
diff --git a/include/cobalt/sys/timerfd.h b/include/cobalt/sys/timerfd.h
new file mode 100644
index 000..a7df836
--- /dev/null
+++ b/include/cobalt/sys/timerfd.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2013 Gilles Chanteperdrix gilles.chanteperd...@xenomai.org.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
+ */
+#ifndef _COBALT_SYS_TIMERFD_H
+#define _COBALT_SYS_TIMERFD_H
+
+#pragma GCC system_header
+#include_next sys/timerfd.h
+#include cobalt/wrappers.h
+#include cobalt/uapi/time.h
+
+#ifdef __cplusplus
+extern C {
+#endif /* __cplusplus */
+
+COBALT_DECL(int, timerfd_create(int clockid, int flags));
+
+COBALT_DECL(int, timerfd_settime(int fd, int flags,
+   const struct itimerspec *new_value,
+   struct itimerspec *old_value));
+
+COBALT_DECL(int, timerfd_gettime(int fd, struct itimerspec *curr_value));
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _COBALT_SYS_TIMERFD_H */
diff --git a/include/cobalt/uapi/syscall.h b/include/cobalt/uapi/syscall.h
index f18659a..57a6b65 100644
--- a/include/cobalt/uapi/syscall.h
+++ b/include/cobalt/uapi/syscall.h
@@ -115,5 +115,8 @@
 #define sc_cobalt_event_destroy 92
 #define sc_cobalt_sched_setconfig_np   93
 #define sc_cobalt_sched_getconfig_np   94
+#define sc_cobalt_timerfd_create   95
+#define sc_cobalt_timerfd_settime  96
+#define sc_cobalt_timerfd_gettime  97
 
 #endif /* !_COBALT_UAPI_SYSCALL_H */
diff --git a/include/cobalt/uapi/time.h b/include/cobalt/uapi/time.h
index 349d659..764c74c 100644
--- a/include/cobalt/uapi/time.h
+++ b/include/cobalt/uapi/time.h
@@ -39,4 +39,12 @@
 
 #define CLOCK_HOST_REALTIME  __COBALT_CLOCK_CODE(42)
 
+/*
+ * Additional timerfd defines
+ *
+ * when passing TFD_WAKEUP to timer_settime, any timer expiration
+ * unblocks the thread having issued timer_settime.
+ */
+#define TFD_WAKEUP (1  2)
+
 #endif /* !_COBALT_UAPI_TIME_H */
diff --git a/kernel/cobalt/posix/Makefile b/kernel/cobalt/posix/Makefile
index 40c682e..9d77f72 100644
--- a/kernel/cobalt/posix/Makefile
+++ b/kernel/cobalt/posix/Makefile
@@ -16,6 +16,7 @@ posix-y :=\
signal.o\
syscall.o   \
thread.o\
-   timer.o
+   timer.o \
+   timerfd.o
 
 ccflags-y 

[Xenomai-git] Gilles Chanteperdrix : cobalt/mq: rebase on registry and common fd

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 4cc52aaa1794cc25f3069f80818490e71498d56c
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=4cc52aaa1794cc25f3069f80818490e71498d56c

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Tue Dec 24 15:42:42 2013 +0100

cobalt/mq: rebase on registry and common fd

Also remove the cobalt_mq_send and cobalt_mq_receive syscall
as the timed versions can be called with a NULL timeout pointer.

---

 include/cobalt/uapi/syscall.h |4 +-
 kernel/cobalt/posix/mqueue.c  |  965 +
 kernel/cobalt/posix/mqueue.h  |   11 -
 kernel/cobalt/posix/process.h |1 -
 kernel/cobalt/posix/syscall.c |4 -
 lib/cobalt/mq.c   |   10 +-
 6 files changed, 396 insertions(+), 599 deletions(-)

diff --git a/include/cobalt/uapi/syscall.h b/include/cobalt/uapi/syscall.h
index 1254ce5..f18659a 100644
--- a/include/cobalt/uapi/syscall.h
+++ b/include/cobalt/uapi/syscall.h
@@ -56,9 +56,9 @@
 #define sc_cobalt_mq_unlink 33
 #define sc_cobalt_mq_getattr34
 #define sc_cobalt_mq_setattr35
-#define sc_cobalt_mq_send   36
+/* 36 unimplemented */
 #define sc_cobalt_mq_timedsend  37
-#define sc_cobalt_mq_receive38
+/* 38 unimplemented */
 #define sc_cobalt_mq_timedreceive   39
 #define sc_cobalt_thread_probe  40
 #define sc_cobalt_sched_minprio 41
diff --git a/kernel/cobalt/posix/mqueue.c b/kernel/cobalt/posix/mqueue.c
index a3154d1..76e9155 100644
--- a/kernel/cobalt/posix/mqueue.c
+++ b/kernel/cobalt/posix/mqueue.c
@@ -32,6 +32,7 @@
 #include stdarg.h
 #include linux/fs.h
 #include cobalt/kernel/select.h
+#include rtdm/fd.h
 #include internal.h
 #include thread.h
 #include signal.h
@@ -51,8 +52,9 @@ struct mq_attr {
 };
 
 struct cobalt_mq {
-   cobalt_node_t nodebase;
-#define node2mq(naddr) container_of(naddr,  cobalt_mq_t, nodebase)
+   unsigned magic;
+
+   struct list_head link;
 
struct xnsynch receivers;
struct xnsynch senders;
@@ -68,13 +70,20 @@ struct cobalt_mq {
struct cobalt_thread *target;
 
struct mq_attr attr;
-   struct list_head link;  /* link in mqq */
+
+   unsigned refs;
+   char name[COBALT_MAXNAME];
+   xnhandle_t handle;
 
DECLARE_XNSELECT(read_select);
DECLARE_XNSELECT(write_select);
 };
 
-typedef struct cobalt_mq cobalt_mq_t;
+struct cobalt_mqd {
+   long flags;
+   struct cobalt_mq *mq;
+   struct rtdm_fd fd;
+};
 
 struct cobalt_msg {
struct list_head link;
@@ -83,8 +92,6 @@ struct cobalt_msg {
char data[0];
 };
 
-static struct list_head cobalt_mqq;
-
 struct cobalt_mqwait_context {
struct xnthread_wait_context wc;
struct cobalt_msg *msg;
@@ -95,7 +102,9 @@ static struct mq_attr default_attr = {
   .mq_msgsize = 8192,
 };
 
-static inline struct cobalt_msg *mq_msg_alloc(cobalt_mq_t *mq)
+static struct list_head cobalt_mqq;
+
+static inline struct cobalt_msg *mq_msg_alloc(struct cobalt_mq *mq)
 {
if (list_empty(mq-avail))
return NULL;
@@ -103,12 +112,12 @@ static inline struct cobalt_msg *mq_msg_alloc(cobalt_mq_t 
*mq)
return list_get_entry(mq-avail, struct cobalt_msg, link);
 }
 
-static inline void mq_msg_free(cobalt_mq_t *mq, struct cobalt_msg * msg)
+static inline void mq_msg_free(struct cobalt_mq *mq, struct cobalt_msg * msg)
 {
list_add(msg-link, mq-avail); /* For earliest re-use of the block. 
*/
 }
 
-static inline int mq_init(cobalt_mq_t *mq, const struct mq_attr *attr)
+static inline int mq_init(struct cobalt_mq *mq, const struct mq_attr *attr)
 {
unsigned i, msgsize, memsize;
char *mem;
@@ -158,37 +167,21 @@ static inline int mq_init(cobalt_mq_t *mq, const struct 
mq_attr *attr)
mq-target = NULL;
xnselect_init(mq-read_select);
xnselect_init(mq-write_select);
+   mq-magic = COBALT_MQ_MAGIC;
+   mq-refs = 2;
 
return 0;
 }
 
-struct lostage_memfree {
-   struct ipipe_work_header work; /* Must be first. */
-   void *mem;
-   size_t memsize;
-};
-
-static void lostage_mq_memfree(struct ipipe_work_header *work)
+static inline void mq_destroy(struct cobalt_mq *mq)
 {
-   struct lostage_memfree *rq;
-
-   rq = container_of(work, struct lostage_memfree, work);
-   free_pages_exact(rq-mem, rq-memsize);
-}
-
-static inline void mq_destroy(cobalt_mq_t *mq)
-{
-   struct lostage_memfree freework = {
-   .work = {
-   .size = sizeof(freework),
-   .handler = lostage_mq_memfree,
-   },
-   .mem = mq-mem,
-   .memsize = mq-memsize,
-   };
int resched;
spl_t s;
 
+#if XENO_DEBUG(COBALT)
+   printk(XENO_INFO deleting Cobalt message queue \/%s\\n, mq-name);
+#endif
+
xnlock_get_irqsave(nklock, s);
resched = (xnsynch_destroy(mq-receivers) == 

[Xenomai-git] Philippe Gerum : cobalt: bump ABI revision level for all archs

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 178844579b36e3c2df1aa40cc552649b41427db5
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=178844579b36e3c2df1aa40cc552649b41427db5

Author: Philippe Gerum r...@xenomai.org
Date:   Wed Mar 12 10:41:59 2014 +0100

cobalt: bump ABI revision level for all archs

---

 kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h  |2 +-
 kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h |2 +-
 kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h|2 +-
 kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h  |2 +-
 kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h   |2 +-
 kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h  |2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h
index 2570664..f392a4b 100644
--- a/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h
@@ -29,7 +29,7 @@
 #define __XN_TSC_TYPE_FREERUNNING_COUNTDOWN 5
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP (__xn_feat_generic_mask)
 
diff --git a/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h
index 9eedd29..f711206 100644
--- a/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_BLACKFIN_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h
index b168993..568c926 100644
--- a/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_NIOS2_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   5UL
+#define XENOMAI_ABI_REV   6UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h
index 46e51c2..881a92f 100644
--- a/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_POWERPC_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h
index 4be9417..7c39114 100644
--- a/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_SH_ASM_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   3UL
+#define XENOMAI_ABI_REV   4UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h
index 3884c5a..9a147df 100644
--- a/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_X86_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : cobalt/rtdm: base protocol devices on xnid

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: c242e4834ade1974d78fb85bc761128c7b0e026f
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=c242e4834ade1974d78fb85bc761128c7b0e026f

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sun Jan 26 21:38:14 2014 +0100

cobalt/rtdm: base protocol devices on xnid

---

 include/cobalt/kernel/rtdm/driver.h |6 +-
 kernel/cobalt/rtdm/device.c |  110 ++-
 kernel/cobalt/rtdm/internal.h   |4 +-
 kernel/cobalt/rtdm/proc.c   |   58 +-
 4 files changed, 78 insertions(+), 100 deletions(-)

diff --git a/include/cobalt/kernel/rtdm/driver.h 
b/include/cobalt/kernel/rtdm/driver.h
index d64ccf4..27cddcb 100644
--- a/include/cobalt/kernel/rtdm/driver.h
+++ b/include/cobalt/kernel/rtdm/driver.h
@@ -40,6 +40,7 @@
 #include cobalt/kernel/shadow.h
 #include cobalt/kernel/init.h
 #include cobalt/kernel/ancillaries.h
+#include cobalt/kernel/tree.h
 #include rtdm/rtdm.h
 
 /* debug support */
@@ -446,7 +447,10 @@ rtdm_private_to_context(void *dev_private)
 }
 
 struct rtdm_dev_reserved {
-   struct list_head entry;
+   union {
+   struct list_head entry;
+   struct xnid id;
+   };
atomic_t refcount;
struct rtdm_dev_context *exclusive_context;
 };
diff --git a/kernel/cobalt/rtdm/device.c b/kernel/cobalt/rtdm/device.c
index b9639a2..e6d7bfe 100644
--- a/kernel/cobalt/rtdm/device.c
+++ b/kernel/cobalt/rtdm/device.c
@@ -46,19 +46,13 @@
((device).operation##_rt || (device).operation##_nrt)
 
 unsigned int devname_hashtab_size = DEF_DEVNAME_HASHTAB_SIZE;
-unsigned int protocol_hashtab_size = DEF_PROTO_HASHTAB_SIZE;
 module_param(devname_hashtab_size, uint, 0400);
-module_param(protocol_hashtab_size, uint, 0400);
 MODULE_PARM_DESC(devname_hashtab_size,
 Size of hash table for named devices (must be power of 2));
-MODULE_PARM_DESC(protocol_hashtab_size,
-Size of hash table for protocol devices 
-(must be power of 2));
 
 struct list_head *rtdm_named_devices;  /* hash table */
-struct list_head *rtdm_protocol_devices;   /* hash table */
 static int name_hashkey_mask;
-static int proto_hashkey_mask;
+struct rb_root rtdm_protocol_devices;
 
 int rtdm_apc;
 EXPORT_SYMBOL_GPL(rtdm_apc);
@@ -93,9 +87,10 @@ static inline int get_name_hash(const char *str, int limit, 
int hashkey_mask)
return hash  hashkey_mask;
 }
 
-static inline int get_proto_hash(int protocol_family, int socket_type)
+static inline unsigned long long get_proto_id(int pf, int type)
 {
-   return protocol_family  proto_hashkey_mask;
+   unsigned long long llpf = (unsigned)pf;
+   return (llpf  32) | (unsigned)type;
 }
 
 static inline void rtdm_reference_device(struct rtdm_device *device)
@@ -133,31 +128,26 @@ struct rtdm_device *get_named_device(const char *name)
 
 struct rtdm_device *get_protocol_device(int protocol_family, int socket_type)
 {
-   struct list_head *entry;
struct rtdm_device *device;
-   int hashkey;
+   unsigned long long id;
+   struct xnid *xnid;
spl_t s;
 
-   hashkey = get_proto_hash(protocol_family, socket_type);
+   id = get_proto_id(protocol_family, socket_type);
 
xnlock_get_irqsave(rt_dev_lock, s);
 
-   list_for_each(entry, rtdm_protocol_devices[hashkey]) {
-   device = list_entry(entry, struct rtdm_device, reserved.entry);
-
-   if ((device-protocol_family == protocol_family) 
-   (device-socket_type == socket_type)) {
-   rtdm_reference_device(device);
+   xnid = xnid_fetch(rtdm_protocol_devices, id);
+   if (xnid) {
+   device = container_of(xnid, struct rtdm_device, reserved.id);
 
-   xnlock_put_irqrestore(rt_dev_lock, s);
-
-   return device;
-   }
-   }
+   rtdm_reference_device(device);
+   } else
+   device = NULL;
 
xnlock_put_irqrestore(rt_dev_lock, s);
 
-   return NULL;
+   return device;
 }
 
 /*!
@@ -194,6 +184,7 @@ struct rtdm_device *get_protocol_device(int 
protocol_family, int socket_type)
  */
 int rtdm_dev_register(struct rtdm_device *device)
 {
+   unsigned long long id;
int hashkey;
spl_t s;
struct list_head *entry;
@@ -320,34 +311,33 @@ int rtdm_dev_register(struct rtdm_device *device)
 
up(nrt_dev_lock);
} else {
-   hashkey = get_proto_hash(device-protocol_family,
-device-socket_type);
+   id = get_proto_id(device-protocol_family,
+   device-socket_type);
+
+   trace_mark(xn_rtdm, protocol_register, device %p 
+   protocol_family %d socket_type %d flags %d 
+   class %d sub_class %d profile_version %d 
+   

[Xenomai-git] Gilles Chanteperdrix : drivers/testing: adapt switchtest after RTDM changes

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 96e2423ae582c806fc57fe21cbf76a7d8c592413
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=96e2423ae582c806fc57fe21cbf76a7d8c592413

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sat Feb  1 20:29:54 2014 +0100

drivers/testing: adapt switchtest after RTDM changes

---

 kernel/drivers/testing/switchtest.c |  111 ++-
 1 file changed, 45 insertions(+), 66 deletions(-)

diff --git a/kernel/drivers/testing/switchtest.c 
b/kernel/drivers/testing/switchtest.c
index 067457c..cba8811 100644
--- a/kernel/drivers/testing/switchtest.c
+++ b/kernel/drivers/testing/switchtest.c
@@ -511,11 +511,9 @@ static void rtswitch_utask_waker(rtdm_nrtsig_t sig, void 
*arg)
up(ctx-utask-nrt_synch);
 }
 
-static int rtswitch_open(struct rtdm_dev_context *context,
-rtdm_user_info_t *user_info,
-int oflags)
+static int rtswitch_open(struct rtdm_fd *context, int oflags)
 {
-   rtswitch_context_t *ctx = (rtswitch_context_t *) context-dev_private;
+   rtswitch_context_t *ctx = rtdm_context_to_private(context);
int err;
 
ctx-tasks = NULL;
@@ -534,10 +532,9 @@ static int rtswitch_open(struct rtdm_dev_context *context,
return 0;
 }
 
-static int rtswitch_close(struct rtdm_dev_context *context,
- rtdm_user_info_t *user_info)
+static void rtswitch_close(struct rtdm_fd *context)
 {
-   rtswitch_context_t *ctx = (rtswitch_context_t *) context-dev_private;
+   rtswitch_context_t *ctx = rtdm_context_to_private(context);
unsigned i;
 
if (ctx-tasks) {
@@ -556,16 +553,13 @@ static int rtswitch_close(struct rtdm_dev_context 
*context,
}
rtdm_timer_destroy(ctx-wake_up_delay);
rtdm_nrtsig_destroy(ctx-wake_utask);
-
-   return 0;
 }
 
-static int rtswitch_ioctl_nrt(struct rtdm_dev_context *context,
- rtdm_user_info_t *user_info,
+static int rtswitch_ioctl_nrt(struct rtdm_fd *context,
  unsigned int request,
  void *arg)
 {
-   rtswitch_context_t *ctx = (rtswitch_context_t *) context-dev_private;
+   rtswitch_context_t *ctx = rtdm_context_to_private(context);
struct rttst_swtest_task task;
struct rttst_swtest_dir fromto;
unsigned long count;
@@ -588,15 +582,15 @@ static int rtswitch_ioctl_nrt(struct rtdm_dev_context 
*context,
return 0;
 
case RTTST_RTIOC_SWTEST_REGISTER_UTASK:
-   if (!rtdm_rw_user_ok(user_info, arg, sizeof(task)))
+   if (!rtdm_rw_user_ok(context, arg, sizeof(task)))
return -EFAULT;
 
-   rtdm_copy_from_user(user_info, task, arg, sizeof(task));
+   rtdm_copy_from_user(context, task, arg, sizeof(task));
 
err = rtswitch_register_task(ctx, task);
 
if (!err)
-   rtdm_copy_to_user(user_info,
+   rtdm_copy_to_user(context,
  arg,
  task,
  sizeof(task));
@@ -604,15 +598,15 @@ static int rtswitch_ioctl_nrt(struct rtdm_dev_context 
*context,
return err;
 
case RTTST_RTIOC_SWTEST_CREATE_KTASK:
-   if (!rtdm_rw_user_ok(user_info, arg, sizeof(task)))
+   if (!rtdm_rw_user_ok(context, arg, sizeof(task)))
return -EFAULT;
 
-   rtdm_copy_from_user(user_info, task, arg, sizeof(task));
+   rtdm_copy_from_user(context, task, arg, sizeof(task));
 
err = rtswitch_create_ktask(ctx, task);
 
if (!err)
-   rtdm_copy_to_user(user_info,
+   rtdm_copy_to_user(context,
  arg,
  task,
  sizeof(task));
@@ -620,18 +614,18 @@ static int rtswitch_ioctl_nrt(struct rtdm_dev_context 
*context,
return err;
 
case RTTST_RTIOC_SWTEST_PEND:
-   if (!rtdm_read_user_ok(user_info, arg, sizeof(task)))
+   if (!rtdm_read_user_ok(context, arg, sizeof(task)))
return -EFAULT;
 
-   rtdm_copy_from_user(user_info, task, arg, sizeof(task));
+   rtdm_copy_from_user(context, task, arg, sizeof(task));
 
return rtswitch_pend_nrt(ctx, task.index);
 
case RTTST_RTIOC_SWTEST_SWITCH_TO:
-   if (!rtdm_read_user_ok(user_info, arg, sizeof(fromto)))
+   if (!rtdm_read_user_ok(context, arg, sizeof(fromto)))
return -EFAULT;
 
-   rtdm_copy_from_user(user_info,
+   rtdm_copy_from_user(context,
fromto,
   

[Xenomai-git] Gilles Chanteperdrix : drivers/ipc: adapt IDDP after RTDM changes

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: c43101d90e4b2f09a81a6b7fe563378ca4684ace
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=c43101d90e4b2f09a81a6b7fe563378ca4684ace

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Tue Feb  4 21:37:43 2014 +0100

drivers/ipc: adapt IDDP after RTDM changes

---

 kernel/drivers/ipc/iddp.c |  117 ++---
 kernel/drivers/ipc/internal.h |   10 
 2 files changed, 62 insertions(+), 65 deletions(-)

diff --git a/kernel/drivers/ipc/iddp.c b/kernel/drivers/ipc/iddp.c
index 57cb1fe..027e910 100644
--- a/kernel/drivers/ipc/iddp.c
+++ b/kernel/drivers/ipc/iddp.c
@@ -166,7 +166,7 @@ static void __iddp_flush_pool(struct xnheap *heap,
 }
 
 static int iddp_socket(struct rtipc_private *priv,
-  rtdm_user_info_t *user_info)
+  struct rtdm_fd *context)
 {
struct iddp_socket *sk = priv-state;
 
@@ -190,14 +190,19 @@ static int iddp_socket(struct rtipc_private *priv,
return 0;
 }
 
-static int iddp_close(struct rtipc_private *priv,
- rtdm_user_info_t *user_info)
+static void iddp_close(struct rtipc_private *priv,
+   struct rtdm_fd *context)
 {
struct iddp_socket *sk = priv-state;
struct iddp_message *mbuf;
 
-   if (sk-name.sipc_port  -1)
+   if (sk-name.sipc_port  -1) {
+   spl_t s;
+
+   cobalt_atomic_enter(s);
xnmap_remove(portmap, sk-name.sipc_port);
+   cobalt_atomic_leave(s);
+   }
 
rtdm_sem_destroy(sk-insem);
rtdm_waitqueue_destroy(sk-privwaitq);
@@ -207,7 +212,7 @@ static int iddp_close(struct rtipc_private *priv,
 
if (sk-bufpool != kheap) {
xnheap_destroy(sk-privpool, __iddp_flush_pool, NULL);
-   return 0;
+   return;
}
 
/* Send unread datagrams back to the system heap. */
@@ -219,11 +224,11 @@ static int iddp_close(struct rtipc_private *priv,
 
kfree(sk);
 
-   return 0;
+   return;
 }
 
 static ssize_t __iddp_recvmsg(struct rtipc_private *priv,
- rtdm_user_info_t *user_info,
+ struct rtdm_fd *context,
  struct iovec *iov, int iovlen, int flags,
  struct sockaddr_ipc *saddr)
 {
@@ -294,7 +299,7 @@ static ssize_t __iddp_recvmsg(struct rtipc_private *priv,
if (iov[nvec].iov_len == 0)
continue;
vlen = wrlen = iov[nvec].iov_len ? iov[nvec].iov_len : wrlen;
-   if (user_info) {
+   if (rtdm_context_user_p(context)) {
xnbufd_map_uread(bufd, iov[nvec].iov_base, vlen);
ret = xnbufd_copy_from_kmem(bufd, mbuf-data + rdoff, 
vlen);
xnbufd_unmap_uread(bufd);
@@ -318,7 +323,7 @@ static ssize_t __iddp_recvmsg(struct rtipc_private *priv,
 }
 
 static ssize_t iddp_recvmsg(struct rtipc_private *priv,
-   rtdm_user_info_t *user_info,
+   struct rtdm_fd *context,
struct msghdr *msg, int flags)
 {
struct iovec iov[RTIPC_IOV_MAX];
@@ -338,23 +343,23 @@ static ssize_t iddp_recvmsg(struct rtipc_private *priv,
return -EINVAL;
 
/* Copy I/O vector in */
-   if (rtipc_get_arg(user_info, iov, msg-msg_iov,
+   if (rtipc_get_arg(context, iov, msg-msg_iov,
  sizeof(iov[0]) * msg-msg_iovlen))
return -EFAULT;
 
-   ret = __iddp_recvmsg(priv, user_info,
+   ret = __iddp_recvmsg(priv, context,
 iov, msg-msg_iovlen, flags, saddr);
if (ret = 0)
return ret;
 
/* Copy the updated I/O vector back */
-   if (rtipc_put_arg(user_info, msg-msg_iov, iov,
+   if (rtipc_put_arg(context, msg-msg_iov, iov,
  sizeof(iov[0]) * msg-msg_iovlen))
return -EFAULT;
 
/* Copy the source address if required. */
if (msg-msg_name) {
-   if (rtipc_put_arg(user_info, msg-msg_name,
+   if (rtipc_put_arg(context, msg-msg_name,
  saddr, sizeof(saddr)))
return -EFAULT;
msg-msg_namelen = sizeof(struct sockaddr_ipc);
@@ -364,36 +369,35 @@ static ssize_t iddp_recvmsg(struct rtipc_private *priv,
 }
 
 static ssize_t iddp_read(struct rtipc_private *priv,
-rtdm_user_info_t *user_info,
+struct rtdm_fd *context,
 void *buf, size_t len)
 {
struct iovec iov = { .iov_base = buf, .iov_len = len };
-   return __iddp_recvmsg(priv, user_info, iov, 1, 0, NULL);
+   return __iddp_recvmsg(priv, context, iov, 1, 0, NULL);
 }
 
 static ssize_t __iddp_sendmsg(struct rtipc_private *priv,
- 

[Xenomai-git] Gilles Chanteperdrix : drivers/ipc: adapt BUFP after RTDM changes

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 53d61be0b6566e9981107b9327042c6f1056cbd2
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=53d61be0b6566e9981107b9327042c6f1056cbd2

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Tue Feb  4 21:43:40 2014 +0100

drivers/ipc: adapt BUFP after RTDM changes

---

 kernel/drivers/ipc/bufp.c |  116 -
 1 file changed, 61 insertions(+), 55 deletions(-)

diff --git a/kernel/drivers/ipc/bufp.c b/kernel/drivers/ipc/bufp.c
index 99e1a1e..3216aef 100644
--- a/kernel/drivers/ipc/bufp.c
+++ b/kernel/drivers/ipc/bufp.c
@@ -105,7 +105,7 @@ static struct xnpnode_link __bufp_pnode = {
 #endif /* !CONFIG_XENO_OPT_VFILE */
 
 static int bufp_socket(struct rtipc_private *priv,
-  rtdm_user_info_t *user_info)
+  struct rtdm_fd *context)
 {
struct bufp_socket *sk = priv-state;
 
@@ -131,16 +131,21 @@ static int bufp_socket(struct rtipc_private *priv,
return 0;
 }
 
-static int bufp_close(struct rtipc_private *priv,
- rtdm_user_info_t *user_info)
+static void bufp_close(struct rtipc_private *priv,
+   struct rtdm_fd *context)
 {
struct bufp_socket *sk = priv-state;
 
rtdm_event_destroy(sk-i_event);
rtdm_event_destroy(sk-o_event);
 
-   if (sk-name.sipc_port  -1)
+   if (sk-name.sipc_port  -1) {
+   spl_t s;
+
+   cobalt_atomic_enter(s);
xnmap_remove(portmap, sk-name.sipc_port);
+   cobalt_atomic_leave(s);
+   }
 
if (sk-handle)
xnregistry_remove(sk-handle);
@@ -149,8 +154,6 @@ static int bufp_close(struct rtipc_private *priv,
free_pages_exact(sk-bufmem, sk-bufsz);
 
kfree(sk);
-
-   return 0;
 }
 
 static ssize_t __bufp_readbuf(struct bufp_socket *sk,
@@ -282,7 +285,7 @@ out:
 }
 
 static ssize_t __bufp_recvmsg(struct rtipc_private *priv,
- rtdm_user_info_t *user_info,
+ struct rtdm_fd *context,
  struct iovec *iov, int iovlen, int flags,
  struct sockaddr_ipc *saddr)
 {
@@ -313,7 +316,7 @@ static ssize_t __bufp_recvmsg(struct rtipc_private *priv,
if (iov[nvec].iov_len == 0)
continue;
vlen = wrlen = iov[nvec].iov_len ? iov[nvec].iov_len : wrlen;
-   if (user_info) {
+   if (rtdm_context_user_p(context)) {
xnbufd_map_uread(bufd, iov[nvec].iov_base, vlen);
ret = __bufp_readbuf(sk, bufd, flags);
xnbufd_unmap_uread(bufd);
@@ -344,7 +347,7 @@ static ssize_t __bufp_recvmsg(struct rtipc_private *priv,
 }
 
 static ssize_t bufp_recvmsg(struct rtipc_private *priv,
-   rtdm_user_info_t *user_info,
+   struct rtdm_fd *context,
struct msghdr *msg, int flags)
 {
struct iovec iov[RTIPC_IOV_MAX];
@@ -364,23 +367,23 @@ static ssize_t bufp_recvmsg(struct rtipc_private *priv,
return -EINVAL;
 
/* Copy I/O vector in */
-   if (rtipc_get_arg(user_info, iov, msg-msg_iov,
+   if (rtipc_get_arg(context, iov, msg-msg_iov,
  sizeof(iov[0]) * msg-msg_iovlen))
return -EFAULT;
 
-   ret = __bufp_recvmsg(priv, user_info,
+   ret = __bufp_recvmsg(priv, context,
 iov, msg-msg_iovlen, flags, saddr);
if (ret = 0)
return ret;
 
/* Copy the updated I/O vector back */
-   if (rtipc_put_arg(user_info, msg-msg_iov, iov,
+   if (rtipc_put_arg(context, msg-msg_iov, iov,
  sizeof(iov[0]) * msg-msg_iovlen))
return -EFAULT;
 
/* Copy the source address if required. */
if (msg-msg_name) {
-   if (rtipc_put_arg(user_info, msg-msg_name,
+   if (rtipc_put_arg(context, msg-msg_name,
  saddr, sizeof(saddr)))
return -EFAULT;
msg-msg_namelen = sizeof(struct sockaddr_ipc);
@@ -390,11 +393,11 @@ static ssize_t bufp_recvmsg(struct rtipc_private *priv,
 }
 
 static ssize_t bufp_read(struct rtipc_private *priv,
-rtdm_user_info_t *user_info,
+struct rtdm_fd *context,
 void *buf, size_t len)
 {
struct iovec iov = { .iov_base = buf, .iov_len = len };
-   return __bufp_recvmsg(priv, user_info, iov, 1, 0, NULL);
+   return __bufp_recvmsg(priv, context, iov, 1, 0, NULL);
 }
 
 static ssize_t __bufp_writebuf(struct bufp_socket *rsk,
@@ -514,26 +517,26 @@ out:
 }
 
 static ssize_t __bufp_sendmsg(struct rtipc_private *priv,
- rtdm_user_info_t *user_info,
+ struct rtdm_fd 

[Xenomai-git] Philippe Gerum : cobalt: bump ABI revision level for all archs

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 1b195a6a5bbb8d192bcceacd5e72fb46cd07e68c
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=1b195a6a5bbb8d192bcceacd5e72fb46cd07e68c

Author: Philippe Gerum r...@xenomai.org
Date:   Wed Mar 12 10:41:59 2014 +0100

cobalt: bump ABI revision level for all archs

---

 kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h  |2 +-
 kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h |2 +-
 kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h|2 +-
 kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h  |2 +-
 kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h   |2 +-
 kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h  |2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h
index 2570664..f392a4b 100644
--- a/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h
@@ -29,7 +29,7 @@
 #define __XN_TSC_TYPE_FREERUNNING_COUNTDOWN 5
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP (__xn_feat_generic_mask)
 
diff --git a/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h
index 9eedd29..f711206 100644
--- a/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_BLACKFIN_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h
index b168993..568c926 100644
--- a/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_NIOS2_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   5UL
+#define XENOMAI_ABI_REV   6UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h
index 46e51c2..881a92f 100644
--- a/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_POWERPC_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h
index 4be9417..7c39114 100644
--- a/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_SH_ASM_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   3UL
+#define XENOMAI_ABI_REV   4UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h
index 3884c5a..9a147df 100644
--- a/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_X86_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : cobalt/rtdm: fix mode bits for secondary-only syscalls

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 04ca8b28242f86c67bed13a773198e03fefee5a3
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=04ca8b28242f86c67bed13a773198e03fefee5a3

Author: Philippe Gerum r...@xenomai.org
Date:   Fri May 16 17:10:08 2014 +0200

cobalt/rtdm: fix mode bits for secondary-only syscalls

Now that open(), socket() and close() have become secondary-only
services, fix up the mode bits for the respective handlers, so that
callers are automatically switched to the proper execution mode.

---

 kernel/cobalt/rtdm/syscall.c |6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/kernel/cobalt/rtdm/syscall.c b/kernel/cobalt/rtdm/syscall.c
index 286f047..b4f34be 100644
--- a/kernel/cobalt/rtdm/syscall.c
+++ b/kernel/cobalt/rtdm/syscall.c
@@ -115,9 +115,9 @@ static void rtdm_process_detach(void *arg)
 }
 
 static struct xnsyscall rtdm_syscalls[] = {
-   SKINCALL_DEF(sc_rtdm_open, sys_rtdm_open, probing),
-   SKINCALL_DEF(sc_rtdm_socket, sys_rtdm_socket, probing),
-   SKINCALL_DEF(sc_rtdm_close, sys_rtdm_close, probing),
+   SKINCALL_DEF(sc_rtdm_open, sys_rtdm_open, lostage),
+   SKINCALL_DEF(sc_rtdm_socket, sys_rtdm_socket, lostage),
+   SKINCALL_DEF(sc_rtdm_close, sys_rtdm_close, lostage),
SKINCALL_DEF(sc_rtdm_ioctl, sys_rtdm_ioctl, probing),
SKINCALL_DEF(sc_rtdm_read, sys_rtdm_read, probing),
SKINCALL_DEF(sc_rtdm_write, sys_rtdm_write, probing),


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : config: bump UAPI level

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: e296845a1d4d55fe5d71f529c03d85bd2772d16c
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=e296845a1d4d55fe5d71f529c03d85bd2772d16c

Author: Philippe Gerum r...@xenomai.org
Date:   Thu Apr 24 16:11:15 2014 +0200

config: bump UAPI level

---

 config/apirev |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/config/apirev b/config/apirev
index 7ed6ff8..1e8b314 100644
--- a/config/apirev
+++ b/config/apirev
@@ -1 +1 @@
-5
+6


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : cobalt/posix: silence spurious warnings

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 502643adda0b69ae56f6aa37ac51fc7f06bff9fd
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=502643adda0b69ae56f6aa37ac51fc7f06bff9fd

Author: Philippe Gerum r...@xenomai.org
Date:   Fri May 16 16:22:27 2014 +0200

cobalt/posix: silence spurious warnings

---

 kernel/cobalt/posix/clock.c   |2 +-
 kernel/cobalt/posix/mqueue.c  |   22 +-
 kernel/cobalt/posix/timerfd.c |2 +-
 3 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/kernel/cobalt/posix/clock.c b/kernel/cobalt/posix/clock.c
index 951daf8..8f06a3a 100644
--- a/kernel/cobalt/posix/clock.c
+++ b/kernel/cobalt/posix/clock.c
@@ -219,7 +219,7 @@ int cobalt_clock_gettime(clockid_t clock_id, struct 
timespec __user *u_ts)
 int cobalt_clock_settime(clockid_t clock_id, const struct timespec __user 
*u_ts)
 {
struct timespec ts;
-   int _ret, ret;
+   int _ret, ret = 0;
xnticks_t now;
spl_t s;
 
diff --git a/kernel/cobalt/posix/mqueue.c b/kernel/cobalt/posix/mqueue.c
index 76e9155..48a1c7a 100644
--- a/kernel/cobalt/posix/mqueue.c
+++ b/kernel/cobalt/posix/mqueue.c
@@ -1186,18 +1186,18 @@ int cobalt_mq_timedreceive(mqd_t uqd, void __user 
*u_buf,
 
if (__xn_get_user(len, u_len)) {
err = -EFAULT;
-   goto out;
+   goto fail;
}
 
if (len  0  !access_wok(u_buf, len)) {
err = -EFAULT;
-   goto out;
+   goto fail;
}
 
if (u_ts) {
if (__xn_safe_copy_from_user(timeout, u_ts, sizeof(timeout))) {
err = -EFAULT;
-   goto out;
+   goto fail;
}
 
timeoutp = timeout;
@@ -1207,23 +1207,22 @@ int cobalt_mq_timedreceive(mqd_t uqd, void __user 
*u_buf,
msg = cobalt_mq_timedrcv_inner(mqd, len, timeoutp);
if (IS_ERR(msg)) {
err = PTR_ERR(msg);
-   goto out;
+   goto fail;
}
 
if (__xn_copy_to_user(u_buf, msg-data, msg-len)) {
cobalt_mq_finish_rcv(mqd, msg);
err = -EFAULT;
-   goto out;
+   goto fail;
}
+
len = msg-len;
prio = msg-prio;
-
err = cobalt_mq_finish_rcv(mqd, msg);
+   if (err)
+   goto fail;
 
-  out:
cobalt_mqd_put(mqd);
-   if (err)
-   return err;
 
if (__xn_put_user(len, u_len))
return -EFAULT;
@@ -1232,6 +1231,11 @@ int cobalt_mq_timedreceive(mqd_t uqd, void __user *u_buf,
return -EFAULT;
 
return 0;
+
+fail:
+   cobalt_mqd_put(mqd);
+
+   return err;
 }
 
 int cobalt_mq_pkg_init(void)
diff --git a/kernel/cobalt/posix/timerfd.c b/kernel/cobalt/posix/timerfd.c
index 2c1fdd8..3ffd8de 100644
--- a/kernel/cobalt/posix/timerfd.c
+++ b/kernel/cobalt/posix/timerfd.c
@@ -43,7 +43,7 @@ struct cobalt_tfd {
 static ssize_t timerfd_read(struct rtdm_fd *fd, void __user *buf, size_t size)
 {
unsigned long long __user *u_ticks;
-   unsigned long long ticks;
+   unsigned long long ticks = 0;
struct cobalt_tfd *tfd;
bool aligned;
spl_t s;


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : bootstrap

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: b894f1df1d1cefa1c9fba44355838ad4ec65f23c
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=b894f1df1d1cefa1c9fba44355838ad4ec65f23c

Author: Philippe Gerum r...@xenomai.org
Date:   Fri May 16 15:46:13 2014 +0200

bootstrap

---

 lib/cobalt/Makefile.in |   12 +++-
 testsuite/latency/Makefile.in  |9 +++--
 testsuite/regression/posix/Makefile.in |   17 +
 3 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/lib/cobalt/Makefile.in b/lib/cobalt/Makefile.in
index 18f9fb8..8b3702a 100644
--- a/lib/cobalt/Makefile.in
+++ b/lib/cobalt/Makefile.in
@@ -139,7 +139,8 @@ am_libcobalt_la_OBJECTS = libcobalt_la-assert_context.lo \
libcobalt_la-semaphore.lo libcobalt_la-signal.lo \
libcobalt_la-sigshadow.lo libcobalt_la-thread.lo \
libcobalt_la-ticks.lo libcobalt_la-timer.lo \
-   libcobalt_la-trace.lo libcobalt_la-wrappers.lo
+   libcobalt_la-timerfd.lo libcobalt_la-trace.lo \
+   libcobalt_la-wrappers.lo
 libcobalt_la_OBJECTS = $(am_libcobalt_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -456,6 +457,7 @@ libcobalt_la_SOURCES = \
thread.c\
ticks.c \
timer.c \
+   timerfd.c   \
trace.c \
wrappers.c
 
@@ -564,6 +566,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/libcobalt_la-thread.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/libcobalt_la-ticks.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/libcobalt_la-timer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/libcobalt_la-timerfd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/libcobalt_la-trace.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/libcobalt_la-wrappers.Plo@am__quote@
 
@@ -721,6 +724,13 @@ libcobalt_la-timer.lo: timer.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@  DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC 
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libcobalt_la_CPPFLAGS) $(CPPFLAGS) 
$(AM_CFLAGS) $(CFLAGS) -c -o libcobalt_la-timer.lo `test -f 'timer.c' || echo 
'$(srcdir)/'`timer.c
 
+libcobalt_la-timerfd.lo: timerfd.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC 
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libcobalt_la_CPPFLAGS) $(CPPFLAGS) 
$(AM_CFLAGS) $(CFLAGS) -MT libcobalt_la-timerfd.lo -MD -MP -MF 
$(DEPDIR)/libcobalt_la-timerfd.Tpo -c -o libcobalt_la-timerfd.lo `test -f 
'timerfd.c' || echo '$(srcdir)/'`timerfd.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcobalt_la-timerfd.Tpo 
$(DEPDIR)/libcobalt_la-timerfd.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@  $(AM_V_CC)source='timerfd.c' 
object='libcobalt_la-timerfd.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@  DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC 
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libcobalt_la_CPPFLAGS) $(CPPFLAGS) 
$(AM_CFLAGS) $(CFLAGS) -c -o libcobalt_la-timerfd.lo `test -f 'timerfd.c' || 
echo '$(srcdir)/'`timerfd.c
+
 libcobalt_la-trace.lo: trace.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC 
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libcobalt_la_CPPFLAGS) $(CPPFLAGS) 
$(AM_CFLAGS) $(CFLAGS) -MT libcobalt_la-trace.lo -MD -MP -MF 
$(DEPDIR)/libcobalt_la-trace.Tpo -c -o libcobalt_la-trace.lo `test -f 'trace.c' 
|| echo '$(srcdir)/'`trace.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcobalt_la-trace.Tpo 
$(DEPDIR)/libcobalt_la-trace.Plo
diff --git a/testsuite/latency/Makefile.in b/testsuite/latency/Makefile.in
index 4439c7e..834c80c 100644
--- a/testsuite/latency/Makefile.in
+++ b/testsuite/latency/Makefile.in
@@ -103,8 +103,7 @@ am__installdirs = $(DESTDIR)$(testdir)
 PROGRAMS = $(test_PROGRAMS)
 am_latency_OBJECTS = latency-latency.$(OBJEXT)
 latency_OBJECTS = $(am_latency_OBJECTS)
-latency_DEPENDENCIES = ../../lib/alchemy/libalchemy.la \
-   ../../lib/copperplate/libcopperplate.la $(core_libs)
+latency_DEPENDENCIES = $(core_libs)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
@@ -138,7 +137,6 @@ AM_V_CC = $(am__v_CC_@AM_V@)
 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
 am__v_CC_0 = @echo   CC   $@;
 am__v_CC_1 = 
-CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -345,16 +343,15 @@ 

[Xenomai-git] Philippe Gerum : config: bump UAPI level

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 9d93a9f04e2291716e76c208803643583bef5a14
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=9d93a9f04e2291716e76c208803643583bef5a14

Author: Philippe Gerum r...@xenomai.org
Date:   Thu Apr 24 16:11:15 2014 +0200

config: bump UAPI level

---

 config/apirev |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/config/apirev b/config/apirev
index 7ed6ff8..1e8b314 100644
--- a/config/apirev
+++ b/config/apirev
@@ -1 +1 @@
-5
+6


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : cobalt: bump ABI revision level for all archs

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 66007b2880964380a70d1123cf73e12bc5b20ef2
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=66007b2880964380a70d1123cf73e12bc5b20ef2

Author: Philippe Gerum r...@xenomai.org
Date:   Wed Mar 12 10:41:59 2014 +0100

cobalt: bump ABI revision level for all archs

---

 kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h  |2 +-
 kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h |2 +-
 kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h|2 +-
 kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h  |2 +-
 kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h   |2 +-
 kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h  |2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h
index 2570664..f392a4b 100644
--- a/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/arm/include/asm/xenomai/uapi/features.h
@@ -29,7 +29,7 @@
 #define __XN_TSC_TYPE_FREERUNNING_COUNTDOWN 5
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP (__xn_feat_generic_mask)
 
diff --git a/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h
index 9eedd29..f711206 100644
--- a/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/blackfin/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_BLACKFIN_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h
index b168993..568c926 100644
--- a/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/nios2/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_NIOS2_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   5UL
+#define XENOMAI_ABI_REV   6UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h
index 46e51c2..881a92f 100644
--- a/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/powerpc/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_POWERPC_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h
index 4be9417..7c39114 100644
--- a/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/sh/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_SH_ASM_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   3UL
+#define XENOMAI_ABI_REV   4UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 
diff --git a/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h
index 3884c5a..9a147df 100644
--- a/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/x86/include/asm/xenomai/uapi/features.h
@@ -19,7 +19,7 @@
 #define _COBALT_X86_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   6UL
+#define XENOMAI_ABI_REV   7UL
 
 #define XENOMAI_FEAT_DEP  __xn_feat_generic_mask
 


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : cobalt/mq: rebase on registry and common fd

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 4cc52aaa1794cc25f3069f80818490e71498d56c
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=4cc52aaa1794cc25f3069f80818490e71498d56c

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Tue Dec 24 15:42:42 2013 +0100

cobalt/mq: rebase on registry and common fd

Also remove the cobalt_mq_send and cobalt_mq_receive syscall
as the timed versions can be called with a NULL timeout pointer.

---

 include/cobalt/uapi/syscall.h |4 +-
 kernel/cobalt/posix/mqueue.c  |  965 +
 kernel/cobalt/posix/mqueue.h  |   11 -
 kernel/cobalt/posix/process.h |1 -
 kernel/cobalt/posix/syscall.c |4 -
 lib/cobalt/mq.c   |   10 +-
 6 files changed, 396 insertions(+), 599 deletions(-)

diff --git a/include/cobalt/uapi/syscall.h b/include/cobalt/uapi/syscall.h
index 1254ce5..f18659a 100644
--- a/include/cobalt/uapi/syscall.h
+++ b/include/cobalt/uapi/syscall.h
@@ -56,9 +56,9 @@
 #define sc_cobalt_mq_unlink 33
 #define sc_cobalt_mq_getattr34
 #define sc_cobalt_mq_setattr35
-#define sc_cobalt_mq_send   36
+/* 36 unimplemented */
 #define sc_cobalt_mq_timedsend  37
-#define sc_cobalt_mq_receive38
+/* 38 unimplemented */
 #define sc_cobalt_mq_timedreceive   39
 #define sc_cobalt_thread_probe  40
 #define sc_cobalt_sched_minprio 41
diff --git a/kernel/cobalt/posix/mqueue.c b/kernel/cobalt/posix/mqueue.c
index a3154d1..76e9155 100644
--- a/kernel/cobalt/posix/mqueue.c
+++ b/kernel/cobalt/posix/mqueue.c
@@ -32,6 +32,7 @@
 #include stdarg.h
 #include linux/fs.h
 #include cobalt/kernel/select.h
+#include rtdm/fd.h
 #include internal.h
 #include thread.h
 #include signal.h
@@ -51,8 +52,9 @@ struct mq_attr {
 };
 
 struct cobalt_mq {
-   cobalt_node_t nodebase;
-#define node2mq(naddr) container_of(naddr,  cobalt_mq_t, nodebase)
+   unsigned magic;
+
+   struct list_head link;
 
struct xnsynch receivers;
struct xnsynch senders;
@@ -68,13 +70,20 @@ struct cobalt_mq {
struct cobalt_thread *target;
 
struct mq_attr attr;
-   struct list_head link;  /* link in mqq */
+
+   unsigned refs;
+   char name[COBALT_MAXNAME];
+   xnhandle_t handle;
 
DECLARE_XNSELECT(read_select);
DECLARE_XNSELECT(write_select);
 };
 
-typedef struct cobalt_mq cobalt_mq_t;
+struct cobalt_mqd {
+   long flags;
+   struct cobalt_mq *mq;
+   struct rtdm_fd fd;
+};
 
 struct cobalt_msg {
struct list_head link;
@@ -83,8 +92,6 @@ struct cobalt_msg {
char data[0];
 };
 
-static struct list_head cobalt_mqq;
-
 struct cobalt_mqwait_context {
struct xnthread_wait_context wc;
struct cobalt_msg *msg;
@@ -95,7 +102,9 @@ static struct mq_attr default_attr = {
   .mq_msgsize = 8192,
 };
 
-static inline struct cobalt_msg *mq_msg_alloc(cobalt_mq_t *mq)
+static struct list_head cobalt_mqq;
+
+static inline struct cobalt_msg *mq_msg_alloc(struct cobalt_mq *mq)
 {
if (list_empty(mq-avail))
return NULL;
@@ -103,12 +112,12 @@ static inline struct cobalt_msg *mq_msg_alloc(cobalt_mq_t 
*mq)
return list_get_entry(mq-avail, struct cobalt_msg, link);
 }
 
-static inline void mq_msg_free(cobalt_mq_t *mq, struct cobalt_msg * msg)
+static inline void mq_msg_free(struct cobalt_mq *mq, struct cobalt_msg * msg)
 {
list_add(msg-link, mq-avail); /* For earliest re-use of the block. 
*/
 }
 
-static inline int mq_init(cobalt_mq_t *mq, const struct mq_attr *attr)
+static inline int mq_init(struct cobalt_mq *mq, const struct mq_attr *attr)
 {
unsigned i, msgsize, memsize;
char *mem;
@@ -158,37 +167,21 @@ static inline int mq_init(cobalt_mq_t *mq, const struct 
mq_attr *attr)
mq-target = NULL;
xnselect_init(mq-read_select);
xnselect_init(mq-write_select);
+   mq-magic = COBALT_MQ_MAGIC;
+   mq-refs = 2;
 
return 0;
 }
 
-struct lostage_memfree {
-   struct ipipe_work_header work; /* Must be first. */
-   void *mem;
-   size_t memsize;
-};
-
-static void lostage_mq_memfree(struct ipipe_work_header *work)
+static inline void mq_destroy(struct cobalt_mq *mq)
 {
-   struct lostage_memfree *rq;
-
-   rq = container_of(work, struct lostage_memfree, work);
-   free_pages_exact(rq-mem, rq-memsize);
-}
-
-static inline void mq_destroy(cobalt_mq_t *mq)
-{
-   struct lostage_memfree freework = {
-   .work = {
-   .size = sizeof(freework),
-   .handler = lostage_mq_memfree,
-   },
-   .mem = mq-mem,
-   .memsize = mq-memsize,
-   };
int resched;
spl_t s;
 
+#if XENO_DEBUG(COBALT)
+   printk(XENO_INFO deleting Cobalt message queue \/%s\\n, mq-name);
+#endif
+
xnlock_get_irqsave(nklock, s);
resched = (xnsynch_destroy(mq-receivers) 

[Xenomai-git] Gilles Chanteperdrix : cobalt/rtdm: base protocol devices on xnid

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: c242e4834ade1974d78fb85bc761128c7b0e026f
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=c242e4834ade1974d78fb85bc761128c7b0e026f

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sun Jan 26 21:38:14 2014 +0100

cobalt/rtdm: base protocol devices on xnid

---

 include/cobalt/kernel/rtdm/driver.h |6 +-
 kernel/cobalt/rtdm/device.c |  110 ++-
 kernel/cobalt/rtdm/internal.h   |4 +-
 kernel/cobalt/rtdm/proc.c   |   58 +-
 4 files changed, 78 insertions(+), 100 deletions(-)

diff --git a/include/cobalt/kernel/rtdm/driver.h 
b/include/cobalt/kernel/rtdm/driver.h
index d64ccf4..27cddcb 100644
--- a/include/cobalt/kernel/rtdm/driver.h
+++ b/include/cobalt/kernel/rtdm/driver.h
@@ -40,6 +40,7 @@
 #include cobalt/kernel/shadow.h
 #include cobalt/kernel/init.h
 #include cobalt/kernel/ancillaries.h
+#include cobalt/kernel/tree.h
 #include rtdm/rtdm.h
 
 /* debug support */
@@ -446,7 +447,10 @@ rtdm_private_to_context(void *dev_private)
 }
 
 struct rtdm_dev_reserved {
-   struct list_head entry;
+   union {
+   struct list_head entry;
+   struct xnid id;
+   };
atomic_t refcount;
struct rtdm_dev_context *exclusive_context;
 };
diff --git a/kernel/cobalt/rtdm/device.c b/kernel/cobalt/rtdm/device.c
index b9639a2..e6d7bfe 100644
--- a/kernel/cobalt/rtdm/device.c
+++ b/kernel/cobalt/rtdm/device.c
@@ -46,19 +46,13 @@
((device).operation##_rt || (device).operation##_nrt)
 
 unsigned int devname_hashtab_size = DEF_DEVNAME_HASHTAB_SIZE;
-unsigned int protocol_hashtab_size = DEF_PROTO_HASHTAB_SIZE;
 module_param(devname_hashtab_size, uint, 0400);
-module_param(protocol_hashtab_size, uint, 0400);
 MODULE_PARM_DESC(devname_hashtab_size,
 Size of hash table for named devices (must be power of 2));
-MODULE_PARM_DESC(protocol_hashtab_size,
-Size of hash table for protocol devices 
-(must be power of 2));
 
 struct list_head *rtdm_named_devices;  /* hash table */
-struct list_head *rtdm_protocol_devices;   /* hash table */
 static int name_hashkey_mask;
-static int proto_hashkey_mask;
+struct rb_root rtdm_protocol_devices;
 
 int rtdm_apc;
 EXPORT_SYMBOL_GPL(rtdm_apc);
@@ -93,9 +87,10 @@ static inline int get_name_hash(const char *str, int limit, 
int hashkey_mask)
return hash  hashkey_mask;
 }
 
-static inline int get_proto_hash(int protocol_family, int socket_type)
+static inline unsigned long long get_proto_id(int pf, int type)
 {
-   return protocol_family  proto_hashkey_mask;
+   unsigned long long llpf = (unsigned)pf;
+   return (llpf  32) | (unsigned)type;
 }
 
 static inline void rtdm_reference_device(struct rtdm_device *device)
@@ -133,31 +128,26 @@ struct rtdm_device *get_named_device(const char *name)
 
 struct rtdm_device *get_protocol_device(int protocol_family, int socket_type)
 {
-   struct list_head *entry;
struct rtdm_device *device;
-   int hashkey;
+   unsigned long long id;
+   struct xnid *xnid;
spl_t s;
 
-   hashkey = get_proto_hash(protocol_family, socket_type);
+   id = get_proto_id(protocol_family, socket_type);
 
xnlock_get_irqsave(rt_dev_lock, s);
 
-   list_for_each(entry, rtdm_protocol_devices[hashkey]) {
-   device = list_entry(entry, struct rtdm_device, reserved.entry);
-
-   if ((device-protocol_family == protocol_family) 
-   (device-socket_type == socket_type)) {
-   rtdm_reference_device(device);
+   xnid = xnid_fetch(rtdm_protocol_devices, id);
+   if (xnid) {
+   device = container_of(xnid, struct rtdm_device, reserved.id);
 
-   xnlock_put_irqrestore(rt_dev_lock, s);
-
-   return device;
-   }
-   }
+   rtdm_reference_device(device);
+   } else
+   device = NULL;
 
xnlock_put_irqrestore(rt_dev_lock, s);
 
-   return NULL;
+   return device;
 }
 
 /*!
@@ -194,6 +184,7 @@ struct rtdm_device *get_protocol_device(int 
protocol_family, int socket_type)
  */
 int rtdm_dev_register(struct rtdm_device *device)
 {
+   unsigned long long id;
int hashkey;
spl_t s;
struct list_head *entry;
@@ -320,34 +311,33 @@ int rtdm_dev_register(struct rtdm_device *device)
 
up(nrt_dev_lock);
} else {
-   hashkey = get_proto_hash(device-protocol_family,
-device-socket_type);
+   id = get_proto_id(device-protocol_family,
+   device-socket_type);
+
+   trace_mark(xn_rtdm, protocol_register, device %p 
+   protocol_family %d socket_type %d flags %d 
+   class %d sub_class %d profile_version %d 
+  

[Xenomai-git] Philippe Gerum : cobalt/rtdm: fix mode bits for secondary-only syscalls

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 1054b2c0befd342df25f2e3114702fdcc01b1f7f
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=1054b2c0befd342df25f2e3114702fdcc01b1f7f

Author: Philippe Gerum r...@xenomai.org
Date:   Fri May 16 17:10:08 2014 +0200

cobalt/rtdm: fix mode bits for secondary-only syscalls

Now that open(), socket() and close() have become secondary-only
services, fix up the mode bits for the respective handlers, so that
callers are automatically switched to the proper execution mode.

---

 kernel/cobalt/rtdm/syscall.c |6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/kernel/cobalt/rtdm/syscall.c b/kernel/cobalt/rtdm/syscall.c
index 286f047..b4f34be 100644
--- a/kernel/cobalt/rtdm/syscall.c
+++ b/kernel/cobalt/rtdm/syscall.c
@@ -115,9 +115,9 @@ static void rtdm_process_detach(void *arg)
 }
 
 static struct xnsyscall rtdm_syscalls[] = {
-   SKINCALL_DEF(sc_rtdm_open, sys_rtdm_open, probing),
-   SKINCALL_DEF(sc_rtdm_socket, sys_rtdm_socket, probing),
-   SKINCALL_DEF(sc_rtdm_close, sys_rtdm_close, probing),
+   SKINCALL_DEF(sc_rtdm_open, sys_rtdm_open, lostage),
+   SKINCALL_DEF(sc_rtdm_socket, sys_rtdm_socket, lostage),
+   SKINCALL_DEF(sc_rtdm_close, sys_rtdm_close, lostage),
SKINCALL_DEF(sc_rtdm_ioctl, sys_rtdm_ioctl, probing),
SKINCALL_DEF(sc_rtdm_read, sys_rtdm_read, probing),
SKINCALL_DEF(sc_rtdm_write, sys_rtdm_write, probing),


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : drivers/rtdm: update documentation

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 62dc685c8e6f6f4c6daa1ad71c343006100b47a6
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=62dc685c8e6f6f4c6daa1ad71c343006100b47a6

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sat May 10 18:01:55 2014 +0200

drivers/rtdm: update documentation

---

 include/cobalt/kernel/rtdm/driver.h |   29 +++--
 include/cobalt/kernel/rtdm/fd.h |   10 +-
 2 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/include/cobalt/kernel/rtdm/driver.h 
b/include/cobalt/kernel/rtdm/driver.h
index c853ceb..63d12b5 100644
--- a/include/cobalt/kernel/rtdm/driver.h
+++ b/include/cobalt/kernel/rtdm/driver.h
@@ -212,7 +212,7 @@ static inline struct rtdm_dev_context 
*rtdm_fd_to_context(struct rtdm_fd *fd)
  * device instance
  *
  * @return The address of the private driver area associated to @a
- * context.
+ * file descriptor.
  */
 static inline void *rtdm_fd_to_private(struct rtdm_fd *fd)
 {
@@ -234,11 +234,27 @@ static inline struct rtdm_fd *rtdm_private_to_fd(void 
*dev_private)
return ctx-fd;
 }
 
+/**
+ * Tell whether the passed file descriptor belongs to an application.
+ *
+ * @param[in] fd File descriptor
+ *
+ * @return true if passed file descriptor belongs to an application,
+ * false otherwise.
+ */
 static inline bool rtdm_fd_is_user(struct rtdm_fd *fd)
 {
return rtdm_fd_owner(fd) != __xnsys_global_ppd;
 }
 
+/**
+ * Locate a device structure from a file descriptor.
+ *
+ * @param[in] fd File descriptor
+ *
+ * @return The address of the device structure to which this file
+ * descriptor is attached.
+ */
 static inline struct rtdm_device *rtdm_fd_device(struct rtdm_fd *fd)
 {
return rtdm_fd_to_context(fd)-device;
@@ -286,17 +302,10 @@ struct rtdm_device {
/** Protocol device identification: socket type (SOCK_xxx) */
int socket_type;
 
-   /** Named device instance creation for real-time contexts,
-*  optional (but deprecated) if open_nrt is non-NULL, ignored for
-*  protocol devices
-*  @deprecated Only use non-real-time open handler in new drivers. */
+   /** Named device instance creation for real-time contexts. */
rtdm_open_handler_t open;
 
-   /** Protocol socket creation for real-time contexts,
-*  optional (but deprecated) if socket_nrt is non-NULL, ignored for
-*  named devices
-*  @deprecated Only use non-real-time socket creation handler in new
-*  drivers. */
+   /** Protocol socket creation for real-time contexts. */
rtdm_socket_handler_t socket;
 
/** Default operations on newly opened device instance */
diff --git a/include/cobalt/kernel/rtdm/fd.h b/include/cobalt/kernel/rtdm/fd.h
index 19ab6f4..f137b00 100644
--- a/include/cobalt/kernel/rtdm/fd.h
+++ b/include/cobalt/kernel/rtdm/fd.h
@@ -32,7 +32,7 @@ struct xnsys_ppd;
 /**
  * IOCTL handler
  *
- * @param[in] fd File descriptor structure associated with opened device 
instance
+ * @param[in] fd File descriptor structure
  * @param[in] request Request number as passed by the user
  * @param[in,out] arg Request argument as passed by the user
  *
@@ -48,7 +48,7 @@ typedef int rtdm_fd_ioctl_t(struct rtdm_fd *fd, unsigned int 
request, void __use
 /**
  * Read handler
  *
- * @param[in] fd File descriptor structure associated with opened device 
instance
+ * @param[in] fd File descriptor structure
  * @param[out] buf Input buffer as passed by the user
  * @param[in] size Number of bytes the user requests to read
  *
@@ -64,7 +64,7 @@ typedef ssize_t rtdm_fd_read_t(struct rtdm_fd *fd, void 
__user *buf, size_t size
 /**
  * Write handler
  *
- * @param[in] fd File descriptor structure associated with opened device 
instance
+ * @param[in] fd File descriptor structure
  * @param[in] buf Output buffer as passed by the user
  * @param[in] size Number of bytes the user requests to write
  *
@@ -80,7 +80,7 @@ typedef ssize_t rtdm_fd_write_t(struct rtdm_fd *fd, const 
void __user *buf, size
 /**
  * Receive message handler
  *
- * @param[in] fd File descriptor structure associated with opened device 
instance
+ * @param[in] fd File descriptor structure
  * @param[in,out] msg Message descriptor as passed by the user, automatically
  * mirrored to safe kernel memory in case of user mode call
  * @param[in] flags Message flags as passed by the user
@@ -97,7 +97,7 @@ typedef ssize_t rtdm_fd_recvmsg_t(struct rtdm_fd *fd, struct 
msghdr *msg, int fl
 /**
  * Transmit message handler
  *
- * @param[in] fd File descriptor structure associated with opened device 
instance
+ * @param[in] fd File descriptor structure
  * @param[in] user_info Opaque pointer to information about user mode caller,
  * NULL if kernel mode call
  * @param[in] msg Message descriptor as passed by the user, automatically


___
Xenomai-git mailing list
Xenomai-git@xenomai.org

[Xenomai-git] Philippe Gerum : cobalt/posix: guard for unimplemented syscalls in table

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: c5effb20f5262dc4d51fcf88242ff9fe1fa1a72d
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=c5effb20f5262dc4d51fcf88242ff9fe1fa1a72d

Author: Philippe Gerum r...@xenomai.org
Date:   Fri May 16 14:37:19 2014 +0200

cobalt/posix: guard for unimplemented syscalls in table

---

 include/cobalt/uapi/syscall.h   |2 ++
 kernel/cobalt/include/asm-generic/xenomai/syscall.h |3 +++
 kernel/cobalt/posix/syscall.c   |6 ++
 3 files changed, 11 insertions(+)

diff --git a/include/cobalt/uapi/syscall.h b/include/cobalt/uapi/syscall.h
index 57a6b65..a47d520 100644
--- a/include/cobalt/uapi/syscall.h
+++ b/include/cobalt/uapi/syscall.h
@@ -119,4 +119,6 @@
 #define sc_cobalt_timerfd_settime  96
 #define sc_cobalt_timerfd_gettime  97
 
+#define __NR_COBALT_SYSCALLS   98
+
 #endif /* !_COBALT_UAPI_SYSCALL_H */
diff --git a/kernel/cobalt/include/asm-generic/xenomai/syscall.h 
b/kernel/cobalt/include/asm-generic/xenomai/syscall.h
index eac54fc..dcf6df7 100644
--- a/kernel/cobalt/include/asm-generic/xenomai/syscall.h
+++ b/kernel/cobalt/include/asm-generic/xenomai/syscall.h
@@ -80,6 +80,9 @@ struct xnsyscall {
 #define SKINCALL_DEF(nr, fn, fl)   \
[nr] = { .svc = __syscast__(fn), .flags = __xn_exec_##fl }
 
+#define SKINCALL_NI\
+   { .svc = __syscast__(cobalt_syscall_ni), .flags = 0 }
+
 #define access_rok(addr, size) access_ok(VERIFY_READ, (addr), (size))
 #define access_wok(addr, size) access_ok(VERIFY_WRITE, (addr), (size))
 
diff --git a/kernel/cobalt/posix/syscall.c b/kernel/cobalt/posix/syscall.c
index e41d3dc..7e9b93a 100644
--- a/kernel/cobalt/posix/syscall.c
+++ b/kernel/cobalt/posix/syscall.c
@@ -80,7 +80,13 @@ static void cobalt_process_detach(void *arg)
kfree(cc);
 }
 
+static int cobalt_syscall_ni(void)
+{
+   return -ENOSYS;
+}
+
 static struct xnsyscall cobalt_syscalls[] = {
+   [0 ... __NR_COBALT_SYSCALLS-1] = SKINCALL_NI,
SKINCALL_DEF(sc_cobalt_thread_create, cobalt_thread_create, init),
SKINCALL_DEF(sc_cobalt_thread_setschedparam_ex, 
cobalt_thread_setschedparam_ex, conforming),
SKINCALL_DEF(sc_cobalt_thread_getschedparam_ex, 
cobalt_thread_getschedparam_ex, any),


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : cobalt/posix: silence spurious warnings

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 502643adda0b69ae56f6aa37ac51fc7f06bff9fd
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=502643adda0b69ae56f6aa37ac51fc7f06bff9fd

Author: Philippe Gerum r...@xenomai.org
Date:   Fri May 16 16:22:27 2014 +0200

cobalt/posix: silence spurious warnings

---

 kernel/cobalt/posix/clock.c   |2 +-
 kernel/cobalt/posix/mqueue.c  |   22 +-
 kernel/cobalt/posix/timerfd.c |2 +-
 3 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/kernel/cobalt/posix/clock.c b/kernel/cobalt/posix/clock.c
index 951daf8..8f06a3a 100644
--- a/kernel/cobalt/posix/clock.c
+++ b/kernel/cobalt/posix/clock.c
@@ -219,7 +219,7 @@ int cobalt_clock_gettime(clockid_t clock_id, struct 
timespec __user *u_ts)
 int cobalt_clock_settime(clockid_t clock_id, const struct timespec __user 
*u_ts)
 {
struct timespec ts;
-   int _ret, ret;
+   int _ret, ret = 0;
xnticks_t now;
spl_t s;
 
diff --git a/kernel/cobalt/posix/mqueue.c b/kernel/cobalt/posix/mqueue.c
index 76e9155..48a1c7a 100644
--- a/kernel/cobalt/posix/mqueue.c
+++ b/kernel/cobalt/posix/mqueue.c
@@ -1186,18 +1186,18 @@ int cobalt_mq_timedreceive(mqd_t uqd, void __user 
*u_buf,
 
if (__xn_get_user(len, u_len)) {
err = -EFAULT;
-   goto out;
+   goto fail;
}
 
if (len  0  !access_wok(u_buf, len)) {
err = -EFAULT;
-   goto out;
+   goto fail;
}
 
if (u_ts) {
if (__xn_safe_copy_from_user(timeout, u_ts, sizeof(timeout))) {
err = -EFAULT;
-   goto out;
+   goto fail;
}
 
timeoutp = timeout;
@@ -1207,23 +1207,22 @@ int cobalt_mq_timedreceive(mqd_t uqd, void __user 
*u_buf,
msg = cobalt_mq_timedrcv_inner(mqd, len, timeoutp);
if (IS_ERR(msg)) {
err = PTR_ERR(msg);
-   goto out;
+   goto fail;
}
 
if (__xn_copy_to_user(u_buf, msg-data, msg-len)) {
cobalt_mq_finish_rcv(mqd, msg);
err = -EFAULT;
-   goto out;
+   goto fail;
}
+
len = msg-len;
prio = msg-prio;
-
err = cobalt_mq_finish_rcv(mqd, msg);
+   if (err)
+   goto fail;
 
-  out:
cobalt_mqd_put(mqd);
-   if (err)
-   return err;
 
if (__xn_put_user(len, u_len))
return -EFAULT;
@@ -1232,6 +1231,11 @@ int cobalt_mq_timedreceive(mqd_t uqd, void __user *u_buf,
return -EFAULT;
 
return 0;
+
+fail:
+   cobalt_mqd_put(mqd);
+
+   return err;
 }
 
 int cobalt_mq_pkg_init(void)
diff --git a/kernel/cobalt/posix/timerfd.c b/kernel/cobalt/posix/timerfd.c
index 2c1fdd8..3ffd8de 100644
--- a/kernel/cobalt/posix/timerfd.c
+++ b/kernel/cobalt/posix/timerfd.c
@@ -43,7 +43,7 @@ struct cobalt_tfd {
 static ssize_t timerfd_read(struct rtdm_fd *fd, void __user *buf, size_t size)
 {
unsigned long long __user *u_ticks;
-   unsigned long long ticks;
+   unsigned long long ticks = 0;
struct cobalt_tfd *tfd;
bool aligned;
spl_t s;


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : cobalt/rtdm: base named devices on nucleus registry

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: f5d9edb7f95405311b1e66a3a56cca9fe767007a
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=f5d9edb7f95405311b1e66a3a56cca9fe767007a

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sun Jan 26 23:47:24 2014 +0100

cobalt/rtdm: base named devices on nucleus registry

---

 include/cobalt/kernel/rtdm/driver.h |   12 ++--
 kernel/cobalt/rtdm/device.c |  124 ++-
 kernel/cobalt/rtdm/internal.h   |2 +-
 kernel/cobalt/rtdm/proc.c   |   94 --
 4 files changed, 70 insertions(+), 162 deletions(-)

diff --git a/include/cobalt/kernel/rtdm/driver.h 
b/include/cobalt/kernel/rtdm/driver.h
index 27cddcb..0815246 100644
--- a/include/cobalt/kernel/rtdm/driver.h
+++ b/include/cobalt/kernel/rtdm/driver.h
@@ -447,8 +447,12 @@ rtdm_private_to_context(void *dev_private)
 }
 
 struct rtdm_dev_reserved {
+   unsigned magic;
union {
-   struct list_head entry;
+   struct {
+   struct list_head entry;
+   xnhandle_t handle;
+   };
struct xnid id;
};
atomic_t refcount;
@@ -463,6 +467,9 @@ struct rtdm_dev_reserved {
  * not reside in write-protected memory.
  */
 struct rtdm_device {
+   /** Data stored by RTDM inside a registered device (internal use only) 
*/
+   struct rtdm_dev_reserved reserved;
+
/** Revision number of this structure, see
 *  @ref drv_versioning Driver Versioning defines */
int struct_version;
@@ -531,9 +538,6 @@ struct rtdm_device {
int device_id;
/** Driver definable device data */
void *device_data;
-
-   /** Data stored by RTDM inside a registered device (internal use only) 
*/
-   struct rtdm_dev_reserved reserved;
 };
 /** @} devregister */
 
diff --git a/kernel/cobalt/rtdm/device.c b/kernel/cobalt/rtdm/device.c
index e6d7bfe..2a9dd82 100644
--- a/kernel/cobalt/rtdm/device.c
+++ b/kernel/cobalt/rtdm/device.c
@@ -32,6 +32,8 @@
 #include rtdm/internal.h
 #include trace/events/cobalt-rtdm.h
 
+#define RTDM_DEVICE_MAGIC  0x82846877
+
 #define SET_DEFAULT_OP(device, operation)  \
(device).operation##_rt  = (void *)rtdm_no_support; \
(device).operation##_nrt = (void *)rtdm_no_support
@@ -45,13 +47,7 @@
 #define ANY_HANDLER(device, operation) \
((device).operation##_rt || (device).operation##_nrt)
 
-unsigned int devname_hashtab_size = DEF_DEVNAME_HASHTAB_SIZE;
-module_param(devname_hashtab_size, uint, 0400);
-MODULE_PARM_DESC(devname_hashtab_size,
-Size of hash table for named devices (must be power of 2));
-
-struct list_head *rtdm_named_devices;  /* hash table */
-static int name_hashkey_mask;
+struct list_head rtdm_named_devices;   /* hash table */
 struct rb_root rtdm_protocol_devices;
 
 int rtdm_apc;
@@ -75,18 +71,6 @@ int rtdm_select_bind_no_support(struct rtdm_dev_context 
*context,
return -EBADF;
 }
 
-static inline int get_name_hash(const char *str, int limit, int hashkey_mask)
-{
-   int hash = 0;
-
-   while (*str != 0) {
-   hash += *str++;
-   if (--limit == 0)
-   break;
-   }
-   return hash  hashkey_mask;
-}
-
 static inline unsigned long long get_proto_id(int pf, int type)
 {
unsigned long long llpf = (unsigned)pf;
@@ -100,30 +84,28 @@ static inline void rtdm_reference_device(struct 
rtdm_device *device)
 
 struct rtdm_device *get_named_device(const char *name)
 {
-   struct list_head *entry;
struct rtdm_device *device;
-   int hashkey;
+   xnhandle_t handle;
+   int err;
spl_t s;
 
-   hashkey = get_name_hash(name, RTDM_MAX_DEVNAME_LEN, name_hashkey_mask);
+   err = xnregistry_bind(name, XN_NONBLOCK, XN_RELATIVE, handle);
+   if (err == -EWOULDBLOCK)
+   return NULL;
 
xnlock_get_irqsave(rt_dev_lock, s);
 
-   list_for_each(entry, rtdm_named_devices[hashkey]) {
-   device = list_entry(entry, struct rtdm_device, reserved.entry);
-
-   if (strcmp(name, device-device_name) == 0) {
+   device = xnregistry_lookup(handle, NULL);
+   if (device) {
+   if (device-reserved.magic != RTDM_DEVICE_MAGIC)
+   device = NULL;
+   else
rtdm_reference_device(device);
-
-   xnlock_put_irqrestore(rt_dev_lock, s);
-
-   return device;
-   }
}
 
xnlock_put_irqrestore(rt_dev_lock, s);
 
-   return NULL;
+   return device;
 }
 
 struct rtdm_device *get_protocol_device(int protocol_family, int socket_type)
@@ -185,10 +167,7 @@ struct rtdm_device *get_protocol_device(int 
protocol_family, int socket_type)
 int rtdm_dev_register(struct rtdm_device 

[Xenomai-git] Gilles Chanteperdrix : cobalt: add timerfd services

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: a67c4eb81298bb7c9122e0a53b3e9c6c26fc9019
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=a67c4eb81298bb7c9122e0a53b3e9c6c26fc9019

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Thu Dec 26 22:29:04 2013 +0100

cobalt: add timerfd services

---

 doc/asciidoc/MIGRATION.adoc|7 +
 include/cobalt/sys/timerfd.h   |   42 +
 include/cobalt/uapi/syscall.h  |3 +
 include/cobalt/uapi/time.h |8 +
 kernel/cobalt/posix/Makefile   |3 +-
 kernel/cobalt/posix/internal.h |1 +
 kernel/cobalt/posix/syscall.c  |5 +
 kernel/cobalt/posix/timer.c|   70 +---
 kernel/cobalt/posix/timer.h|7 +
 kernel/cobalt/posix/timerfd.c  |  296 
 kernel/cobalt/posix/timerfd.h  |   14 ++
 lib/cobalt/Makefile.am |1 +
 lib/cobalt/cobalt.wrappers |3 +
 lib/cobalt/timerfd.c   |   73 
 lib/copperplate/regd/regd.c|   28 +--
 testsuite/regression/posix/Makefile.am |5 +-
 testsuite/regression/posix/timerfd.c   |  294 +++
 17 files changed, 817 insertions(+), 43 deletions(-)

diff --git a/doc/asciidoc/MIGRATION.adoc b/doc/asciidoc/MIGRATION.adoc
index e6fa554..cd2a1a4 100644
--- a/doc/asciidoc/MIGRATION.adoc
+++ b/doc/asciidoc/MIGRATION.adoc
@@ -598,6 +598,13 @@ int pthread_make_periodic_np(pthread_t thread, clockid_t 
clk_id,
 struct timespec *starttp, struct timespec *periodtp);
 ---
 
+.Timerfd
+
+[normal] Cobalt replacements for +timerfd_create()+,
++timerfd_settime()+ and +timerfd_gettime()+ have been introduced. The
+implementation delivers I/O notifications to RTDM file descriptors
+upon Cobalt-originated real-time signals.
+
 .Message queues
 
 - +mq_open()+ default attributes align on the regular kernel values,
diff --git a/include/cobalt/sys/timerfd.h b/include/cobalt/sys/timerfd.h
new file mode 100644
index 000..a7df836
--- /dev/null
+++ b/include/cobalt/sys/timerfd.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2013 Gilles Chanteperdrix gilles.chanteperd...@xenomai.org.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
+ */
+#ifndef _COBALT_SYS_TIMERFD_H
+#define _COBALT_SYS_TIMERFD_H
+
+#pragma GCC system_header
+#include_next sys/timerfd.h
+#include cobalt/wrappers.h
+#include cobalt/uapi/time.h
+
+#ifdef __cplusplus
+extern C {
+#endif /* __cplusplus */
+
+COBALT_DECL(int, timerfd_create(int clockid, int flags));
+
+COBALT_DECL(int, timerfd_settime(int fd, int flags,
+   const struct itimerspec *new_value,
+   struct itimerspec *old_value));
+
+COBALT_DECL(int, timerfd_gettime(int fd, struct itimerspec *curr_value));
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _COBALT_SYS_TIMERFD_H */
diff --git a/include/cobalt/uapi/syscall.h b/include/cobalt/uapi/syscall.h
index f18659a..57a6b65 100644
--- a/include/cobalt/uapi/syscall.h
+++ b/include/cobalt/uapi/syscall.h
@@ -115,5 +115,8 @@
 #define sc_cobalt_event_destroy 92
 #define sc_cobalt_sched_setconfig_np   93
 #define sc_cobalt_sched_getconfig_np   94
+#define sc_cobalt_timerfd_create   95
+#define sc_cobalt_timerfd_settime  96
+#define sc_cobalt_timerfd_gettime  97
 
 #endif /* !_COBALT_UAPI_SYSCALL_H */
diff --git a/include/cobalt/uapi/time.h b/include/cobalt/uapi/time.h
index 349d659..764c74c 100644
--- a/include/cobalt/uapi/time.h
+++ b/include/cobalt/uapi/time.h
@@ -39,4 +39,12 @@
 
 #define CLOCK_HOST_REALTIME  __COBALT_CLOCK_CODE(42)
 
+/*
+ * Additional timerfd defines
+ *
+ * when passing TFD_WAKEUP to timer_settime, any timer expiration
+ * unblocks the thread having issued timer_settime.
+ */
+#define TFD_WAKEUP (1  2)
+
 #endif /* !_COBALT_UAPI_TIME_H */
diff --git a/kernel/cobalt/posix/Makefile b/kernel/cobalt/posix/Makefile
index 40c682e..9d77f72 100644
--- a/kernel/cobalt/posix/Makefile
+++ b/kernel/cobalt/posix/Makefile
@@ -16,6 +16,7 @@ posix-y :=\
signal.o\
syscall.o   \
thread.o\
-   timer.o
+   timer.o \
+   timerfd.o
 
 ccflags-y 

[Xenomai-git] Philippe Gerum : copperplate: tag high-level blocking services with warn_unused_result

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: de9d8f3c99094485b9e324486b8a8bc6d1efff54
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=de9d8f3c99094485b9e324486b8a8bc6d1efff54

Author: Philippe Gerum r...@xenomai.org
Date:   Thu May 15 16:38:07 2014 +0200

copperplate: tag high-level blocking services with warn_unused_result

The return value of any such service may restrict the valid execution
flow for the caller, as a break condition may have been received, or
the target object might have become stale while sleeping.

Mark these calls with GCC's warn_unused_result attribute, to make sure
these events won't go unnoticed in the client code.

---

 include/copperplate/cluster.h   |   13 +++--
 include/copperplate/eventobj.h  |5 +++--
 include/copperplate/semobj.h|3 ++-
 include/copperplate/syncobj.h   |   11 +--
 include/copperplate/threadobj.h |8 
 lib/alchemy/task.c  |   22 +++---
 lib/psos/task.c |6 --
 7 files changed, 40 insertions(+), 28 deletions(-)

diff --git a/include/copperplate/cluster.h b/include/copperplate/cluster.h
index 4ec26ca..34da167 100644
--- a/include/copperplate/cluster.h
+++ b/include/copperplate/cluster.h
@@ -115,7 +115,7 @@ int pvsyncluster_delobj(struct pvsyncluster *sc,
 int pvsyncluster_findobj(struct pvsyncluster *sc,
 const char *name,
 const struct timespec *timeout,
-struct pvclusterobj **cobjp);
+struct pvclusterobj **cobjp) __must_check;
 
 #ifdef CONFIG_XENO_PSHARED
 
@@ -144,7 +144,7 @@ int syncluster_delobj(struct syncluster *sc,
 int syncluster_findobj(struct syncluster *sc,
   const char *name,
   const struct timespec *timeout,
-  struct clusterobj **cobjp);
+  struct clusterobj **cobjp) __must_check;
 
 #else /* !CONFIG_XENO_PSHARED */
 
@@ -196,10 +196,11 @@ static inline int syncluster_delobj(struct syncluster *sc,
return pvsyncluster_delobj(sc, cobj);
 }
 
-static inline int syncluster_findobj(struct syncluster *sc,
-const char *name,
-const struct timespec *timeout,
-struct clusterobj **cobjp)
+static inline  __must_check
+int syncluster_findobj(struct syncluster *sc,
+  const char *name,
+  const struct timespec *timeout,
+  struct clusterobj **cobjp)
 {
return pvsyncluster_findobj(sc, name, timeout, cobjp);
 }
diff --git a/include/copperplate/eventobj.h b/include/copperplate/eventobj.h
index 9b2a5bb..f40bfda 100644
--- a/include/copperplate/eventobj.h
+++ b/include/copperplate/eventobj.h
@@ -19,6 +19,7 @@
 #ifndef _COPPERPLATE_EVENTOBJ_H
 #define _COPPERPLATE_EVENTOBJ_H
 
+#include boilerplate/compiler.h
 #include copperplate/reference.h
 
 struct eventobj_waitentry {
@@ -77,7 +78,7 @@ extern C {
 
 int eventobj_init(struct eventobj *evobj,
  unsigned long value, int flags,
- fnref_type(void (*)(struct eventobj *evobj)) finalizer);
+ fnref_type(void (*)(struct eventobj *evobj)) finalizer) 
__must_check;
 
 int eventobj_destroy(struct eventobj *evobj);
 
@@ -88,7 +89,7 @@ int eventobj_wait(struct eventobj *evobj,
  unsigned long bits,
  unsigned long *bits_r,
  int mode,
- const struct timespec *timeout);
+ const struct timespec *timeout) __must_check;
 
 int eventobj_clear(struct eventobj *evobj,
   unsigned long bits,
diff --git a/include/copperplate/semobj.h b/include/copperplate/semobj.h
index f5de528..dd2e642 100644
--- a/include/copperplate/semobj.h
+++ b/include/copperplate/semobj.h
@@ -19,6 +19,7 @@
 #ifndef _COPPERPLATE_SEMOBJ_H
 #define _COPPERPLATE_SEMOBJ_H
 
+#include boilerplate/compiler.h
 #include copperplate/reference.h
 
 struct semobj_waitentry {
@@ -70,7 +71,7 @@ int semobj_post(struct semobj *smobj);
 int semobj_broadcast(struct semobj *smobj);
 
 int semobj_wait(struct semobj *smobj,
-   const struct timespec *timeout);
+   const struct timespec *timeout) __must_check;
 
 int semobj_getvalue(struct semobj *smobj, int *sval);
 
diff --git a/include/copperplate/syncobj.h b/include/copperplate/syncobj.h
index d8a6ade..b0f2ffd 100644
--- a/include/copperplate/syncobj.h
+++ b/include/copperplate/syncobj.h
@@ -130,13 +130,12 @@ int __syncobj_broadcast_drain(struct syncobj *sobj, int 
reason);
 
 int __syncobj_broadcast_grant(struct syncobj *sobj, int reason);
 
-int __must_check
-syncobj_init(struct syncobj *sobj, clockid_t clk_id, int flags,
-fnref_type(void (*)(struct syncobj *sobj)) finalizer);
+int syncobj_init(struct syncobj *sobj, clockid_t clk_id, int flags,
+fnref_type(void (*)(struct 

[Xenomai-git] Philippe Gerum : cobalt/posix: drop open coded thread hash lookups

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 0db01001c7ca4a6698f71b091a02a07128124be4
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=0db01001c7ca4a6698f71b091a02a07128124be4

Author: Philippe Gerum r...@xenomai.org
Date:   Sat May  3 10:37:26 2014 +0200

cobalt/posix: drop open coded thread hash lookups

---

 kernel/cobalt/posix/thread.c |   14 --
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/kernel/cobalt/posix/thread.c b/kernel/cobalt/posix/thread.c
index 6365c92..17330c4 100644
--- a/kernel/cobalt/posix/thread.c
+++ b/kernel/cobalt/posix/thread.c
@@ -1083,22 +1083,16 @@ int cobalt_thread_set_name_np(unsigned long pth, const 
char __user *u_name)
 
 int cobalt_thread_probe_np(pid_t pid)
 {
-   struct global_thread_hash *gslot;
-   u32 hash;
-   int ret;
+   struct cobalt_thread *thread;
+   int ret = 0;
spl_t s;
 
-   hash = jhash2((u32 *)pid, sizeof(pid) / sizeof(u32), 0);
-
trace_cobalt_pthread_probe(pid);
 
xnlock_get_irqsave(nklock, s);
 
-   gslot = global_index[hash  (PTHREAD_HSLOTS - 1)];
-   while (gslot  gslot-pid != pid)
-   gslot = gslot-next;
-
-   ret = gslot ? 0 : -ESRCH;
+   if (cobalt_thread_find(pid) == NULL)
+   ret = -ESRCH;
 
xnlock_put_irqrestore(nklock, s);
 


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : copperplate/notifier: merge into threadobj building block

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 03e9b28941d9d6c4d57e0d5e396931539fe01d77
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=03e9b28941d9d6c4d57e0d5e396931539fe01d77

Author: Philippe Gerum r...@xenomai.org
Date:   Thu May  8 17:35:46 2014 +0200

copperplate/notifier: merge into threadobj building block

Now that the suspend/resume mechanism for Mercury is trivially simple,
just merge it into the threadobj implementation where it belongs to.

---

 include/copperplate/Makefile.am |1 -
 include/copperplate/Makefile.in |1 -
 include/copperplate/notifier.h  |   55 -
 include/copperplate/threadobj.h |2 -
 lib/copperplate/Makefile.am |1 -
 lib/copperplate/Makefile.in |   50 ---
 lib/copperplate/notifier.c  |  103 ---
 lib/copperplate/threadobj.c |   89 +
 8 files changed, 90 insertions(+), 212 deletions(-)

diff --git a/include/copperplate/Makefile.am b/include/copperplate/Makefile.am
index f721ff8..89b92ff 100644
--- a/include/copperplate/Makefile.am
+++ b/include/copperplate/Makefile.am
@@ -8,7 +8,6 @@ includesub_HEADERS =\
heapobj.h   \
init.h  \
semobj.h\
-   notifier.h  \
reference.h \
registry.h  \
syncobj.h   \
diff --git a/include/copperplate/Makefile.in b/include/copperplate/Makefile.in
index cc060cc..1db15f5 100644
--- a/include/copperplate/Makefile.in
+++ b/include/copperplate/Makefile.in
@@ -345,7 +345,6 @@ includesub_HEADERS = \
heapobj.h   \
init.h  \
semobj.h\
-   notifier.h  \
reference.h \
registry.h  \
syncobj.h   \
diff --git a/include/copperplate/notifier.h b/include/copperplate/notifier.h
deleted file mode 100644
index 011accf..000
--- a/include/copperplate/notifier.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2008 Philippe Gerum r...@xenomai.org.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
-
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
- */
-
-#ifndef _COPPERPLATE_NOTIFIER_H
-#define _COPPERPLATE_NOTIFIER_H
-
-#include boilerplate/list.h
-
-struct notifier {
-   pid_t owner;
-   struct pvholder link;
-};
-
-#ifdef __cplusplus
-extern C {
-#endif
-
-int notifier_init(struct notifier *nf, pid_t pid);
-
-static inline void notifier_destroy(struct notifier *nf)
-{
-}
-
-void notifier_destroy(struct notifier *nf);
-
-void notifier_signal(struct notifier *nf);
-
-void notifier_wait(void);
-
-void notifier_disable(struct notifier *nf);
-
-void notifier_release(struct notifier *nf);
-
-void notifier_pkg_init(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _COPPERPLATE_NOTIFIER_H */
diff --git a/include/copperplate/threadobj.h b/include/copperplate/threadobj.h
index 754de3d..fd87829 100644
--- a/include/copperplate/threadobj.h
+++ b/include/copperplate/threadobj.h
@@ -77,14 +77,12 @@ void threadobj_save_timeout(struct threadobj_corespec 
*corespec,
 #else  /* CONFIG_XENO_MERCURY */
 
 #include sys/time.h
-#include copperplate/notifier.h
 
 struct threadobj_corespec {
pthread_cond_t grant_sync;
int policy_unlocked;
int prio_unlocked;
timer_t rr_timer;
-   struct notifier notifier;
struct timespec wakeup;
ticks_t period;
/** Timeout reported by sysregd. */
diff --git a/lib/copperplate/Makefile.am b/lib/copperplate/Makefile.am
index 17ebeb4..2664e53 100644
--- a/lib/copperplate/Makefile.am
+++ b/lib/copperplate/Makefile.am
@@ -46,7 +46,6 @@ clean-local:
 libcopperplate_la_LIBADD = libversion.la
 
 if XENO_MERCURY
-libcopperplate_la_SOURCES += notifier.c
 libcopperplate_la_LIBADD += ../boilerplate/libboilerplate.la
 endif
 
diff --git a/lib/copperplate/Makefile.in b/lib/copperplate/Makefile.in
index a9b360e..0a948fe 100644
--- a/lib/copperplate/Makefile.in
+++ b/lib/copperplate/Makefile.in
@@ -79,17 +79,16 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-@XENO_MERCURY_TRUE@am__append_1 = notifier.c
-@XENO_MERCURY_TRUE@am__append_2 = ../boilerplate/libboilerplate.la

[Xenomai-git] Gilles Chanteperdrix : drivers/ipc: adapt BUFP after RTDM changes

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 53d61be0b6566e9981107b9327042c6f1056cbd2
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=53d61be0b6566e9981107b9327042c6f1056cbd2

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Tue Feb  4 21:43:40 2014 +0100

drivers/ipc: adapt BUFP after RTDM changes

---

 kernel/drivers/ipc/bufp.c |  116 -
 1 file changed, 61 insertions(+), 55 deletions(-)

diff --git a/kernel/drivers/ipc/bufp.c b/kernel/drivers/ipc/bufp.c
index 99e1a1e..3216aef 100644
--- a/kernel/drivers/ipc/bufp.c
+++ b/kernel/drivers/ipc/bufp.c
@@ -105,7 +105,7 @@ static struct xnpnode_link __bufp_pnode = {
 #endif /* !CONFIG_XENO_OPT_VFILE */
 
 static int bufp_socket(struct rtipc_private *priv,
-  rtdm_user_info_t *user_info)
+  struct rtdm_fd *context)
 {
struct bufp_socket *sk = priv-state;
 
@@ -131,16 +131,21 @@ static int bufp_socket(struct rtipc_private *priv,
return 0;
 }
 
-static int bufp_close(struct rtipc_private *priv,
- rtdm_user_info_t *user_info)
+static void bufp_close(struct rtipc_private *priv,
+   struct rtdm_fd *context)
 {
struct bufp_socket *sk = priv-state;
 
rtdm_event_destroy(sk-i_event);
rtdm_event_destroy(sk-o_event);
 
-   if (sk-name.sipc_port  -1)
+   if (sk-name.sipc_port  -1) {
+   spl_t s;
+
+   cobalt_atomic_enter(s);
xnmap_remove(portmap, sk-name.sipc_port);
+   cobalt_atomic_leave(s);
+   }
 
if (sk-handle)
xnregistry_remove(sk-handle);
@@ -149,8 +154,6 @@ static int bufp_close(struct rtipc_private *priv,
free_pages_exact(sk-bufmem, sk-bufsz);
 
kfree(sk);
-
-   return 0;
 }
 
 static ssize_t __bufp_readbuf(struct bufp_socket *sk,
@@ -282,7 +285,7 @@ out:
 }
 
 static ssize_t __bufp_recvmsg(struct rtipc_private *priv,
- rtdm_user_info_t *user_info,
+ struct rtdm_fd *context,
  struct iovec *iov, int iovlen, int flags,
  struct sockaddr_ipc *saddr)
 {
@@ -313,7 +316,7 @@ static ssize_t __bufp_recvmsg(struct rtipc_private *priv,
if (iov[nvec].iov_len == 0)
continue;
vlen = wrlen = iov[nvec].iov_len ? iov[nvec].iov_len : wrlen;
-   if (user_info) {
+   if (rtdm_context_user_p(context)) {
xnbufd_map_uread(bufd, iov[nvec].iov_base, vlen);
ret = __bufp_readbuf(sk, bufd, flags);
xnbufd_unmap_uread(bufd);
@@ -344,7 +347,7 @@ static ssize_t __bufp_recvmsg(struct rtipc_private *priv,
 }
 
 static ssize_t bufp_recvmsg(struct rtipc_private *priv,
-   rtdm_user_info_t *user_info,
+   struct rtdm_fd *context,
struct msghdr *msg, int flags)
 {
struct iovec iov[RTIPC_IOV_MAX];
@@ -364,23 +367,23 @@ static ssize_t bufp_recvmsg(struct rtipc_private *priv,
return -EINVAL;
 
/* Copy I/O vector in */
-   if (rtipc_get_arg(user_info, iov, msg-msg_iov,
+   if (rtipc_get_arg(context, iov, msg-msg_iov,
  sizeof(iov[0]) * msg-msg_iovlen))
return -EFAULT;
 
-   ret = __bufp_recvmsg(priv, user_info,
+   ret = __bufp_recvmsg(priv, context,
 iov, msg-msg_iovlen, flags, saddr);
if (ret = 0)
return ret;
 
/* Copy the updated I/O vector back */
-   if (rtipc_put_arg(user_info, msg-msg_iov, iov,
+   if (rtipc_put_arg(context, msg-msg_iov, iov,
  sizeof(iov[0]) * msg-msg_iovlen))
return -EFAULT;
 
/* Copy the source address if required. */
if (msg-msg_name) {
-   if (rtipc_put_arg(user_info, msg-msg_name,
+   if (rtipc_put_arg(context, msg-msg_name,
  saddr, sizeof(saddr)))
return -EFAULT;
msg-msg_namelen = sizeof(struct sockaddr_ipc);
@@ -390,11 +393,11 @@ static ssize_t bufp_recvmsg(struct rtipc_private *priv,
 }
 
 static ssize_t bufp_read(struct rtipc_private *priv,
-rtdm_user_info_t *user_info,
+struct rtdm_fd *context,
 void *buf, size_t len)
 {
struct iovec iov = { .iov_base = buf, .iov_len = len };
-   return __bufp_recvmsg(priv, user_info, iov, 1, 0, NULL);
+   return __bufp_recvmsg(priv, context, iov, 1, 0, NULL);
 }
 
 static ssize_t __bufp_writebuf(struct bufp_socket *rsk,
@@ -514,26 +517,26 @@ out:
 }
 
 static ssize_t __bufp_sendmsg(struct rtipc_private *priv,
- rtdm_user_info_t *user_info,
+ struct 

[Xenomai-git] Philippe Gerum : cobalt/x86_64: add support for CC_STACKPROTECTOR

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: af36aa890b530f708f07c42b8247a40a065bce79
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=af36aa890b530f708f07c42b8247a40a065bce79

Author: Philippe Gerum r...@xenomai.org
Date:   Thu May 15 10:40:12 2014 +0200

cobalt/x86_64: add support for CC_STACKPROTECTOR

---

 kernel/cobalt/arch/x86/thread.c |   27 ++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/kernel/cobalt/arch/x86/thread.c b/kernel/cobalt/arch/x86/thread.c
index 29079b7..6848d75 100644
--- a/kernel/cobalt/arch/x86/thread.c
+++ b/kernel/cobalt/arch/x86/thread.c
@@ -60,7 +60,29 @@ static inline void do_switch_threads(struct xnarchtcb 
*out_tcb,
 
 #define __SWITCH_CLOBBER_LIST  , r8, r9, r10, r11, r12, r13, 
r14, r15
 
-#define do_switch_threads(prev,next,p_rsp,n_rsp,p_rip,n_rip)   \
+#ifdef CONFIG_CC_STACKPROTECTOR
+
+#define __CANARY_OUPUT \
+   , [gs_canary] =m (irq_stack_union.stack_canary)
+
+#define __CANARY_INPUT \
+   , [user_canary] i (offsetof(struct task_struct, stack_canary)) \
+   , [current_task] m (current_task)
+
+#define __CANARY_SWITCH
\
+   movq __percpu_arg([current_task]),%%rsi\n\t \
+   movq %P[user_canary](%%rsi),%%r8\n\t  \
+   movq %%r8,__percpu_arg([gs_canary])\n\t
+
+#else /* !CONFIG_CC_STACKPROTECTOR */
+
+#define __CANARY_OUPUT
+#define __CANARY_INPUT
+#define __CANARY_SWITCH
+
+#endif /* !CONFIG_CC_STACKPROTECTOR */
+
+#define do_switch_threads(prev, next, p_rsp, n_rsp, p_rip, n_rip)  \
({  \
long __rdi, __rsi, __rax, __rbx, __rcx, __rdx;  \
\
@@ -73,13 +95,16 @@ static inline void do_switch_threads(struct xnarchtcb 
*out_tcb,
 pushq (%%rbx)\n\t\
 jmp   __switch_to\n\t\
 1:\n\t   \
+__CANARY_SWITCH\
 movq  %%rbp, %%rsi\n\t   \
 popq  %%rbp\n\t  \
 popfq\n\t\
 : =S (__rsi), =D (__rdi), =a (__rax), \
   =b (__rbx), =c (__rcx), =d (__rdx) \
+  __CANARY_OUPUT   \
 : 0 (next), 1 (prev), 5 (p_rsp), 4 
(n_rsp), \
   2 (p_rip), 3 (n_rip) \
+  __CANARY_INPUT   \
 : memory, cc __SWITCH_CLOBBER_LIST);   \
})
 


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : copperplate/heapobj: check sanity of ref-types at build time (C only)

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 75b416f0d03ffbed3dd179d007e11ec43748b91f
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=75b416f0d03ffbed3dd179d007e11ec43748b91f

Author: Philippe Gerum r...@xenomai.org
Date:   Mon May  5 09:28:54 2014 +0200

copperplate/heapobj: check sanity of ref-types at build time (C only)

---

 include/copperplate/heapobj.h |   21 +++--
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/include/copperplate/heapobj.h b/include/copperplate/heapobj.h
index 38deb89..6b5617c 100644
--- a/include/copperplate/heapobj.h
+++ b/include/copperplate/heapobj.h
@@ -324,21 +324,30 @@ static inline int pshared_check(void *heap, void *addr)
return 0;
 }
 
+#ifdef __cplusplus
+#define __check_ref_width(__dst, __src)\
+   ({  \
+   assert(sizeof(__dst) = sizeof(__src)); \
+   (typeof(__dst))__src;   \
+   })
+#else
+#define __check_ref_width(__dst, __src)
\
+   __builtin_choose_expr(  \
+   sizeof(__dst) = sizeof(__src), (typeof(__dst))__src,   \
+   ((void)0))
+#endif
+
 #define mainheap_ref(ptr, type)
\
({  \
type handle;\
-   assert(__builtin_types_compatible_p(typeof(type), unsigned 
long) || \
-  __builtin_types_compatible_p(typeof(type), uintptr_t)); \
+   handle = __check_ref_width(handle, ptr);\
assert(ptr == NULL || __memchk(__main_heap, ptr));  \
-   handle = (type)ptr; \
handle; \
})
 #define mainheap_deref(handle, type)   \
({  \
type *ptr;  \
-   assert(__builtin_types_compatible_p(typeof(handle), unsigned 
long) || \
-  __builtin_types_compatible_p(typeof(handle), 
uintptr_t)); \
-   ptr = (type *)handle;   \
+   ptr = __check_ref_width(ptr, handle);   \
ptr;\
})
 


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : drivers/ipc: adapt IDDP after RTDM changes

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: c43101d90e4b2f09a81a6b7fe563378ca4684ace
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=c43101d90e4b2f09a81a6b7fe563378ca4684ace

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Tue Feb  4 21:37:43 2014 +0100

drivers/ipc: adapt IDDP after RTDM changes

---

 kernel/drivers/ipc/iddp.c |  117 ++---
 kernel/drivers/ipc/internal.h |   10 
 2 files changed, 62 insertions(+), 65 deletions(-)

diff --git a/kernel/drivers/ipc/iddp.c b/kernel/drivers/ipc/iddp.c
index 57cb1fe..027e910 100644
--- a/kernel/drivers/ipc/iddp.c
+++ b/kernel/drivers/ipc/iddp.c
@@ -166,7 +166,7 @@ static void __iddp_flush_pool(struct xnheap *heap,
 }
 
 static int iddp_socket(struct rtipc_private *priv,
-  rtdm_user_info_t *user_info)
+  struct rtdm_fd *context)
 {
struct iddp_socket *sk = priv-state;
 
@@ -190,14 +190,19 @@ static int iddp_socket(struct rtipc_private *priv,
return 0;
 }
 
-static int iddp_close(struct rtipc_private *priv,
- rtdm_user_info_t *user_info)
+static void iddp_close(struct rtipc_private *priv,
+   struct rtdm_fd *context)
 {
struct iddp_socket *sk = priv-state;
struct iddp_message *mbuf;
 
-   if (sk-name.sipc_port  -1)
+   if (sk-name.sipc_port  -1) {
+   spl_t s;
+
+   cobalt_atomic_enter(s);
xnmap_remove(portmap, sk-name.sipc_port);
+   cobalt_atomic_leave(s);
+   }
 
rtdm_sem_destroy(sk-insem);
rtdm_waitqueue_destroy(sk-privwaitq);
@@ -207,7 +212,7 @@ static int iddp_close(struct rtipc_private *priv,
 
if (sk-bufpool != kheap) {
xnheap_destroy(sk-privpool, __iddp_flush_pool, NULL);
-   return 0;
+   return;
}
 
/* Send unread datagrams back to the system heap. */
@@ -219,11 +224,11 @@ static int iddp_close(struct rtipc_private *priv,
 
kfree(sk);
 
-   return 0;
+   return;
 }
 
 static ssize_t __iddp_recvmsg(struct rtipc_private *priv,
- rtdm_user_info_t *user_info,
+ struct rtdm_fd *context,
  struct iovec *iov, int iovlen, int flags,
  struct sockaddr_ipc *saddr)
 {
@@ -294,7 +299,7 @@ static ssize_t __iddp_recvmsg(struct rtipc_private *priv,
if (iov[nvec].iov_len == 0)
continue;
vlen = wrlen = iov[nvec].iov_len ? iov[nvec].iov_len : wrlen;
-   if (user_info) {
+   if (rtdm_context_user_p(context)) {
xnbufd_map_uread(bufd, iov[nvec].iov_base, vlen);
ret = xnbufd_copy_from_kmem(bufd, mbuf-data + rdoff, 
vlen);
xnbufd_unmap_uread(bufd);
@@ -318,7 +323,7 @@ static ssize_t __iddp_recvmsg(struct rtipc_private *priv,
 }
 
 static ssize_t iddp_recvmsg(struct rtipc_private *priv,
-   rtdm_user_info_t *user_info,
+   struct rtdm_fd *context,
struct msghdr *msg, int flags)
 {
struct iovec iov[RTIPC_IOV_MAX];
@@ -338,23 +343,23 @@ static ssize_t iddp_recvmsg(struct rtipc_private *priv,
return -EINVAL;
 
/* Copy I/O vector in */
-   if (rtipc_get_arg(user_info, iov, msg-msg_iov,
+   if (rtipc_get_arg(context, iov, msg-msg_iov,
  sizeof(iov[0]) * msg-msg_iovlen))
return -EFAULT;
 
-   ret = __iddp_recvmsg(priv, user_info,
+   ret = __iddp_recvmsg(priv, context,
 iov, msg-msg_iovlen, flags, saddr);
if (ret = 0)
return ret;
 
/* Copy the updated I/O vector back */
-   if (rtipc_put_arg(user_info, msg-msg_iov, iov,
+   if (rtipc_put_arg(context, msg-msg_iov, iov,
  sizeof(iov[0]) * msg-msg_iovlen))
return -EFAULT;
 
/* Copy the source address if required. */
if (msg-msg_name) {
-   if (rtipc_put_arg(user_info, msg-msg_name,
+   if (rtipc_put_arg(context, msg-msg_name,
  saddr, sizeof(saddr)))
return -EFAULT;
msg-msg_namelen = sizeof(struct sockaddr_ipc);
@@ -364,36 +369,35 @@ static ssize_t iddp_recvmsg(struct rtipc_private *priv,
 }
 
 static ssize_t iddp_read(struct rtipc_private *priv,
-rtdm_user_info_t *user_info,
+struct rtdm_fd *context,
 void *buf, size_t len)
 {
struct iovec iov = { .iov_base = buf, .iov_len = len };
-   return __iddp_recvmsg(priv, user_info, iov, 1, 0, NULL);
+   return __iddp_recvmsg(priv, context, iov, 1, 0, NULL);
 }
 
 static ssize_t __iddp_sendmsg(struct rtipc_private *priv,
-   

[Xenomai-git] Philippe Gerum : copperplate/threadobj: enable signaling remote processes

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 579e9a94266c6275f32da53878e9d5a6e177feb2
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=579e9a94266c6275f32da53878e9d5a6e177feb2

Author: Philippe Gerum r...@xenomai.org
Date:   Tue May  6 19:42:23 2014 +0200

copperplate/threadobj: enable signaling remote processes

When shared multi-processing is enabled for Copperplate, we may end up
signaling threads running in sibling processes from the same
session. Make sure to invoke the proper signaling service for this
purpose.

Copperplate requires thread-directed semantics for all signals used
internally:

- over Cobalt, sending a pseudo-signal - e.g. SIGRELS, SIGSUSP,
  SIGRESM - is always considered as a thread-specific operation by the
  core, and won't fall back as a best-effort, group-directed call
  even with the kill(2) replacement.

- over Mercury, we use the low-level syscall() interface for issuing
  tkill() to threads which belong to a remote process, since the
  native kernel performs group-oriented signal delivery with the
  regular kill(2) and sigqueue(2) interfaces.

---

 lib/copperplate/internal.c  |   14 --
 lib/copperplate/internal.h  |2 ++
 lib/copperplate/threadobj.c |   22 +-
 3 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/lib/copperplate/internal.c b/lib/copperplate/internal.c
index 86e69af..16513e9 100644
--- a/lib/copperplate/internal.c
+++ b/lib/copperplate/internal.c
@@ -17,6 +17,7 @@
  */
 
 #include sys/types.h
+#include sys/syscall.h
 #include stdio.h
 #include stdlib.h
 #include stdarg.h
@@ -25,7 +26,6 @@
 #include signal.h
 #include errno.h
 #include limits.h
-#include linux/unistd.h
 #include boilerplate/ancillaries.h
 #include copperplate/clockobj.h
 #include copperplate/threadobj.h
@@ -41,7 +41,7 @@ static void *thread_trampoline(void *arg);
 pid_t copperplate_get_tid(void)
 {
/*
-* XXX: The nucleus maintains a hash table indexed on
+* The nucleus maintains a hash table indexed on
 * task_pid_vnr() values for mapped shadows. This is what
 * __NR_gettid retrieves as well in Cobalt mode.
 */
@@ -120,6 +120,11 @@ static inline int finish_wait_corespec(struct 
corethread_attributes *cta)
return __bt(copperplate_renice_thread(pthread_self(), cta-prio));
 }
 
+int copperplate_kill_tid(pid_t tid, int sig)
+{
+   return __RT(kill(tid, sig)) ? -errno : 0;
+}
+
 #else /* CONFIG_XENO_MERCURY */
 
 int copperplate_probe_node(unsigned int id)
@@ -127,6 +132,11 @@ int copperplate_probe_node(unsigned int id)
return kill((pid_t)id, 0) == 0;
 }
 
+int copperplate_kill_tid(pid_t tid, int sig)
+{
+   return syscall(__NR_tkill, tid, sig) ? -errno : 0;
+}
+
 int copperplate_create_thread(struct corethread_attributes *cta,
  pthread_t *tid)
 {
diff --git a/lib/copperplate/internal.h b/lib/copperplate/internal.h
index 9146d31..d195ac0 100644
--- a/lib/copperplate/internal.h
+++ b/lib/copperplate/internal.h
@@ -77,6 +77,8 @@ extern C {
 
 pid_t copperplate_get_tid(void);
 
+int copperplate_kill_tid(pid_t tid, int sig);
+
 int copperplate_probe_node(unsigned int id);
 
 int copperplate_create_thread(struct corethread_attributes *cta,
diff --git a/lib/copperplate/threadobj.c b/lib/copperplate/threadobj.c
index 9a4cf0b..8f76618 100644
--- a/lib/copperplate/threadobj.c
+++ b/lib/copperplate/threadobj.c
@@ -142,27 +142,29 @@ static inline void threadobj_cancel_corespec(struct 
threadobj *thobj) /* thobj-
 * than the caller of threadobj_cancel()), but will receive
 * the following cancellation request asap.
 */
-   __RT(pthread_kill(thobj-tid, SIGDEMT));
+   __RT(kill(thobj-pid, SIGDEMT));
 }
 
 int threadobj_suspend(struct threadobj *thobj) /* thobj-lock held */
 {
-   pthread_t tid = thobj-tid;
+   pid_t pid = thobj-pid;
int ret;
 
__threadobj_check_locked(thobj);
 
thobj-status |= __THREAD_S_SUSPENDED;
-   threadobj_unlock(thobj);
-   ret = __RT(pthread_kill(tid, SIGSUSP));
-   threadobj_lock(thobj);
+   if (thobj == threadobj_current()) {
+   threadobj_unlock(thobj);
+   ret = __RT(kill(pid, SIGSUSP));
+   threadobj_lock(thobj);
+   } else
+   ret = __RT(kill(pid, SIGSUSP));
 
return __bt(-ret);
 }
 
 int threadobj_resume(struct threadobj *thobj) /* thobj-lock held */
 {
-   pthread_t tid = thobj-tid;
int ret;
 
__threadobj_check_locked(thobj);
@@ -171,9 +173,7 @@ int threadobj_resume(struct threadobj *thobj) /* 
thobj-lock held */
return 0;
 
thobj-status = ~__THREAD_S_SUSPENDED;
-   threadobj_unlock(thobj);
-   ret = __RT(pthread_kill(tid, SIGRESM));
-   threadobj_lock(thobj);
+   ret = __RT(kill(thobj-pid, SIGRESM));
 
return __bt(-ret);
 }
@@ -1255,6 +1255,10 @@ int threadobj_unblock(struct threadobj *thobj) /* 
thobj-lock held */
 

[Xenomai-git] Philippe Gerum : copperplate/notifier: enable notifying remote threads

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 8723e45601586e8a73583e33fe3bcea296f23d44
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=8723e45601586e8a73583e33fe3bcea296f23d44

Author: Philippe Gerum r...@xenomai.org
Date:   Wed May  7 18:12:07 2014 +0200

copperplate/notifier: enable notifying remote threads

In shared multi-processing mode, we may have to suspend/resume threads
which belong to sibling processes from the same Copperplate session.

To this end, we drop the local pipe previously used for waiting for
the resume event. The suspended thread now waits for SIGRESM directly
via sigsuspend(), which is async-signal-safe.

As a side-effect, a suspended thread won't be allowed to handle any
blockable signal but SIGRESM until it is resumed, which follows the
principle of least astonishment.

---

 include/copperplate/notifier.h   |7 +-
 include/mercury/boilerplate/signal.h |9 ++-
 lib/copperplate/notifier.c   |  133 --
 lib/copperplate/threadobj.c  |   28 ---
 4 files changed, 61 insertions(+), 116 deletions(-)

diff --git a/include/copperplate/notifier.h b/include/copperplate/notifier.h
index 61e2ec4..011accf 100644
--- a/include/copperplate/notifier.h
+++ b/include/copperplate/notifier.h
@@ -23,7 +23,6 @@
 
 struct notifier {
pid_t owner;
-   int waitfd[2];
struct pvholder link;
 };
 
@@ -33,11 +32,15 @@ extern C {
 
 int notifier_init(struct notifier *nf, pid_t pid);
 
+static inline void notifier_destroy(struct notifier *nf)
+{
+}
+
 void notifier_destroy(struct notifier *nf);
 
 void notifier_signal(struct notifier *nf);
 
-void notifier_wait(const struct notifier *nf);
+void notifier_wait(void);
 
 void notifier_disable(struct notifier *nf);
 
diff --git a/include/mercury/boilerplate/signal.h 
b/include/mercury/boilerplate/signal.h
index df131fa..914c02c 100644
--- a/include/mercury/boilerplate/signal.h
+++ b/include/mercury/boilerplate/signal.h
@@ -24,15 +24,16 @@
 #define sigev_notify_thread_id  _sigev_un._tid
 #endif
 
-#define SIGNOTIFY  (SIGRTMIN + 8) /* Internal notification */
-#define SIGRELS(SIGRTMIN + 9) /* Syscall abort */
-#define SIGRRB (SIGRTMIN + 10) /* Round-robin event */
+#define SIGSUSP(SIGRTMIN + 8)
+#define SIGRESM(SIGRTMIN + 9)
+#define SIGRELS(SIGRTMIN + 10) /* Syscall abort */
+#define SIGRRB (SIGRTMIN + 11) /* Round-robin event */
 
 #define SIGSAFE_LOCK_ENTRY(__safelock) \
do {\
sigset_t __safeset, __oldsafeset;   \
sigemptyset(__safeset);\
-   sigaddset(__safeset, SIGNOTIFY);   \
+   sigaddset(__safeset, SIGSUSP); \
pthread_sigmask(SIG_BLOCK, __safeset, __oldsafeset);  \
push_cleanup_lock(__safelock);  \
write_lock(__safelock);
diff --git a/lib/copperplate/notifier.c b/lib/copperplate/notifier.c
index 0e8c832..0f02059 100644
--- a/lib/copperplate/notifier.c
+++ b/lib/copperplate/notifier.c
@@ -18,140 +18,69 @@
 
 #include signal.h
 #include memory.h
-#include unistd.h
-#include fcntl.h
-#include assert.h
 #include errno.h
 #include copperplate/notifier.h
-#include boilerplate/lock.h
 #include boilerplate/signal.h
-#include copperplate/debug.h
 #include internal.h
 
-static DEFINE_PRIVATE_LIST(notifier_list);
-
-static pthread_mutex_t notifier_lock;
-
-static struct sigaction notifier_old_sa;
-
-static void notifier_sighandler(int sig, siginfo_t *siginfo, void *uc)
+static void suspend_sighandler(int sig)
 {
-   struct notifier *nf;
-   pid_t tid;
-
-   tid = copperplate_get_tid();
-
-   if (pvlist_empty(notifier_list))
-   goto ouch;
-
-   /* We may NOT alter the notifier list, but only scan it. */
-   pvlist_for_each_entry(nf, notifier_list, link) {
-   if (nf-owner == tid) {
-   notifier_wait(nf);
-   return;
-   }
-   }
-ouch:
-   panic(received spurious notification on thread[%d] 
- (sig=%d, code=%d, fd=%d),
- tid, sig, siginfo-si_code, siginfo-si_fd);
+   notifier_wait();
 }
 
-static void lock_notifier_list(sigset_t *oset)
+static void resume_sighandler(int sig)
 {
-   sigset_t set;
-
-   sigemptyset(set);
-   sigaddset(set, SIGNOTIFY);
-   pthread_sigmask(SIG_BLOCK, set, oset);
-   write_lock(notifier_lock);
-}
-
-static void unlock_notifier_list(sigset_t *oset)
-{
-   pthread_sigmask(SIG_SETMASK, oset, NULL);
-   write_unlock(notifier_lock);
+   /* nop */
 }
 
 int notifier_init(struct notifier *nf, pid_t pid)
 {
-   sigset_t oset;
-   int ret;
-
-   if (pipe(nf-waitfd)  0) {
-  

[Xenomai-git] Philippe Gerum : lib/cobalt: expose sigqueue() service

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: bffd4b1c69a7bde5c6c30ace9238340d6587752d
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=bffd4b1c69a7bde5c6c30ace9238340d6587752d

Author: Philippe Gerum r...@xenomai.org
Date:   Tue May  6 18:29:36 2014 +0200

lib/cobalt: expose sigqueue() service

---

 doc/asciidoc/MIGRATION.adoc |   12 
 include/cobalt/signal.h |3 +++
 lib/cobalt/cobalt.wrappers  |1 +
 lib/cobalt/signal.c |   14 ++
 4 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/doc/asciidoc/MIGRATION.adoc b/doc/asciidoc/MIGRATION.adoc
index b7a5787..3eb5dc9 100644
--- a/doc/asciidoc/MIGRATION.adoc
+++ b/doc/asciidoc/MIGRATION.adoc
@@ -501,16 +501,20 @@ condition variable).
 - Support for Xenomai real-time signals is available.
 
 [normal]
-Cobalt replacements for +sigwait()+, +sigwaitinfo()+, +sigtimedwait()+
-and +kill()+ are available. +pthread_kill()+ was changed to send
-thread-directed Xenomai signals (instead of regular Linux signals).
+Cobalt replacements for +sigwait()+, +sigwaitinfo()+,
++sigtimedwait()+, +sigqueue()+ and +kill()+ are
+available. +pthread_kill()+ was changed to send thread-directed
+Xenomai signals (instead of regular Linux signals).
 
 [normal]
 Cobalt-based signals are stricly real-time. Both the sender and
 receiver sides work exclusively from the primary domain. However, only
 synchronous handling is available, with a thread waiting explicitly
 for a set of signals, using one of the +sigwait+ calls. There is no
-support for asynchronous delivery of signals to handlers.
+support for asynchronous delivery of signals to handlers. For this
+reason, there is no provision in the Cobalt API for masking signals,
+as Cobalt signals are implicitly blocked for a thread until the latter
+invokes one of the +sigwait+ calls.
 
 [normal]
 Signals from SIGRTMIN..SIGRTMAX are queued.
diff --git a/include/cobalt/signal.h b/include/cobalt/signal.h
index 02e91c6..febc752 100644
--- a/include/cobalt/signal.h
+++ b/include/cobalt/signal.h
@@ -47,6 +47,9 @@ COBALT_DECL(int, sigtimedwait(const sigset_t *set, siginfo_t 
*si,
 
 COBALT_DECL(int, kill(pid_t pid, int sig));
 
+COBALT_DECL(int, sigqueue(pid_t pid, int sig,
+ const union sigval value));
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/lib/cobalt/cobalt.wrappers b/lib/cobalt/cobalt.wrappers
index ef5f8ba..ecbfe94 100644
--- a/lib/cobalt/cobalt.wrappers
+++ b/lib/cobalt/cobalt.wrappers
@@ -111,5 +111,6 @@
 --wrap sigwaitinfo
 --wrap sigtimedwait
 --wrap sigpending
+--wrap sigqueue
 --wrap kill
 --wrap sleep
diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
index 8ff9090..98422e1 100644
--- a/lib/cobalt/signal.c
+++ b/lib/cobalt/signal.c
@@ -94,3 +94,17 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
 
return 0;
 }
+
+COBALT_IMPL(int, sigqueue, (pid_t pid, int sig, const union sigval value))
+{
+   int ret;
+
+   ret = XENOMAI_SKINCALL3(__cobalt_muxid,
+   sc_cobalt_sigqueue, pid, sig, value);
+   if (ret) {
+   errno = -ret;
+   return -1;
+   }
+
+   return 0;
+}


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : cobalt/signal: fix memory leakage

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 72c842c7c129c91784a7157e58890f46708dcc33
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=72c842c7c129c91784a7157e58890f46708dcc33

Author: Philippe Gerum r...@xenomai.org
Date:   Wed May  7 11:53:20 2014 +0200

cobalt/signal: fix memory leakage

Make sure the signal data (struct cobalt_sigpending) is freed when
cobalt_signal_send() decides not to queue it.

---

 kernel/cobalt/posix/mqueue.c |3 ++-
 kernel/cobalt/posix/signal.c |   32 
 kernel/cobalt/posix/signal.h |2 ++
 3 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/kernel/cobalt/posix/mqueue.c b/kernel/cobalt/posix/mqueue.c
index 395eaf2..a3154d1 100644
--- a/kernel/cobalt/posix/mqueue.c
+++ b/kernel/cobalt/posix/mqueue.c
@@ -657,7 +657,8 @@ cobalt_mq_finish_send(mqd_t fd, cobalt_mq_t *mq, struct 
cobalt_msg *msg)
sigp = cobalt_signal_alloc();
if (sigp) {
cobalt_copy_siginfo(SI_MESGQ, 
sigp-si, mq-si);
-   cobalt_signal_send(mq-target, sigp, 0);
+   if (cobalt_signal_send(mq-target, 
sigp, 0) = 0)
+   cobalt_signal_free(sigp);
}
mq-target = NULL;
}
diff --git a/kernel/cobalt/posix/signal.c b/kernel/cobalt/posix/signal.c
index 15171e1..d24cbf9 100644
--- a/kernel/cobalt/posix/signal.c
+++ b/kernel/cobalt/posix/signal.c
@@ -89,9 +89,7 @@ deliver:
 * have to release the sigpending data right away before
 * leaving.
 */
-   if ((void *)sigp = sigpending_mem 
-   (void *)sigp  sigpending_mem + __SIGPOOL_SIZE)
-   list_add_tail(sigp-next, sigpending_pool);
+   cobalt_signal_free(sigp);
 
return 1;
 }
@@ -106,17 +104,16 @@ int cobalt_signal_send(struct cobalt_thread *thread,
/* Can we deliver this signal immediately? */
ret = cobalt_signal_deliver(thread, sigp, group);
if (ret)
-   return 0;   /* Yep, done. */
+   return ret; /* Yep, done. */
 
/*
 * Nope, attempt to queue it. We start by calling any Cobalt
 * extension for queuing the signal first.
 */
if (cobalt_call_extension(signal_queue, thread-extref, ret, sigp)) {
-   if (ret  0)
-   return ret; /* Error. */
-   if (ret  0)
-   return 0; /* Queuing done. */
+   if (ret)
+   /* Queuing done remotely or error. */
+   return ret;
}
 
sig = sigp-si.si_signo;
@@ -133,7 +130,7 @@ int cobalt_signal_send(struct cobalt_thread *thread,
sigaddset(thread-sigpending, sig);
list_add_tail(sigp-next, sigq);
 
-   return 0;
+   return 1;
 }
 EXPORT_SYMBOL_GPL(cobalt_signal_send);
 
@@ -166,6 +163,14 @@ struct cobalt_sigpending *cobalt_signal_alloc(void)
 }
 EXPORT_SYMBOL_GPL(cobalt_signal_alloc);
 
+void cobalt_signal_free(struct cobalt_sigpending *sigp)
+{  /* nklocked, IRQs off */
+   if ((void *)sigp = sigpending_mem 
+   (void *)sigp  sigpending_mem + __SIGPOOL_SIZE)
+   list_add_tail(sigp-next, sigpending_pool);
+}
+EXPORT_SYMBOL_GPL(cobalt_signal_free);
+
 void cobalt_signal_flush(struct cobalt_thread *thread)
 {
struct cobalt_sigpending *sigp, *tmp;
@@ -461,7 +466,8 @@ int __cobalt_kill(struct cobalt_thread *thread, int sig, 
int group) /* nklocked,
sigp-si.si_code = SI_USER;
sigp-si.si_pid = current-pid;
sigp-si.si_uid = get_current_uuid();
-   cobalt_signal_send(thread, sigp, group);
+   if (cobalt_signal_send(thread, sigp, group) = 0)
+   cobalt_signal_free(sigp);
}
resched:
xnsched_run();
@@ -525,8 +531,10 @@ int cobalt_sigqueue(pid_t pid, int sig,
sigp-si.si_pid = current-pid;
sigp-si.si_uid = get_current_uuid();
sigp-si.si_value = val;
-   cobalt_signal_send(thread, sigp, 1);
-   xnsched_run();
+   if (cobalt_signal_send(thread, sigp, 1) = 0)
+   cobalt_signal_free(sigp);
+   else
+   xnsched_run();
}
break;
default:
diff --git a/kernel/cobalt/posix/signal.h b/kernel/cobalt/posix/signal.h
index 9ad3c9e..ed2f387 100644
--- a/kernel/cobalt/posix/signal.h
+++ b/kernel/cobalt/posix/signal.h
@@ -63,6 +63,8 @@ int cobalt_signal_send_pid(pid_t pid,
 
 struct cobalt_sigpending *cobalt_signal_alloc(void);
 

[Xenomai-git] Philippe Gerum : cobalt/posix/sem: silence false warning

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 96c4bbd5135ee73282cc3760e09ea7b986454b04
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=96c4bbd5135ee73282cc3760e09ea7b986454b04

Author: Philippe Gerum r...@xenomai.org
Date:   Fri May  9 10:35:24 2014 +0200

cobalt/posix/sem: silence false warning

---

 kernel/cobalt/posix/sem.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/cobalt/posix/sem.c b/kernel/cobalt/posix/sem.c
index 8d6b4ed..2d64785 100644
--- a/kernel/cobalt/posix/sem.c
+++ b/kernel/cobalt/posix/sem.c
@@ -411,9 +411,9 @@ static inline int
 sem_wait_inner(xnhandle_t handle, int timed,
   const struct timespec __user *u_ts)
 {
+   struct timespec ts = { .tv_sec = 0, .tv_nsec = 0 };
int pull_ts = 1, ret, info;
struct cobalt_sem *sem;
-   struct timespec ts;
xntmode_t tmode;
spl_t s;
 


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : drivers/testing: adapt switchtest after RTDM changes

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 96e2423ae582c806fc57fe21cbf76a7d8c592413
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=96e2423ae582c806fc57fe21cbf76a7d8c592413

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sat Feb  1 20:29:54 2014 +0100

drivers/testing: adapt switchtest after RTDM changes

---

 kernel/drivers/testing/switchtest.c |  111 ++-
 1 file changed, 45 insertions(+), 66 deletions(-)

diff --git a/kernel/drivers/testing/switchtest.c 
b/kernel/drivers/testing/switchtest.c
index 067457c..cba8811 100644
--- a/kernel/drivers/testing/switchtest.c
+++ b/kernel/drivers/testing/switchtest.c
@@ -511,11 +511,9 @@ static void rtswitch_utask_waker(rtdm_nrtsig_t sig, void 
*arg)
up(ctx-utask-nrt_synch);
 }
 
-static int rtswitch_open(struct rtdm_dev_context *context,
-rtdm_user_info_t *user_info,
-int oflags)
+static int rtswitch_open(struct rtdm_fd *context, int oflags)
 {
-   rtswitch_context_t *ctx = (rtswitch_context_t *) context-dev_private;
+   rtswitch_context_t *ctx = rtdm_context_to_private(context);
int err;
 
ctx-tasks = NULL;
@@ -534,10 +532,9 @@ static int rtswitch_open(struct rtdm_dev_context *context,
return 0;
 }
 
-static int rtswitch_close(struct rtdm_dev_context *context,
- rtdm_user_info_t *user_info)
+static void rtswitch_close(struct rtdm_fd *context)
 {
-   rtswitch_context_t *ctx = (rtswitch_context_t *) context-dev_private;
+   rtswitch_context_t *ctx = rtdm_context_to_private(context);
unsigned i;
 
if (ctx-tasks) {
@@ -556,16 +553,13 @@ static int rtswitch_close(struct rtdm_dev_context 
*context,
}
rtdm_timer_destroy(ctx-wake_up_delay);
rtdm_nrtsig_destroy(ctx-wake_utask);
-
-   return 0;
 }
 
-static int rtswitch_ioctl_nrt(struct rtdm_dev_context *context,
- rtdm_user_info_t *user_info,
+static int rtswitch_ioctl_nrt(struct rtdm_fd *context,
  unsigned int request,
  void *arg)
 {
-   rtswitch_context_t *ctx = (rtswitch_context_t *) context-dev_private;
+   rtswitch_context_t *ctx = rtdm_context_to_private(context);
struct rttst_swtest_task task;
struct rttst_swtest_dir fromto;
unsigned long count;
@@ -588,15 +582,15 @@ static int rtswitch_ioctl_nrt(struct rtdm_dev_context 
*context,
return 0;
 
case RTTST_RTIOC_SWTEST_REGISTER_UTASK:
-   if (!rtdm_rw_user_ok(user_info, arg, sizeof(task)))
+   if (!rtdm_rw_user_ok(context, arg, sizeof(task)))
return -EFAULT;
 
-   rtdm_copy_from_user(user_info, task, arg, sizeof(task));
+   rtdm_copy_from_user(context, task, arg, sizeof(task));
 
err = rtswitch_register_task(ctx, task);
 
if (!err)
-   rtdm_copy_to_user(user_info,
+   rtdm_copy_to_user(context,
  arg,
  task,
  sizeof(task));
@@ -604,15 +598,15 @@ static int rtswitch_ioctl_nrt(struct rtdm_dev_context 
*context,
return err;
 
case RTTST_RTIOC_SWTEST_CREATE_KTASK:
-   if (!rtdm_rw_user_ok(user_info, arg, sizeof(task)))
+   if (!rtdm_rw_user_ok(context, arg, sizeof(task)))
return -EFAULT;
 
-   rtdm_copy_from_user(user_info, task, arg, sizeof(task));
+   rtdm_copy_from_user(context, task, arg, sizeof(task));
 
err = rtswitch_create_ktask(ctx, task);
 
if (!err)
-   rtdm_copy_to_user(user_info,
+   rtdm_copy_to_user(context,
  arg,
  task,
  sizeof(task));
@@ -620,18 +614,18 @@ static int rtswitch_ioctl_nrt(struct rtdm_dev_context 
*context,
return err;
 
case RTTST_RTIOC_SWTEST_PEND:
-   if (!rtdm_read_user_ok(user_info, arg, sizeof(task)))
+   if (!rtdm_read_user_ok(context, arg, sizeof(task)))
return -EFAULT;
 
-   rtdm_copy_from_user(user_info, task, arg, sizeof(task));
+   rtdm_copy_from_user(context, task, arg, sizeof(task));
 
return rtswitch_pend_nrt(ctx, task.index);
 
case RTTST_RTIOC_SWTEST_SWITCH_TO:
-   if (!rtdm_read_user_ok(user_info, arg, sizeof(fromto)))
+   if (!rtdm_read_user_ok(context, arg, sizeof(fromto)))
return -EFAULT;
 
-   rtdm_copy_from_user(user_info,
+   rtdm_copy_from_user(context,
fromto,
 

[Xenomai-git] Gilles Chanteperdrix : drivers/testing: adapt rtdmtest after RTDM changes

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: aae8153b52bb9914055ffa49947c577987b9d254
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=aae8153b52bb9914055ffa49947c577987b9d254

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sun Feb  2 00:58:07 2014 +0100

drivers/testing: adapt rtdmtest after RTDM changes

---

 include/rtdm/uapi/testing.h   |3 +--
 kernel/drivers/testing/rtdmtest.c |   54 -
 testsuite/unit/rtdm.c |   11 
 3 files changed, 18 insertions(+), 50 deletions(-)

diff --git a/include/rtdm/uapi/testing.h b/include/rtdm/uapi/testing.h
index 87a97fd..76d9678 100644
--- a/include/rtdm/uapi/testing.h
+++ b/include/rtdm/uapi/testing.h
@@ -103,8 +103,7 @@ struct rttst_swtest_error {
 };
 
 #define RTTST_RTDM_NORMAL_CLOSE0
-#define RTTST_RTDM_DEFER_CLOSE_HANDLER 1
-#define RTTST_RTDM_DEFER_CLOSE_CONTEXT 2
+#define RTTST_RTDM_DEFER_CLOSE_CONTEXT 1
 
 #define RTIOC_TYPE_TESTING RTDM_CLASS_TESTING
 
diff --git a/kernel/drivers/testing/rtdmtest.c 
b/kernel/drivers/testing/rtdmtest.c
index 900a2dc..20a423f 100644
--- a/kernel/drivers/testing/rtdmtest.c
+++ b/kernel/drivers/testing/rtdmtest.c
@@ -48,11 +48,9 @@ static void close_timer_proc(rtdm_timer_t *timer)
rtdm_context_unlock(rtdm_private_to_context(ctx));
 }
 
-static int rtdm_test_open(struct rtdm_dev_context *context,
- rtdm_user_info_t *user_info, int oflags)
+static int rtdm_test_open(struct rtdm_fd *context, int oflags)
 {
-   struct rtdm_test_context *ctx =
-   (struct rtdm_test_context *)context-dev_private;
+   struct rtdm_test_context *ctx = rtdm_context_to_private(context);
 
rtdm_timer_init(ctx-close_timer, close_timer_proc,
rtdm close test);
@@ -62,60 +60,42 @@ static int rtdm_test_open(struct rtdm_dev_context *context,
return 0;
 }
 
-static int rtdm_test_close(struct rtdm_dev_context *context,
-  rtdm_user_info_t *user_info)
+static void rtdm_test_close(struct rtdm_fd *context)
 {
-   struct rtdm_test_context *ctx =
-   (struct rtdm_test_context *)context-dev_private;
+   struct rtdm_test_context *ctx = rtdm_context_to_private(context);
 
ctx-close_counter++;
 
switch (ctx-close_deferral) {
-   case RTTST_RTDM_DEFER_CLOSE_HANDLER:
-   if (ctx-close_counter = 3)
-   return -EAGAIN;
-   if (ctx-close_counter  4) {
-   printk(KERN_ERR
-  rtdmtest: %s: close_counter is %lu, 
-  should be 2!\n,
-  __FUNCTION__, ctx-close_counter);
-   return 0;
-   }
-   break;
-
case RTTST_RTDM_DEFER_CLOSE_CONTEXT:
-   if (ctx-close_counter == 1) {
-   rtdm_context_lock(context);
-   rtdm_timer_start(ctx-close_timer, 3ULL, 0,
-RTDM_TIMERMODE_RELATIVE);
-   return 0;
-   }
-   if (ctx-close_counter  2) {
+   if (ctx-close_counter != 2) {
printk(KERN_ERR
   rtdmtest: %s: close_counter is %lu, 
   should be 2!\n,
   __FUNCTION__, ctx-close_counter);
-   return 0;
+   return;
}
break;
}
 
rtdm_timer_destroy(ctx-close_timer);
-
-   return 0;
 }
 
-static int rtdm_test_ioctl(struct rtdm_dev_context *context,
-  rtdm_user_info_t *user_info,
-  unsigned int request, void __user *arg)
+static int
+rtdm_test_ioctl(struct rtdm_fd *context, unsigned int request, void __user 
*arg)
 {
-   struct rtdm_test_context *ctx =
-   (struct rtdm_test_context *)context-dev_private;
+   struct rtdm_test_context *ctx = rtdm_context_to_private(context);
int err = 0;
 
switch (request) {
case RTTST_RTIOC_RTDM_DEFER_CLOSE:
ctx-close_deferral = (unsigned long)arg;
+   if (ctx-close_deferral == RTTST_RTDM_DEFER_CLOSE_CONTEXT) {
+   ++ctx-close_counter;
+   rtdm_context_lock(context);
+   rtdm_timer_start(ctx-close_timer, 3ULL, 0,
+   RTDM_TIMERMODE_RELATIVE);
+   }
break;
 
default:
@@ -132,10 +112,10 @@ static struct rtdm_device device[2] = { [0 ... 1] = {
.context_size   = sizeof(struct rtdm_test_context),
.device_name= ,
 
-   .open_nrt   = rtdm_test_open,
+   .open   = rtdm_test_open,
 
.ops = {
-   .close_nrt  

[Xenomai-git] Philippe Gerum : cobalt/shadow: add internal documentation

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 5d33410941ce7cdfdc88decd706f5c73d704d2d2
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=5d33410941ce7cdfdc88decd706f5c73d704d2d2

Author: Philippe Gerum r...@xenomai.org
Date:   Tue May  6 15:18:44 2014 +0200

cobalt/shadow: add internal documentation

---

 kernel/cobalt/shadow.c |5 +
 1 file changed, 5 insertions(+)

diff --git a/kernel/cobalt/shadow.c b/kernel/cobalt/shadow.c
index d128209..58a3820 100644
--- a/kernel/cobalt/shadow.c
+++ b/kernel/cobalt/shadow.c
@@ -2324,6 +2324,11 @@ static int handle_sigwake_event(struct task_struct *p)
 
xnlock_get_irqsave(nklock, s);
 
+   /*
+* CAUTION: __TASK_TRACED is not set in p-state yet. This
+* state bit will be set right after we return, when the task
+* is woken up.
+*/
if ((p-ptrace  PT_PTRACED)  !xnthread_test_state(thread, XNDEBUG)) {
/* We already own the siglock. */
sigorsets(pending,


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : cobalt/posix/clock: kernel tracepoints (WIP)

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 2e7fa3bec156c61089da0cc669385b6591bb78d2
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=2e7fa3bec156c61089da0cc669385b6591bb78d2

Author: Philippe Gerum r...@xenomai.org
Date:   Tue May 13 18:06:23 2014 +0200

cobalt/posix/clock: kernel tracepoints (WIP)

---

 kernel/cobalt/posix/clock.c|   24 +++---
 kernel/cobalt/trace/cobalt-posix.h |   86 
 2 files changed, 104 insertions(+), 6 deletions(-)

diff --git a/kernel/cobalt/posix/clock.c b/kernel/cobalt/posix/clock.c
index 68383a7..951daf8 100644
--- a/kernel/cobalt/posix/clock.c
+++ b/kernel/cobalt/posix/clock.c
@@ -60,6 +60,7 @@
 #include internal.h
 #include thread.h
 #include clock.h
+#include trace/events/cobalt-posix.h
 
 static struct xnclock *external_clocks[COBALT_MAX_EXTCLOCKS];
 
@@ -177,6 +178,8 @@ int cobalt_clock_getres(clockid_t clock_id, struct timespec 
__user *u_ts)
if (u_ts  __xn_safe_copy_to_user(u_ts, ts, sizeof(ts)))
return -EFAULT;
 
+   trace_cobalt_clock_getres(clock_id, ts);
+
return 0;
 }
 
@@ -184,7 +187,7 @@ int cobalt_clock_gettime(clockid_t clock_id, struct 
timespec __user *u_ts)
 {
struct timespec ts;
xnticks_t ns;
-   int ret = 0;
+   int ret;
 
switch (clock_id) {
case CLOCK_REALTIME:
@@ -208,13 +211,15 @@ int cobalt_clock_gettime(clockid_t clock_id, struct 
timespec __user *u_ts)
if (__xn_safe_copy_to_user(u_ts, ts, sizeof(*u_ts)))
return -EFAULT;
 
-   return ret;
+   trace_cobalt_clock_gettime(clock_id, ts);
+
+   return 0;
 }
 
 int cobalt_clock_settime(clockid_t clock_id, const struct timespec __user 
*u_ts)
 {
struct timespec ts;
-   int _ret, ret = 0;
+   int _ret, ret;
xnticks_t now;
spl_t s;
 
@@ -233,11 +238,13 @@ int cobalt_clock_settime(clockid_t clock_id, const struct 
timespec __user *u_ts)
break;
default:
_ret = do_ext_clock(clock_id, set_time, ret, ts);
-   if (_ret)
-   ret = _ret;
+   if (_ret || ret)
+   return _ret ?: ret;
}
 
-   return ret;
+   trace_cobalt_clock_settime(clock_id, ts);
+
+   return 0;
 }
 
 int cobalt_clock_nanosleep(clockid_t clock_id, int flags,
@@ -256,6 +263,8 @@ int cobalt_clock_nanosleep(clockid_t clock_id, int flags,
if (__xn_safe_copy_from_user(rqt, u_rqt, sizeof(rqt)))
return -EFAULT;
 
+   trace_cobalt_clock_nanosleep(clock_id, flags, rqt);
+
if (clock_id != CLOCK_MONOTONIC 
clock_id != CLOCK_MONOTONIC_RAW 
clock_id != CLOCK_REALTIME)
@@ -325,12 +334,15 @@ int cobalt_clock_register(struct xnclock *clock, 
clockid_t *clk_id)
clock-id = nr;
*clk_id = __COBALT_CLOCK_CODE(clock-id);
 
+   trace_cobalt_clock_register(clock-name, *clk_id);
+
return 0;
 }
 EXPORT_SYMBOL_GPL(cobalt_clock_register);
 
 void cobalt_clock_deregister(struct xnclock *clock)
 {
+   trace_cobalt_clock_deregister(clock-name, clock-id);
clear_bit(clock-id, cobalt_clock_extids);
smp_mb__after_clear_bit();
external_clocks[clock-id] = NULL;
diff --git a/kernel/cobalt/trace/cobalt-posix.h 
b/kernel/cobalt/trace/cobalt-posix.h
index ece465f..66dc7b0 100644
--- a/kernel/cobalt/trace/cobalt-posix.h
+++ b/kernel/cobalt/trace/cobalt-posix.h
@@ -572,6 +572,92 @@ TRACE_EVENT(cobalt_psem_unlink,
TP_printk(name=%s, __get_str(name))
 );
 
+DECLARE_EVENT_CLASS(cobalt_clock_timespec,
+   TP_PROTO(clockid_t clk_id, const struct timespec *val),
+   TP_ARGS(clk_id, val),
+
+   TP_STRUCT__entry(
+   __field(clockid_t, clk_id)
+   __timespec_fields(val)
+   ),
+
+   TP_fast_assign(
+   __entry-clk_id = clk_id;
+   __assign_timespec(val, val);
+   ),
+
+   TP_printk(clock_id=%d timeval=(%ld.%09ld),
+ __entry-clk_id,
+ __timespec_args(val)
+   )
+);
+
+DEFINE_EVENT(cobalt_clock_timespec, cobalt_clock_getres,
+   TP_PROTO(clockid_t clk_id, const struct timespec *res),
+   TP_ARGS(clk_id, res)
+);
+
+DEFINE_EVENT(cobalt_clock_timespec, cobalt_clock_gettime,
+   TP_PROTO(clockid_t clk_id, const struct timespec *time),
+   TP_ARGS(clk_id, time)
+);
+
+DEFINE_EVENT(cobalt_clock_timespec, cobalt_clock_settime,
+   TP_PROTO(clockid_t clk_id, const struct timespec *time),
+   TP_ARGS(clk_id, time)
+);
+
+#define cobalt_print_timer_flags(__flags)  \
+   __print_flags(__flags, |, \
+ {TIMER_ABSTIME, TIMER_ABSTIME})
+
+TRACE_EVENT(cobalt_clock_nanosleep,
+   TP_PROTO(clockid_t clk_id, int flags, const struct timespec *time),
+   TP_ARGS(clk_id, flags, time),
+
+   TP_STRUCT__entry(
+   __field(clockid_t, clk_id)
+

[Xenomai-git] Philippe Gerum : copperplate/threadobj: introduce remote agent for thread operations

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: e0791de259582a36e3aa780fe5db34202bc3fd5c
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=e0791de259582a36e3aa780fe5db34202bc3fd5c

Author: Philippe Gerum r...@xenomai.org
Date:   Mon May 12 14:36:25 2014 +0200

copperplate/threadobj: introduce remote agent for thread operations

In shared multi-processing mode, cancelling remote threads or updating
their scheduling parameters require going through an agent thread,
running on the process they belong to.

This patch series introduces such mechanism, so that
threadobj_cancel() and threadobj_set_priority() work transparently,
regardless of whether or not the target thread runs in the current
process.

CAUTION: remote operations are implemented by a fully asynchronous
protocol. The status returned to a caller for an operation affecting a
remote thread, tells whether the request was successfully sent to the
agent, but does not reflect the final operation status in the remote
process. The remote agent will issue a warning message in case of
failure to carry out an operation though.

---

 include/boilerplate/ancillaries.h|7 +-
 include/boilerplate/compiler.h   |4 +
 include/cobalt/boilerplate/signal.h  |2 +
 include/copperplate/heapobj.h|9 +
 include/copperplate/threadobj.h  |1 +
 include/mercury/boilerplate/signal.h |5 +-
 lib/alchemy/task.c   |8 +-
 lib/copperplate/internal.c   |   37 +---
 lib/copperplate/internal.h   |   14 +-
 lib/copperplate/threadobj.c  |  332 --
 lib/copperplate/timerobj.c   |3 +-
 lib/psos/task.c  |3 +-
 lib/vxworks/taskLib.c|3 +-
 lib/vxworks/testsuite/task-2.c   |   14 +-
 14 files changed, 343 insertions(+), 99 deletions(-)

diff --git a/include/boilerplate/ancillaries.h 
b/include/boilerplate/ancillaries.h
index 9d5818f..107a5f8 100644
--- a/include/boilerplate/ancillaries.h
+++ b/include/boilerplate/ancillaries.h
@@ -22,6 +22,7 @@
 #include time.h
 #include pthread.h
 #include boilerplate/signal.h
+#include boilerplate/compiler.h
 
 extern struct timespec __init_date;
 
@@ -55,12 +56,12 @@ void __printout(const char *name,
const char *header,
const char *fmt, va_list ap);
 
-void __panic(const char *name,
-const char *fmt, va_list ap);
+void __noreturn __panic(const char *name,
+   const char *fmt, va_list ap);
 
 void early_panic(const char *fmt, ...);
 
-void panic(const char *fmt, ...);
+void __noreturn panic(const char *fmt, ...);
 
 void __warning(const char *name,
   const char *fmt, va_list ap);
diff --git a/include/boilerplate/compiler.h b/include/boilerplate/compiler.h
index e3fe413..85e8846 100644
--- a/include/boilerplate/compiler.h
+++ b/include/boilerplate/compiler.h
@@ -31,4 +31,8 @@
 #define unlikely(x)__builtin_expect(!!(x), 0)
 #endif
 
+#ifndef __noreturn
+#define __noreturn __attribute__((__noreturn__))
+#endif
+
 #endif /* _BOILERPLATE_COMPILER_H */
diff --git a/include/cobalt/boilerplate/signal.h 
b/include/cobalt/boilerplate/signal.h
index 4807a51..b7d5ffe 100644
--- a/include/cobalt/boilerplate/signal.h
+++ b/include/cobalt/boilerplate/signal.h
@@ -20,6 +20,8 @@
 
 #include cobalt/signal.h
 
+#define SIGAGENT   (SIGRTMIN + 12) /* Request to remote agent */
+
 #define SIGSAFE_LOCK_ENTRY(__safelock) \
do {\
push_cleanup_lock(__safelock);  \
diff --git a/include/copperplate/heapobj.h b/include/copperplate/heapobj.h
index 6b5617c..495d72c 100644
--- a/include/copperplate/heapobj.h
+++ b/include/copperplate/heapobj.h
@@ -185,9 +185,15 @@ extern struct hash_table *__main_catalog;
 extern struct sysgroup *__main_sysgroup;
 
 struct sysgroup_memspec {
+   /** next member in sysgroup list. */
struct holder next;
 };
 
+struct agent_memspec {
+   /** Agent pid in owner process. */
+   pid_t pid;
+};
+
 static inline void *mainheap_ptr(memoff_t off)
 {
return off ? (void *)__memptr(__main_heap, off) : NULL;
@@ -315,6 +321,9 @@ char *xnstrdup(const char *ptr);
 struct sysgroup_memspec {
 };
 
+struct agent_memspec {
+};
+
 /*
  * Whether an object is laid in some shared heap. Never if pshared
  * mode is disabled.
diff --git a/include/copperplate/threadobj.h b/include/copperplate/threadobj.h
index fd87829..fa9b226 100644
--- a/include/copperplate/threadobj.h
+++ b/include/copperplate/threadobj.h
@@ -185,6 +185,7 @@ struct threadobj {
struct traceobj *tracer;
sem_t *cancel_sem;
struct sysgroup_memspec memspec;
+   struct agent_memspec agent;
struct backtrace_data btd;
 };
 
diff --git a/include/mercury/boilerplate/signal.h 
b/include/mercury/boilerplate/signal.h
index 914c02c..f25c618 100644
--- 

[Xenomai-git] Philippe Gerum : doc/migration: document non-restartable mode for Cobalt/ select(2)

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 776cf8009fda62dee2d648a196bb859f2aadd1ee
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=776cf8009fda62dee2d648a196bb859f2aadd1ee

Author: Philippe Gerum r...@xenomai.org
Date:   Tue May 13 15:32:10 2014 +0200

doc/migration: document non-restartable mode for Cobalt/select(2)

---

 doc/asciidoc/MIGRATION.adoc |9 +++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/doc/asciidoc/MIGRATION.adoc b/doc/asciidoc/MIGRATION.adoc
index 48b33ac..e6fa554 100644
--- a/doc/asciidoc/MIGRATION.adoc
+++ b/doc/asciidoc/MIGRATION.adoc
@@ -606,9 +606,14 @@ int pthread_make_periodic_np(pthread_t thread, clockid_t 
clk_id,
 - +mq_send()+ now enforces a maximum priority value for messages
   (32768).
 
-.Real-time suitable STDIO
+.POSIX I/O services
 
-The former +include/rtdk.h+ header is gone in Xenomai
+- Cobalt's select(2) service is not automatically restarted anymore
+  upon Linux signal receipt, conforming to the POSIX standard (see man
+  signal(7)). In such an event, -1 is returned and errno is set to
+  EINTR.
+
+- The former +include/rtdk.h+ header is gone in Xenomai
 3.x. Applications should include +include/stdio.h+ instead.
 Similarly, the real-time suitable STDIO routines are now part of
 +libcobalt+.


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : drivers/rtdm: increment API and structs versions

2014-05-16 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 3b04e216f7b42f45915931211494f609489e7ed7
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=3b04e216f7b42f45915931211494f609489e7ed7

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sat May 10 18:06:44 2014 +0200

drivers/rtdm: increment API and structs versions

---

 include/cobalt/kernel/rtdm/driver.h |4 ++--
 include/rtdm/uapi/rtdm.h|4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/include/cobalt/kernel/rtdm/driver.h 
b/include/cobalt/kernel/rtdm/driver.h
index 63d12b5..e3ccc9c 100644
--- a/include/cobalt/kernel/rtdm/driver.h
+++ b/include/cobalt/kernel/rtdm/driver.h
@@ -87,10 +87,10 @@ enum rtdm_selecttype;
  * @{
  */
 /** Version of struct rtdm_device */
-#define RTDM_DEVICE_STRUCT_VER 5
+#define RTDM_DEVICE_STRUCT_VER 6
 
 /** Version of struct rtdm_dev_context */
-#define RTDM_CONTEXT_STRUCT_VER3
+#define RTDM_CONTEXT_STRUCT_VER4
 
 /** Flag indicating a secure variant of RTDM (not supported here) */
 #define RTDM_SECURE_DEVICE 0x8000
diff --git a/include/rtdm/uapi/rtdm.h b/include/rtdm/uapi/rtdm.h
index 1580574..3562c69 100644
--- a/include/rtdm/uapi/rtdm.h
+++ b/include/rtdm/uapi/rtdm.h
@@ -33,10 +33,10 @@
  * @anchor api_versioning @name API Versioning
  * @{ */
 /** Common user and driver API version */
-#define RTDM_API_VER   8
+#define RTDM_API_VER   9
 
 /** Minimum API revision compatible with the current release */
-#define RTDM_API_MIN_COMPAT_VER6
+#define RTDM_API_MIN_COMPAT_VER9
 /** @} API Versioning */
 
 /** RTDM type for representing absolute dates. Its base type is a 64 bit


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git