diff options
author | Jennifer Averett <jennifer.averett@oarcorp.com> | 2014-07-10 11:18:02 -0500 |
---|---|---|
committer | Jennifer Averett <jennifer.averett@oarcorp.com> | 2014-07-11 10:12:48 -0500 |
commit | 28d6674966787695d72733cf0d289ddd6b6c52ba (patch) | |
tree | e96fe428acae8f04ebff9cd85607ab21ce8d2bb1 /testsuites/smptests/smpschedaffinity03 | |
parent | smpschedaffinity02: New test. (diff) | |
download | rtems-28d6674966787695d72733cf0d289ddd6b6c52ba.tar.bz2 |
smpschedaffinity03: New test.
This task walks the affinity of self across all the cores.
Diffstat (limited to 'testsuites/smptests/smpschedaffinity03')
4 files changed, 140 insertions, 0 deletions
diff --git a/testsuites/smptests/smpschedaffinity03/Makefile.am b/testsuites/smptests/smpschedaffinity03/Makefile.am new file mode 100644 index 0000000000..995f587b4e --- /dev/null +++ b/testsuites/smptests/smpschedaffinity03/Makefile.am @@ -0,0 +1,19 @@ +rtems_tests_PROGRAMS = smpschedaffinity03 +smpschedaffinity03_SOURCES = init.c + +dist_rtems_tests_DATA = smpschedaffinity03.scn smpschedaffinity03.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(smpschedaffinity03_OBJECTS) +LINK_LIBS = $(smpschedaffinity03_LDLIBS) + +smpschedaffinity03$(EXEEXT): $(smpschedaffinity03_OBJECTS) $(smpschedaffinity03_DEPENDENCIES) + @rm -f smpschedaffinity03$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/smptests/smpschedaffinity03/init.c b/testsuites/smptests/smpschedaffinity03/init.c new file mode 100644 index 0000000000..5b8acf7a30 --- /dev/null +++ b/testsuites/smptests/smpschedaffinity03/init.c @@ -0,0 +1,101 @@ +/* + * COPYRIGHT (c) 2014. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +/* + * Test to walk the affinity of the init task across all the cores. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include <rtems.h> + +#include "tmacros.h" + +const char rtems_test_name[] = "SMPSCHEDAFFINITY 3"; + +#define NUM_CPUS 4 +#define TASK_COUNT NUM_CPUS + +static void test_delay(int ticks) +{ + rtems_interval start, stop; + start = rtems_clock_get_ticks_since_boot(); + do { + stop = rtems_clock_get_ticks_since_boot(); + } while ( (stop - start) < ticks ); +} + +static void test(void) +{ + rtems_status_code sc; + rtems_id id; + uint32_t cpu_count; + int cpu; + int i; + cpu_set_t cpuset; + + /* Get the number of processors that we are using. */ + cpu_count = rtems_get_processor_count(); + + id = rtems_task_self(); + + /* + * The Init task comes up on the maximum core so start at + * that core and walk the affinity down to core 0. + */ + for( i=cpu_count-1; i >= 0; i--) { + + /* Move the affinity to the current core - 1 */ + CPU_ZERO(&cpuset); + CPU_SET(i, &cpuset); + printf("Set Affinity for cpu %d\n", i); + sc = rtems_task_set_affinity( id, sizeof(cpuset), &cpuset ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + /* Wait 100 clock ticks */ + test_delay(100); + + /* Check the cpu the Init task is running on */ + cpu = rtems_get_current_processor(); + printf("On cpu %d\n", cpu); + rtems_test_assert(cpu == i); + } +} + +static void Init(rtems_task_argument arg) +{ + TEST_BEGIN(); + + test(); + + TEST_END(); + rtems_test_exit(0); +} + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_SMP_APPLICATION + +#define CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP + +#define CONFIGURE_SMP_MAXIMUM_PROCESSORS NUM_CPUS + +#define CONFIGURE_MAXIMUM_TASKS TASK_COUNT + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + + #define CONFIGURE_INIT_TASK_PRIORITY 8 +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> diff --git a/testsuites/smptests/smpschedaffinity03/smpschedaffinity03.doc b/testsuites/smptests/smpschedaffinity03/smpschedaffinity03.doc new file mode 100644 index 0000000000..5afc2d8044 --- /dev/null +++ b/testsuites/smptests/smpschedaffinity03/smpschedaffinity03.doc @@ -0,0 +1,10 @@ +This file describes the directives and concepts tested by this test set. + +test set name: smpschedaffinity03 + +directives: + + - _Scheduler_priority_affinity_xxx + +concepts: + - Test to walk the affinity of the init task across all the cores. diff --git a/testsuites/smptests/smpschedaffinity03/smpschedaffinity03.scn b/testsuites/smptests/smpschedaffinity03/smpschedaffinity03.scn new file mode 100644 index 0000000000..76e9003884 --- /dev/null +++ b/testsuites/smptests/smpschedaffinity03/smpschedaffinity03.scn @@ -0,0 +1,10 @@ +*** BEGIN OF TEST SMPSCHEDAFFINITY 3 *** +Set Affinity for cpu 3 +On cpu 3 +Set Affinity for cpu 2 +On cpu 2 +Set Affinity for cpu 1 +On cpu 1 +Set Affinity for cpu 0 +On cpu 0 +*** END OF TEST SMPSCHEDAFFINITY 3 *** |