From 28d6674966787695d72733cf0d289ddd6b6c52ba Mon Sep 17 00:00:00 2001 From: Jennifer Averett Date: Thu, 10 Jul 2014 11:18:02 -0500 Subject: smpschedaffinity03: New test. This task walks the affinity of self across all the cores. --- testsuites/smptests/Makefile.am | 1 + testsuites/smptests/configure.ac | 1 + testsuites/smptests/smpschedaffinity03/Makefile.am | 19 ++++ testsuites/smptests/smpschedaffinity03/init.c | 101 +++++++++++++++++++++ .../smpschedaffinity03/smpschedaffinity03.doc | 10 ++ .../smpschedaffinity03/smpschedaffinity03.scn | 10 ++ 6 files changed, 142 insertions(+) create mode 100644 testsuites/smptests/smpschedaffinity03/Makefile.am create mode 100644 testsuites/smptests/smpschedaffinity03/init.c create mode 100644 testsuites/smptests/smpschedaffinity03/smpschedaffinity03.doc create mode 100644 testsuites/smptests/smpschedaffinity03/smpschedaffinity03.scn diff --git a/testsuites/smptests/Makefile.am b/testsuites/smptests/Makefile.am index 424fa286a3..961ef553da 100644 --- a/testsuites/smptests/Makefile.am +++ b/testsuites/smptests/Makefile.am @@ -25,6 +25,7 @@ SUBDIRS += smpmigration02 SUBDIRS += smpmrsp01 SUBDIRS += smpschedaffinity01 SUBDIRS += smpschedaffinity02 +SUBDIRS += smpschedaffinity03 SUBDIRS += smpscheduler01 SUBDIRS += smpscheduler02 SUBDIRS += smpscheduler03 diff --git a/testsuites/smptests/configure.ac b/testsuites/smptests/configure.ac index eac0e656bd..4c216463ed 100644 --- a/testsuites/smptests/configure.ac +++ b/testsuites/smptests/configure.ac @@ -83,6 +83,7 @@ smppsxaffinity02/Makefile smppsxsignal01/Makefile smpschedaffinity01/Makefile smpschedaffinity02/Makefile +smpschedaffinity03/Makefile smpscheduler01/Makefile smpscheduler02/Makefile smpscheduler03/Makefile 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 + +#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 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 *** -- cgit v1.2.3