[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 7e588651fb269f6ec1071f92352d6b81b0b4c61d URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=7e588651fb269f6ec1071f92352d6b81b0b4c61d Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 97bebf0..77e9fea 100644 --- a/configure.ac +++ b/configure.ac @@ -921,11 +921,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 5a82018..ae60a44 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: ac17e19da18581b138d2293b3a131bbf6f81521e URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=ac17e19da18581b138d2293b3a131bbf6f81521e Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 97bebf0..77e9fea 100644 --- a/configure.ac +++ b/configure.ac @@ -921,11 +921,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 5a82018..ae60a44 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: e742f8ed60cb40984d356f65f6e2bd1be4e74fa3 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=e742f8ed60cb40984d356f65f6e2bd1be4e74fa3 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 97bebf0..77e9fea 100644 --- a/configure.ac +++ b/configure.ac @@ -921,11 +921,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 5a82018..ae60a44 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: bca8cb6c86cad69c437139502e7ad37551eef714 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=bca8cb6c86cad69c437139502e7ad37551eef714 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 97bebf0..77e9fea 100644 --- a/configure.ac +++ b/configure.ac @@ -921,11 +921,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 5a82018..ae60a44 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 9c16960d3800c0c609c150dd543b0b921a65d6bc URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=9c16960d3800c0c609c150dd543b0b921a65d6bc Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 97bebf0..77e9fea 100644 --- a/configure.ac +++ b/configure.ac @@ -921,11 +921,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 5a82018..ae60a44 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: a8c320794f3a2389ccecf765c7c056da1dbec447 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=a8c320794f3a2389ccecf765c7c056da1dbec447 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 97bebf0..77e9fea 100644 --- a/configure.ac +++ b/configure.ac @@ -921,11 +921,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 5a82018..ae60a44 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: b8b823ed9a6b1d70d9e2e9e9e598aa6bd740bbab URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b8b823ed9a6b1d70d9e2e9e9e598aa6bd740bbab Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 97bebf0..77e9fea 100644 --- a/configure.ac +++ b/configure.ac @@ -921,11 +921,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 5a82018..ae60a44 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 4d40f53e6db77e7a9d926e3beaae5969aaa1db82 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=4d40f53e6db77e7a9d926e3beaae5969aaa1db82 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index a6b3e12..f2374f4 100644 --- a/configure.ac +++ b/configure.ac @@ -918,11 +918,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 5a82018..ae60a44 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: e249c2c8349dbcba15d51645e9da751f6efca74f URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=e249c2c8349dbcba15d51645e9da751f6efca74f Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 2170d0e..1432ef2 100644 --- a/configure.ac +++ b/configure.ac @@ -918,11 +918,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 5a82018..ae60a44 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 83d1c15c2737f25579e20aad9b81e0926b522364 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=83d1c15c2737f25579e20aad9b81e0926b522364 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 28c41ce..adf88a0 100644 --- a/configure.ac +++ b/configure.ac @@ -915,11 +915,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index b0904d2..e253d6f 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 8dd53ef7dcca29b65dc0f2cce28d197f4a570bab URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=8dd53ef7dcca29b65dc0f2cce28d197f4a570bab Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 2197e55..9925d54 100644 --- a/configure.ac +++ b/configure.ac @@ -915,11 +915,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index b0904d2..e253d6f 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 6c92ab2f1279dffcddb178ca010faa0422e2d2b1 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=6c92ab2f1279dffcddb178ca010faa0422e2d2b1 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 2197e55..9925d54 100644 --- a/configure.ac +++ b/configure.ac @@ -915,11 +915,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index b0904d2..e253d6f 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: b4eadefcd31e1303e4f3331308135e6193544e34 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b4eadefcd31e1303e4f3331308135e6193544e34 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 14d2f8e..ab13f96 100644 --- a/configure.ac +++ b/configure.ac @@ -911,11 +911,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index b0904d2..e253d6f 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: b073c97513f22f16df26938fe556f9330bb1baa7 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b073c97513f22f16df26938fe556f9330bb1baa7 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 14d2f8e..ab13f96 100644 --- a/configure.ac +++ b/configure.ac @@ -911,11 +911,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index b0904d2..e253d6f 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 902a7ce4b7ba6eed078ddbd8957534c905a996f2 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=902a7ce4b7ba6eed078ddbd8957534c905a996f2 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 5b2a074..bbaf4a7 100644 --- a/configure.ac +++ b/configure.ac @@ -905,11 +905,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index b0904d2..e253d6f 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 6cfca2ba8df5f1885da7e19d3e6b34f2159db578 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=6cfca2ba8df5f1885da7e19d3e6b34f2159db578 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 5b2a074..bbaf4a7 100644 --- a/configure.ac +++ b/configure.ac @@ -905,11 +905,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index b0904d2..e253d6f 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 75c96ce9a5f5a87b8f73053909290303f72d91ed URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=75c96ce9a5f5a87b8f73053909290303f72d91ed Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index ac9b252..9e9bc90 100644 --- a/configure.ac +++ b/configure.ac @@ -904,11 +904,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 5ade58b..51292f1 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 06ee1f4ecc3176634c087bbc9d504be7e903f0dc URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=06ee1f4ecc3176634c087bbc9d504be7e903f0dc Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |6 +- testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index ac9b252..9e9bc90 100644 --- a/configure.ac +++ b/configure.ac @@ -904,11 +904,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ - testsuite/smokey/net_udp/Makefile \ - testsuite/smokey/net_packet_dgram/Makefile \ - testsuite/smokey/net_packet_raw/Makefile \ - testsuite/smokey/net_common/Makefile \ - testsuite/smokey/cpu-affinity/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 5ade58b..51292f1 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -9,6 +9,7 @@ COBALT_SUBDIRS =\ arith \ bufp\ cpu-affinity\ + fpu-stress \ iddp\ leaks \ net_packet_dgram\ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, report_error) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +}
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 3954909041071ab0422fe178e5afde0d52c100b1 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=3954909041071ab0422fe178e5afde0d52c100b1 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |1 + testsuite/smokey/Makefile.am | 34 --- testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 95 ++ 4 files changed, 115 insertions(+), 23 deletions(-) diff --git a/configure.ac b/configure.ac index c805186..89c2911 100644 --- a/configure.ac +++ b/configure.ac @@ -899,6 +899,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 87e0555..023cd47 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -5,11 +5,10 @@ CCLD = $(top_srcdir)/scripts/wrap-link.sh $(CC) smokey_SOURCES = main.c -if XENO_COBALT -wrappers = $(XENO_POSIX_WRAPPERS) -SUBDIRS = \ +COBALT_SUBDIRS = \ arith \ bufp\ + fpu-stress \ iddp\ leaks \ posix-clock \ @@ -25,8 +24,16 @@ SUBDIRS =\ tsc \ vdso-access \ xddp + +MERCURY_SUBDIRS = + +DIST_SUBDIRS = $(COBALT_SUBDIRS) $(MERCURY_SUBDIRS) + +if XENO_COBALT +wrappers = $(XENO_POSIX_WRAPPERS) +SUBDIRS = $(COBALT_SUBDIRS) else -SUBDIRS = +SUBDIRS = $(MERCURY_SUBDIRS) wrappers = endif @@ -50,22 +57,3 @@ smokey_LDADD = \ ../../lib/@XENO_CORE_LIB@ \ @XENO_USER_LDADD@ \ -lpthread -lrt - -DIST_SUBDIRS = \ - arith \ - bufp\ - iddp\ - leaks \ - posix-clock \ - posix-cond \ - posix-fork \ - posix-mutex \ - posix-select\ - rtdm\ - sched-quota \ - sched-tp\ - sigdebug\ - timerfd \ - tsc \ - vdso-access \ - xddp diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..59383c9 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int report_error(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + smokey_vatrace(fmt, ap); + va_end(ap); + + return 0; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREA
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: next Commit: 7c555a563b42477602bb7fb193eacb3673170db8 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=7c555a563b42477602bb7fb193eacb3673170db8 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |1 + testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 84 ++ 4 files changed, 94 insertions(+) diff --git a/configure.ac b/configure.ac index c805186..89c2911 100644 --- a/configure.ac +++ b/configure.ac @@ -899,6 +899,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 87e0555..e0361df 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -10,6 +10,7 @@ wrappers = $(XENO_POSIX_WRAPPERS) SUBDIRS = \ arith \ bufp\ + fpu-stress \ iddp\ leaks \ posix-clock \ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..1846bf6 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,84 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, smokey_trace) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +} ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Philippe Gerum : testsuite/smokey: add basic FPU stress test
Module: xenomai-3 Branch: arm64 Commit: 6a0c700645457dfeca4904e16aaa82457ed4 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=6a0c700645457dfeca4904e16aaa82457ed4 Author: Philippe Gerum Date: Sat Oct 24 15:52:48 2015 +0200 testsuite/smokey: add basic FPU stress test --- configure.ac |1 + testsuite/smokey/Makefile.am |1 + testsuite/smokey/fpu-stress/Makefile.am |8 +++ testsuite/smokey/fpu-stress/fpu-stress.c | 84 ++ 4 files changed, 94 insertions(+) diff --git a/configure.ac b/configure.ac index c805186..89c2911 100644 --- a/configure.ac +++ b/configure.ac @@ -899,6 +899,7 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ + testsuite/smokey/fpu-stress/Makefile \ testsuite/clocktest/Makefile \ testsuite/xeno-test/Makefile \ utils/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index 87e0555..e0361df 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -10,6 +10,7 @@ wrappers = $(XENO_POSIX_WRAPPERS) SUBDIRS = \ arith \ bufp\ + fpu-stress \ iddp\ leaks \ posix-clock \ diff --git a/testsuite/smokey/fpu-stress/Makefile.am b/testsuite/smokey/fpu-stress/Makefile.am new file mode 100644 index 000..c90d0dd --- /dev/null +++ b/testsuite/smokey/fpu-stress/Makefile.am @@ -0,0 +1,8 @@ + +noinst_LIBRARIES = libfpu-stress.a + +libfpu_stress_a_SOURCES = fpu-stress.c + +libfpu_stress_a_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include diff --git a/testsuite/smokey/fpu-stress/fpu-stress.c b/testsuite/smokey/fpu-stress/fpu-stress.c new file mode 100644 index 000..1846bf6 --- /dev/null +++ b/testsuite/smokey/fpu-stress/fpu-stress.c @@ -0,0 +1,84 @@ +#include +#include +#include +#include +#include + +smokey_test_plugin(fpu_stress, + SMOKEY_ARGLIST( + SMOKEY_INT(duration), + ), + "Check FPU context sanity during real-time stress\n" + "\tduration=\thow long to run the stress loop (0=indefinitely)" +); + +static int fp_features; + +static void *stress_loop(void *arg) +{ + struct timespec rqt = { + .tv_sec = 0, + .tv_nsec = CONFIG_XENO_DEFAULT_PERIOD + }; + + for (;;) { + fp_regs_set(fp_features, 0xf1f5f1f5); + clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL); + } + + return NULL; +} + +static int run_fpu_stress(struct smokey_test *t, + int argc, char *const argv[]) +{ + unsigned sleep_ms, n, rounds, duration = 3; + struct sched_param param; + pthread_attr_t attr; + struct timespec rqt; + pthread_t tid; + int ret; + + fp_features = cobalt_fp_detect(); + if (fp_features == 0) + return -ENOSYS; + + smokey_parse_args(t, argc, argv); + + if (SMOKEY_ARG_ISSET(fpu_stress, duration)) + duration = SMOKEY_ARG_INT(fpu_stress, duration); + + rqt.tv_sec = 0; + rqt.tv_nsec = CONFIG_XENO_DEFAULT_PERIOD; + sleep_ms = 100UL / rqt.tv_nsec; /* wake up each ms */ + rounds = duration * 1000UL / sleep_ms; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); + param.sched_priority = 10; + pthread_attr_setschedparam(&attr, ¶m); + ret = pthread_create(&tid, &attr, stress_loop, NULL); + if (ret) + return -ret; + + if (rounds) + smokey_trace("running for %d seconds", duration); + else + smokey_trace("running indefinitely..."); + + for (n = 0; rounds == 0 || n < rounds; n++) { + fp_regs_set(fp_features, n); + __STD(clock_nanosleep(CLOCK_MONOTONIC, 0, &rqt, NULL)); + if (fp_regs_check(fp_features, n, smokey_trace) != n) { + ret = -EINVAL; + break; + } + } + + pthread_cancel(tid); + pthread_join(tid, NULL); + + return ret; +} ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git