[Xenomai-git] Philippe Gerum : drivers/testing: rtdm: add actor task device
Module: xenomai-3 Branch: wip/prioceil Commit: 38df524a0479ae30cf1bb96e1054544eb21d7759 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=38df524a0479ae30cf1bb96e1054544eb21d7759 Author: Philippe GerumDate: 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
Module: xenomai-3 Branch: next Commit: 7ef97138f15a89efa19d41aa3c5a78184ddbbc1b URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=7ef97138f15a89efa19d41aa3c5a78184ddbbc1b Author: Philippe GerumDate: 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
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 GerumDate: 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
Module: xenomai-3 Branch: wip/prioceil Commit: c974cb4b95f6c0ceeddbbf9b40429bdfc9c3307c URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=c974cb4b95f6c0ceeddbbf9b40429bdfc9c3307c Author: Philippe GerumDate: 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 @@