[Xenomai-git] Philippe Gerum : drivers/testing: rtdm: add actor task device

2016-02-27 Thread git repository hosting
Module: xenomai-3
Branch: wip/prioceil
Commit: 38df524a0479ae30cf1bb96e1054544eb21d7759
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=38df524a0479ae30cf1bb96e1054544eb21d7759

Author: Philippe Gerum 
Date:   Sat Feb 27 18:52:35 2016 +0100

drivers/testing: rtdm: add actor task device

This is for unit testing in task context. The actor task performs
simple test requests issued by userland.

---

 include/rtdm/uapi/testing.h   |5 ++
 kernel/drivers/testing/rtdmtest.c |  169 +++--
 2 files changed, 147 insertions(+), 27 deletions(-)

diff --git a/include/rtdm/uapi/testing.h b/include/rtdm/uapi/testing.h
index 710bea8..76da5ee 100644
--- a/include/rtdm/uapi/testing.h
+++ b/include/rtdm/uapi/testing.h
@@ -83,6 +83,7 @@ struct rttst_swtest_error {
 
 #define RTTST_RTDM_NORMAL_CLOSE0
 #define RTTST_RTDM_DEFER_CLOSE_CONTEXT 1
+#define RTTST_RTDM_START_STOP_TASK 2
 
 #define RTIOC_TYPE_TESTING RTDM_CLASS_TESTING
 
@@ -141,6 +142,10 @@ struct rttst_swtest_error {
 
 #define RTTST_RTIOC_RTDM_DEFER_CLOSE \
_IOW(RTIOC_TYPE_TESTING, 0x40, __u32)
+
+#define RTTST_RTIOC_RTDM_ACTOR_GET_CPU \
+   _IOR(RTIOC_TYPE_TESTING, 0x41, __u32)
+  
 /** @} */
 
 #endif /* !_RTDM_UAPI_TESTING_H */
diff --git a/kernel/drivers/testing/rtdmtest.c 
b/kernel/drivers/testing/rtdmtest.c
index c5224d0..5c705e6 100644
--- a/kernel/drivers/testing/rtdmtest.c
+++ b/kernel/drivers/testing/rtdmtest.c
@@ -17,7 +17,6 @@
  */
 
 #include 
-
 #include 
 #include 
 
@@ -26,28 +25,38 @@ MODULE_AUTHOR("Jan Kiszka ");
 MODULE_VERSION("0.1.0");
 MODULE_LICENSE("GPL");
 
-struct rtdm_test_context {
+struct rtdm_basic_context {
rtdm_timer_t close_timer;
unsigned long close_counter;
unsigned long close_deferral;
 };
 
+struct rtdm_actor_context {
+   rtdm_task_t actor_task;
+   unsigned int request;
+   rtdm_event_t run;
+   rtdm_event_t done;
+   union {
+   __u32 cpu;
+   } args;
+};
+
 static void close_timer_proc(rtdm_timer_t *timer)
 {
-   struct rtdm_test_context *ctx =
-   container_of(timer, struct rtdm_test_context, close_timer);
+   struct rtdm_basic_context *ctx =
+   container_of(timer, struct rtdm_basic_context, close_timer);
 
if (ctx->close_counter != 1)
-   printk(KERN_ERR
+   printk(XENO_ERR
   "rtdmtest: %s: close_counter is %lu, should be 1!\n",
   __FUNCTION__, ctx->close_counter);
 
rtdm_fd_unlock(rtdm_private_to_fd(ctx));
 }
 
-static int rtdm_test_open(struct rtdm_fd *fd, int oflags)
+static int rtdm_basic_open(struct rtdm_fd *fd, int oflags)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
 
rtdm_timer_init(>close_timer, close_timer_proc,
"rtdm close test");
@@ -57,16 +66,16 @@ static int rtdm_test_open(struct rtdm_fd *fd, int oflags)
return 0;
 }
 
-static void rtdm_test_close(struct rtdm_fd *fd)
+static void rtdm_basic_close(struct rtdm_fd *fd)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
 
ctx->close_counter++;
 
switch (ctx->close_deferral) {
case RTTST_RTDM_DEFER_CLOSE_CONTEXT:
if (ctx->close_counter != 2) {
-   printk(KERN_ERR
+   printk(XENO_ERR
   "rtdmtest: %s: close_counter is %lu, "
   "should be 2!\n",
   __FUNCTION__, ctx->close_counter);
@@ -78,10 +87,10 @@ static void rtdm_test_close(struct rtdm_fd *fd)
rtdm_timer_destroy(>close_timer);
 }
 
-static int
-rtdm_test_ioctl(struct rtdm_fd *fd, unsigned int request, void __user *arg)
+static int rtdm_basic_ioctl(struct rtdm_fd *fd,
+   unsigned int request, void __user *arg)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
int err = 0;
 
switch (request) {
@@ -94,7 +103,6 @@ rtdm_test_ioctl(struct rtdm_fd *fd, unsigned int request, 
void __user *arg)
RTDM_TIMERMODE_RELATIVE);
}
break;
-
default:
err = -ENOTTY;
}
@@ -102,30 +110,137 @@ rtdm_test_ioctl(struct rtdm_fd *fd, unsigned int 
request, void __user *arg)
return err;
 }
 
-static struct rtdm_driver rtdmtest_driver = {
-   .profile_info   = RTDM_PROFILE_INFO(rtdmtest,
+static void actor_handler(void *arg)
+{
+   struct rtdm_actor_context *ctx = arg;
+   int ret;
+
+   for (;;) {
+   if (rtdm_task_should_stop())
+   return;
+
+   ret = 

[Xenomai-git] Philippe Gerum : drivers/testing: rtdm: add actor task device

2016-02-27 Thread git repository hosting
Module: xenomai-3
Branch: next
Commit: 7ef97138f15a89efa19d41aa3c5a78184ddbbc1b
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=7ef97138f15a89efa19d41aa3c5a78184ddbbc1b

Author: Philippe Gerum 
Date:   Sat Feb 27 18:52:35 2016 +0100

drivers/testing: rtdm: add actor task device

This is for unit testing in task context. The actor task performs
simple test requests issued by userland.

---

 include/rtdm/uapi/testing.h   |5 ++
 kernel/drivers/testing/rtdmtest.c |  169 +++--
 2 files changed, 147 insertions(+), 27 deletions(-)

diff --git a/include/rtdm/uapi/testing.h b/include/rtdm/uapi/testing.h
index 710bea8..76da5ee 100644
--- a/include/rtdm/uapi/testing.h
+++ b/include/rtdm/uapi/testing.h
@@ -83,6 +83,7 @@ struct rttst_swtest_error {
 
 #define RTTST_RTDM_NORMAL_CLOSE0
 #define RTTST_RTDM_DEFER_CLOSE_CONTEXT 1
+#define RTTST_RTDM_START_STOP_TASK 2
 
 #define RTIOC_TYPE_TESTING RTDM_CLASS_TESTING
 
@@ -141,6 +142,10 @@ struct rttst_swtest_error {
 
 #define RTTST_RTIOC_RTDM_DEFER_CLOSE \
_IOW(RTIOC_TYPE_TESTING, 0x40, __u32)
+
+#define RTTST_RTIOC_RTDM_ACTOR_GET_CPU \
+   _IOR(RTIOC_TYPE_TESTING, 0x41, __u32)
+  
 /** @} */
 
 #endif /* !_RTDM_UAPI_TESTING_H */
diff --git a/kernel/drivers/testing/rtdmtest.c 
b/kernel/drivers/testing/rtdmtest.c
index c5224d0..5c705e6 100644
--- a/kernel/drivers/testing/rtdmtest.c
+++ b/kernel/drivers/testing/rtdmtest.c
@@ -17,7 +17,6 @@
  */
 
 #include 
-
 #include 
 #include 
 
@@ -26,28 +25,38 @@ MODULE_AUTHOR("Jan Kiszka ");
 MODULE_VERSION("0.1.0");
 MODULE_LICENSE("GPL");
 
-struct rtdm_test_context {
+struct rtdm_basic_context {
rtdm_timer_t close_timer;
unsigned long close_counter;
unsigned long close_deferral;
 };
 
+struct rtdm_actor_context {
+   rtdm_task_t actor_task;
+   unsigned int request;
+   rtdm_event_t run;
+   rtdm_event_t done;
+   union {
+   __u32 cpu;
+   } args;
+};
+
 static void close_timer_proc(rtdm_timer_t *timer)
 {
-   struct rtdm_test_context *ctx =
-   container_of(timer, struct rtdm_test_context, close_timer);
+   struct rtdm_basic_context *ctx =
+   container_of(timer, struct rtdm_basic_context, close_timer);
 
if (ctx->close_counter != 1)
-   printk(KERN_ERR
+   printk(XENO_ERR
   "rtdmtest: %s: close_counter is %lu, should be 1!\n",
   __FUNCTION__, ctx->close_counter);
 
rtdm_fd_unlock(rtdm_private_to_fd(ctx));
 }
 
-static int rtdm_test_open(struct rtdm_fd *fd, int oflags)
+static int rtdm_basic_open(struct rtdm_fd *fd, int oflags)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
 
rtdm_timer_init(>close_timer, close_timer_proc,
"rtdm close test");
@@ -57,16 +66,16 @@ static int rtdm_test_open(struct rtdm_fd *fd, int oflags)
return 0;
 }
 
-static void rtdm_test_close(struct rtdm_fd *fd)
+static void rtdm_basic_close(struct rtdm_fd *fd)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
 
ctx->close_counter++;
 
switch (ctx->close_deferral) {
case RTTST_RTDM_DEFER_CLOSE_CONTEXT:
if (ctx->close_counter != 2) {
-   printk(KERN_ERR
+   printk(XENO_ERR
   "rtdmtest: %s: close_counter is %lu, "
   "should be 2!\n",
   __FUNCTION__, ctx->close_counter);
@@ -78,10 +87,10 @@ static void rtdm_test_close(struct rtdm_fd *fd)
rtdm_timer_destroy(>close_timer);
 }
 
-static int
-rtdm_test_ioctl(struct rtdm_fd *fd, unsigned int request, void __user *arg)
+static int rtdm_basic_ioctl(struct rtdm_fd *fd,
+   unsigned int request, void __user *arg)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
int err = 0;
 
switch (request) {
@@ -94,7 +103,6 @@ rtdm_test_ioctl(struct rtdm_fd *fd, unsigned int request, 
void __user *arg)
RTDM_TIMERMODE_RELATIVE);
}
break;
-
default:
err = -ENOTTY;
}
@@ -102,30 +110,137 @@ rtdm_test_ioctl(struct rtdm_fd *fd, unsigned int 
request, void __user *arg)
return err;
 }
 
-static struct rtdm_driver rtdmtest_driver = {
-   .profile_info   = RTDM_PROFILE_INFO(rtdmtest,
+static void actor_handler(void *arg)
+{
+   struct rtdm_actor_context *ctx = arg;
+   int ret;
+
+   for (;;) {
+   if (rtdm_task_should_stop())
+   return;
+
+   ret = 

[Xenomai-git] Philippe Gerum : drivers/testing: rtdm: add actor task device

2016-02-27 Thread git repository hosting
Module: xenomai-3
Branch: stable-3.0.x
Commit: 38df524a0479ae30cf1bb96e1054544eb21d7759
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=38df524a0479ae30cf1bb96e1054544eb21d7759

Author: Philippe Gerum 
Date:   Sat Feb 27 18:52:35 2016 +0100

drivers/testing: rtdm: add actor task device

This is for unit testing in task context. The actor task performs
simple test requests issued by userland.

---

 include/rtdm/uapi/testing.h   |5 ++
 kernel/drivers/testing/rtdmtest.c |  169 +++--
 2 files changed, 147 insertions(+), 27 deletions(-)

diff --git a/include/rtdm/uapi/testing.h b/include/rtdm/uapi/testing.h
index 710bea8..76da5ee 100644
--- a/include/rtdm/uapi/testing.h
+++ b/include/rtdm/uapi/testing.h
@@ -83,6 +83,7 @@ struct rttst_swtest_error {
 
 #define RTTST_RTDM_NORMAL_CLOSE0
 #define RTTST_RTDM_DEFER_CLOSE_CONTEXT 1
+#define RTTST_RTDM_START_STOP_TASK 2
 
 #define RTIOC_TYPE_TESTING RTDM_CLASS_TESTING
 
@@ -141,6 +142,10 @@ struct rttst_swtest_error {
 
 #define RTTST_RTIOC_RTDM_DEFER_CLOSE \
_IOW(RTIOC_TYPE_TESTING, 0x40, __u32)
+
+#define RTTST_RTIOC_RTDM_ACTOR_GET_CPU \
+   _IOR(RTIOC_TYPE_TESTING, 0x41, __u32)
+  
 /** @} */
 
 #endif /* !_RTDM_UAPI_TESTING_H */
diff --git a/kernel/drivers/testing/rtdmtest.c 
b/kernel/drivers/testing/rtdmtest.c
index c5224d0..5c705e6 100644
--- a/kernel/drivers/testing/rtdmtest.c
+++ b/kernel/drivers/testing/rtdmtest.c
@@ -17,7 +17,6 @@
  */
 
 #include 
-
 #include 
 #include 
 
@@ -26,28 +25,38 @@ MODULE_AUTHOR("Jan Kiszka ");
 MODULE_VERSION("0.1.0");
 MODULE_LICENSE("GPL");
 
-struct rtdm_test_context {
+struct rtdm_basic_context {
rtdm_timer_t close_timer;
unsigned long close_counter;
unsigned long close_deferral;
 };
 
+struct rtdm_actor_context {
+   rtdm_task_t actor_task;
+   unsigned int request;
+   rtdm_event_t run;
+   rtdm_event_t done;
+   union {
+   __u32 cpu;
+   } args;
+};
+
 static void close_timer_proc(rtdm_timer_t *timer)
 {
-   struct rtdm_test_context *ctx =
-   container_of(timer, struct rtdm_test_context, close_timer);
+   struct rtdm_basic_context *ctx =
+   container_of(timer, struct rtdm_basic_context, close_timer);
 
if (ctx->close_counter != 1)
-   printk(KERN_ERR
+   printk(XENO_ERR
   "rtdmtest: %s: close_counter is %lu, should be 1!\n",
   __FUNCTION__, ctx->close_counter);
 
rtdm_fd_unlock(rtdm_private_to_fd(ctx));
 }
 
-static int rtdm_test_open(struct rtdm_fd *fd, int oflags)
+static int rtdm_basic_open(struct rtdm_fd *fd, int oflags)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
 
rtdm_timer_init(>close_timer, close_timer_proc,
"rtdm close test");
@@ -57,16 +66,16 @@ static int rtdm_test_open(struct rtdm_fd *fd, int oflags)
return 0;
 }
 
-static void rtdm_test_close(struct rtdm_fd *fd)
+static void rtdm_basic_close(struct rtdm_fd *fd)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
 
ctx->close_counter++;
 
switch (ctx->close_deferral) {
case RTTST_RTDM_DEFER_CLOSE_CONTEXT:
if (ctx->close_counter != 2) {
-   printk(KERN_ERR
+   printk(XENO_ERR
   "rtdmtest: %s: close_counter is %lu, "
   "should be 2!\n",
   __FUNCTION__, ctx->close_counter);
@@ -78,10 +87,10 @@ static void rtdm_test_close(struct rtdm_fd *fd)
rtdm_timer_destroy(>close_timer);
 }
 
-static int
-rtdm_test_ioctl(struct rtdm_fd *fd, unsigned int request, void __user *arg)
+static int rtdm_basic_ioctl(struct rtdm_fd *fd,
+   unsigned int request, void __user *arg)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
int err = 0;
 
switch (request) {
@@ -94,7 +103,6 @@ rtdm_test_ioctl(struct rtdm_fd *fd, unsigned int request, 
void __user *arg)
RTDM_TIMERMODE_RELATIVE);
}
break;
-
default:
err = -ENOTTY;
}
@@ -102,30 +110,137 @@ rtdm_test_ioctl(struct rtdm_fd *fd, unsigned int 
request, void __user *arg)
return err;
 }
 
-static struct rtdm_driver rtdmtest_driver = {
-   .profile_info   = RTDM_PROFILE_INFO(rtdmtest,
+static void actor_handler(void *arg)
+{
+   struct rtdm_actor_context *ctx = arg;
+   int ret;
+
+   for (;;) {
+   if (rtdm_task_should_stop())
+   return;
+
+   ret = 

[Xenomai-git] Philippe Gerum : drivers/testing: rtdm: add actor task device

2016-02-27 Thread git repository hosting
Module: xenomai-3
Branch: wip/prioceil
Commit: c974cb4b95f6c0ceeddbbf9b40429bdfc9c3307c
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=c974cb4b95f6c0ceeddbbf9b40429bdfc9c3307c

Author: Philippe Gerum 
Date:   Sat Feb 27 18:52:35 2016 +0100

drivers/testing: rtdm: add actor task device

This is for unit testing in task context. The actor task performs
simple test requests issued by userland.

---

 include/rtdm/uapi/testing.h   |5 ++
 kernel/drivers/ipc/bufp.c |2 +-
 kernel/drivers/testing/rtdmtest.c |  169 +++--
 3 files changed, 148 insertions(+), 28 deletions(-)

diff --git a/include/rtdm/uapi/testing.h b/include/rtdm/uapi/testing.h
index 710bea8..76da5ee 100644
--- a/include/rtdm/uapi/testing.h
+++ b/include/rtdm/uapi/testing.h
@@ -83,6 +83,7 @@ struct rttst_swtest_error {
 
 #define RTTST_RTDM_NORMAL_CLOSE0
 #define RTTST_RTDM_DEFER_CLOSE_CONTEXT 1
+#define RTTST_RTDM_START_STOP_TASK 2
 
 #define RTIOC_TYPE_TESTING RTDM_CLASS_TESTING
 
@@ -141,6 +142,10 @@ struct rttst_swtest_error {
 
 #define RTTST_RTIOC_RTDM_DEFER_CLOSE \
_IOW(RTIOC_TYPE_TESTING, 0x40, __u32)
+
+#define RTTST_RTIOC_RTDM_ACTOR_GET_CPU \
+   _IOR(RTIOC_TYPE_TESTING, 0x41, __u32)
+  
 /** @} */
 
 #endif /* !_RTDM_UAPI_TESTING_H */
diff --git a/kernel/drivers/ipc/bufp.c b/kernel/drivers/ipc/bufp.c
index 7ea8b2c..ecce4f9 100644
--- a/kernel/drivers/ipc/bufp.c
+++ b/kernel/drivers/ipc/bufp.c
@@ -423,7 +423,7 @@ static ssize_t __bufp_writebuf(struct bufp_socket *rsk,
 
len = bufd->b_len;
 
-   rtdm_toseq_init(, sk->rx_timeout);
+   rtdm_toseq_init(, sk->tx_timeout);
 
cobalt_atomic_enter(s);
 redo:
diff --git a/kernel/drivers/testing/rtdmtest.c 
b/kernel/drivers/testing/rtdmtest.c
index c5224d0..5c705e6 100644
--- a/kernel/drivers/testing/rtdmtest.c
+++ b/kernel/drivers/testing/rtdmtest.c
@@ -17,7 +17,6 @@
  */
 
 #include 
-
 #include 
 #include 
 
@@ -26,28 +25,38 @@ MODULE_AUTHOR("Jan Kiszka ");
 MODULE_VERSION("0.1.0");
 MODULE_LICENSE("GPL");
 
-struct rtdm_test_context {
+struct rtdm_basic_context {
rtdm_timer_t close_timer;
unsigned long close_counter;
unsigned long close_deferral;
 };
 
+struct rtdm_actor_context {
+   rtdm_task_t actor_task;
+   unsigned int request;
+   rtdm_event_t run;
+   rtdm_event_t done;
+   union {
+   __u32 cpu;
+   } args;
+};
+
 static void close_timer_proc(rtdm_timer_t *timer)
 {
-   struct rtdm_test_context *ctx =
-   container_of(timer, struct rtdm_test_context, close_timer);
+   struct rtdm_basic_context *ctx =
+   container_of(timer, struct rtdm_basic_context, close_timer);
 
if (ctx->close_counter != 1)
-   printk(KERN_ERR
+   printk(XENO_ERR
   "rtdmtest: %s: close_counter is %lu, should be 1!\n",
   __FUNCTION__, ctx->close_counter);
 
rtdm_fd_unlock(rtdm_private_to_fd(ctx));
 }
 
-static int rtdm_test_open(struct rtdm_fd *fd, int oflags)
+static int rtdm_basic_open(struct rtdm_fd *fd, int oflags)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
 
rtdm_timer_init(>close_timer, close_timer_proc,
"rtdm close test");
@@ -57,16 +66,16 @@ static int rtdm_test_open(struct rtdm_fd *fd, int oflags)
return 0;
 }
 
-static void rtdm_test_close(struct rtdm_fd *fd)
+static void rtdm_basic_close(struct rtdm_fd *fd)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
 
ctx->close_counter++;
 
switch (ctx->close_deferral) {
case RTTST_RTDM_DEFER_CLOSE_CONTEXT:
if (ctx->close_counter != 2) {
-   printk(KERN_ERR
+   printk(XENO_ERR
   "rtdmtest: %s: close_counter is %lu, "
   "should be 2!\n",
   __FUNCTION__, ctx->close_counter);
@@ -78,10 +87,10 @@ static void rtdm_test_close(struct rtdm_fd *fd)
rtdm_timer_destroy(>close_timer);
 }
 
-static int
-rtdm_test_ioctl(struct rtdm_fd *fd, unsigned int request, void __user *arg)
+static int rtdm_basic_ioctl(struct rtdm_fd *fd,
+   unsigned int request, void __user *arg)
 {
-   struct rtdm_test_context *ctx = rtdm_fd_to_private(fd);
+   struct rtdm_basic_context *ctx = rtdm_fd_to_private(fd);
int err = 0;
 
switch (request) {
@@ -94,7 +103,6 @@ rtdm_test_ioctl(struct rtdm_fd *fd, unsigned int request, 
void __user *arg)
RTDM_TIMERMODE_RELATIVE);
}
break;
-
default:
err = -ENOTTY;
}
@@ -102,30 +110,137 @@