From: Jennifer Averett <jennifer.aver...@oarcorp.com> --- testsuites/smptests/Makefile.am | 3 + testsuites/smptests/configure.ac | 3 + testsuites/smptests/smpschedaffinity02/Makefile.am | 19 ++ testsuites/smptests/smpschedaffinity02/init.c | 230 +++++++++++++++++++++ .../smpschedaffinity02/smpschedaffinity02.doc | 11 + .../smpschedaffinity02/smpschedaffinity02.scn | 15 ++ testsuites/smptests/smpschedaffinity03/Makefile.am | 19 ++ testsuites/smptests/smpschedaffinity03/init.c | 101 +++++++++ .../smpschedaffinity03/smpschedaffinity03.doc | 11 + .../smpschedaffinity03/smpschedaffinity03.scn | 10 + testsuites/smptests/smpschedaffinity04/Makefile.am | 19 ++ testsuites/smptests/smpschedaffinity04/init.c | 184 +++++++++++++++++ .../smpschedaffinity04/smpschedaffinity04.doc | 11 + .../smpschedaffinity04/smpschedaffinity04.scn | 13 ++ 14 files changed, 649 insertions(+) create mode 100644 testsuites/smptests/smpschedaffinity02/Makefile.am create mode 100644 testsuites/smptests/smpschedaffinity02/init.c create mode 100644 testsuites/smptests/smpschedaffinity02/smpschedaffinity02.doc create mode 100644 testsuites/smptests/smpschedaffinity02/smpschedaffinity02.scn 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 create mode 100644 testsuites/smptests/smpschedaffinity04/Makefile.am create mode 100644 testsuites/smptests/smpschedaffinity04/init.c create mode 100644 testsuites/smptests/smpschedaffinity04/smpschedaffinity04.doc create mode 100644 testsuites/smptests/smpschedaffinity04/smpschedaffinity04.scn
diff --git a/testsuites/smptests/Makefile.am b/testsuites/smptests/Makefile.am index 4a6d22b..ac97f78 100644 --- a/testsuites/smptests/Makefile.am +++ b/testsuites/smptests/Makefile.am @@ -24,6 +24,9 @@ SUBDIRS += smpmigration01 SUBDIRS += smpmigration02 SUBDIRS += smpmrsp01 SUBDIRS += smpschedaffinity01 +SUBDIRS += smpschedaffinity02 +SUBDIRS += smpschedaffinity03 +SUBDIRS += smpschedaffinity04 SUBDIRS += smpscheduler01 SUBDIRS += smpscheduler02 SUBDIRS += smpscheduler03 diff --git a/testsuites/smptests/configure.ac b/testsuites/smptests/configure.ac index c95d801..7b1fc66 100644 --- a/testsuites/smptests/configure.ac +++ b/testsuites/smptests/configure.ac @@ -82,6 +82,9 @@ smppsxaffinity01/Makefile smppsxaffinity02/Makefile smppsxsignal01/Makefile smpschedaffinity01/Makefile +smpschedaffinity02/Makefile +smpschedaffinity03/Makefile +smpschedaffinity04/Makefile smpscheduler01/Makefile smpscheduler02/Makefile smpscheduler03/Makefile diff --git a/testsuites/smptests/smpschedaffinity02/Makefile.am b/testsuites/smptests/smpschedaffinity02/Makefile.am new file mode 100644 index 0000000..ef56a90 --- /dev/null +++ b/testsuites/smptests/smpschedaffinity02/Makefile.am @@ -0,0 +1,19 @@ +rtems_tests_PROGRAMS = smpschedaffinity02 +smpschedaffinity02_SOURCES = init.c + +dist_rtems_tests_DATA = smpschedaffinity02.scn smpschedaffinity02.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 = $(smpschedaffinity02_OBJECTS) +LINK_LIBS = $(smpschedaffinity02_LDLIBS) + +smpschedaffinity02$(EXEEXT): $(smpschedaffinity02_OBJECTS) $(smpschedaffinity02_DEPENDENCIES) + @rm -f smpschedaffinity02$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/smptests/smpschedaffinity02/init.c b/testsuites/smptests/smpschedaffinity02/init.c new file mode 100644 index 0000000..a3e0ddf --- /dev/null +++ b/testsuites/smptests/smpschedaffinity02/init.c @@ -0,0 +1,230 @@ +/* + * 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 designed for 2 cores: Init task and TA1 task. + * of equal priorities. + * + * - Set TA1 affinity to core 0 verify + * - Set TA1 affinity to core 1 verify it does not run because + * the Init task never blocks + * - Set Init affinity to core 0 verify both tasks are on the correct cores. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include <rtems.h> + +#include "tmacros.h" + +const char rtems_test_name[] = "SMPSCHEDAFFINITY 2"; + +#define NUM_CPUS 2 + +struct task_data_t { + rtems_id id; + int expected_cpu; + cpu_set_t cpuset; + bool ran; + int actual_cpu; +}; + +struct task_data_t task_data = { + 0x0, 0, {{0x3}}, false, -1 +}; + +rtems_id task_sem; + +static void task(rtems_task_argument arg); +static void show_threads(void); +static void task_verify( bool ran, bool change_affinity, int cpu ); +static void init_verify( int expect ); + +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 task_verify( bool ran, bool change_affinity, int cpu ) +{ + rtems_status_code sc; + size_t size = sizeof(cpu_set_t); + + /* Obtain the semaphore without blocking */ + while( rtems_semaphore_obtain (task_sem, RTEMS_NO_WAIT, 0) != RTEMS_SUCCESSFUL ); + + /* print the expected and actual values */ + printf( "TA01: expected=%d actual=%d ran=%d\n", + task_data.expected_cpu, + task_data.actual_cpu, + task_data.ran + ); + + /* Verify expected results */ + rtems_test_assert( task_data.ran == ran ); + if (ran) + rtems_test_assert( task_data.expected_cpu == task_data.actual_cpu ); + + if (change_affinity) { + printf("Set TA01 to cpu %d\n", cpu); + CPU_ZERO(&task_data.cpuset); + CPU_SET(cpu, &task_data.cpuset); + sc = rtems_task_set_affinity( task_data.id, size, &task_data.cpuset ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + } + + /* Reset the states */ + task_data.ran = false; + task_data.expected_cpu = cpu; + + /* Release the semaphore */ + rtems_semaphore_release(task_sem); +} + +static void init_verify( int expect ) +{ + int cpu; + + + test_delay(20); + + cpu = rtems_get_current_processor(); + printf( "Init: expected=%d actual=%d\n", expect, cpu); + rtems_test_assert( expect == cpu ); +} + +static void task(rtems_task_argument arg) +{ + rtems_status_code sc; + + /* Never block and continually get core id */ + while (true) { + sc = rtems_semaphore_obtain (task_sem, RTEMS_NO_WAIT, 0); + if (sc == RTEMS_SUCCESSFUL) { + task_data.actual_cpu = rtems_get_current_processor(); + task_data.ran = true; + rtems_semaphore_release(task_sem); + } + } +} + +static void test(void) +{ + rtems_status_code sc; + uint32_t cpu_count; + rtems_id id_self; + cpu_set_t cpuset; + + /* Get the number of processors that we are using. */ + cpu_count = rtems_get_processor_count(); + if (cpu_count < NUM_CPUS) { + printf("Error: Test requires at least 2 cpus\n"); + return; + } + + id_self = rtems_task_self(); + + printf("Create Semaphore\n"); + sc = rtems_semaphore_create( + rtems_build_name('S', 'E', 'M', '0'), + 1, + RTEMS_LOCAL | + RTEMS_SIMPLE_BINARY_SEMAPHORE | + RTEMS_NO_INHERIT_PRIORITY | + RTEMS_NO_PRIORITY_CEILING | + RTEMS_FIFO, + 0, + &task_sem + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + printf("Create TA1\n"); + sc = rtems_task_create( + rtems_build_name('T', 'A', '0', '1'), + 4, + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &task_data.id + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + /* TA1 should start on cpu 0, since init starts on core 1 */ + sc = rtems_task_start( task_data.id, task, 1 ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + /* Verify Init task is on cpu 1 */ + init_verify(1); + + /* Verify TA1 on cpu 0 and set the affinity to cpu 0 */ + task_verify( true, true, 0 ); + + /* Verify Init task is on cpu 1 */ + init_verify(1); + + /* Verify TA1 on cpu 0 and change the affinity to cpu 1 */ + task_verify( true, true, 1 ); + + /* Verify Init task is on cpu 1 */ + init_verify(1); + + /* Verify TA1 did not run */ + task_verify( false, false, 1 ); + + /* Set affinity of Init to cpu 0 */ + printf("Set Affinity of init task to cpu 0\n"); + CPU_ZERO(&cpuset); + CPU_SET(0, &cpuset); + sc = rtems_task_set_affinity( id_self, sizeof(cpuset), &cpuset ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + /* Verify init task went to cpu 0 */ + test_delay(50); + init_verify(0); + + /* Verfiy TA1 is now running on cpu 1 */ + task_verify(true, false, 1); +} + +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 NUM_CPUS + +#define CONFIGURE_INIT_TASK_PRIORITY 4 + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> diff --git a/testsuites/smptests/smpschedaffinity02/smpschedaffinity02.doc b/testsuites/smptests/smpschedaffinity02/smpschedaffinity02.doc new file mode 100644 index 0000000..4c0a4a7 --- /dev/null +++ b/testsuites/smptests/smpschedaffinity02/smpschedaffinity02.doc @@ -0,0 +1,11 @@ +This file describes the directives and concepts tested by this test set. + +test set name: smpschedaffinity02 + +directives: + + - XXX + +concepts: + + - Ensure that affinity is honored at when changed while task is running. diff --git a/testsuites/smptests/smpschedaffinity02/smpschedaffinity02.scn b/testsuites/smptests/smpschedaffinity02/smpschedaffinity02.scn new file mode 100644 index 0000000..b3a50a7 --- /dev/null +++ b/testsuites/smptests/smpschedaffinity02/smpschedaffinity02.scn @@ -0,0 +1,15 @@ +*** BEGIN OF TEST SMPSCHEDAFFINITY 2 *** +Create Semaphore +Create TA1 +Init: expected=1 actual=1 +TA01: expected=0 actual=0 ran=1 +Set TA01 to cpu 0 +Init: expected=1 actual=1 +TA01: expected=0 actual=0 ran=1 +Set TA01 to cpu 1 +Init: expected=1 actual=1 +TA01: expected=1 actual=0 ran=0 +Set Affinity of init task to cpu 0 +Init: expected=0 actual=0 +TA01: expected=1 actual=1 ran=1 +*** END OF TEST SMPSCHEDAFFINITY 2 *** diff --git a/testsuites/smptests/smpschedaffinity03/Makefile.am b/testsuites/smptests/smpschedaffinity03/Makefile.am new file mode 100644 index 0000000..995f587 --- /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 0000000..5b8acf7 --- /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 0000000..01e24cf --- /dev/null +++ b/testsuites/smptests/smpschedaffinity03/smpschedaffinity03.doc @@ -0,0 +1,11 @@ +This file describes the directives and concepts tested by this test set. + +test set name: smpschedaffinity01 + +directives: + + - XXX + +concepts: + + - Ensure that we can walk the affinity of the init task across all cores. diff --git a/testsuites/smptests/smpschedaffinity03/smpschedaffinity03.scn b/testsuites/smptests/smpschedaffinity03/smpschedaffinity03.scn new file mode 100644 index 0000000..76e9003 --- /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 *** diff --git a/testsuites/smptests/smpschedaffinity04/Makefile.am b/testsuites/smptests/smpschedaffinity04/Makefile.am new file mode 100644 index 0000000..d75216c --- /dev/null +++ b/testsuites/smptests/smpschedaffinity04/Makefile.am @@ -0,0 +1,19 @@ +rtems_tests_PROGRAMS = smpschedaffinity04 +smpschedaffinity04_SOURCES = init.c + +dist_rtems_tests_DATA = smpschedaffinity04.scn smpschedaffinity04.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 = $(smpschedaffinity04_OBJECTS) +LINK_LIBS = $(smpschedaffinity04_LDLIBS) + +smpschedaffinity04$(EXEEXT): $(smpschedaffinity04_OBJECTS) $(smpschedaffinity04_DEPENDENCIES) + @rm -f smpschedaffinity04$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/smptests/smpschedaffinity04/init.c b/testsuites/smptests/smpschedaffinity04/init.c new file mode 100644 index 0000000..bdfc56c --- /dev/null +++ b/testsuites/smptests/smpschedaffinity04/init.c @@ -0,0 +1,184 @@ +/* + * 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. + */ + +/* + * Use the Init task to walk the higher priority TA1 across all the cores. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include <rtems.h> + +#include "tmacros.h" + +const char rtems_test_name[] = "SMPSCHEDAFFINITY 4"; + +#define NUM_CPUS 4 +#define TASK_COUNT 2 + +struct task_data_t { + rtems_id id; + int expected_cpu; + bool ran; + int actual_cpu; +}; + +struct task_data_t task_data = { + 0x0, 2, false, 0xff +}; + +rtems_id task_sem; + +static void task(rtems_task_argument arg); + +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 ); +} + +/* + * Task that continually sets the cpu and + * run indicators without blocking. + */ +static void task(rtems_task_argument arg) +{ + rtems_status_code sc; + + while (true) { + sc = rtems_semaphore_obtain (task_sem, RTEMS_NO_WAIT, 0); + if (sc == RTEMS_SUCCESSFUL) { + task_data.ran = true; + task_data.actual_cpu = rtems_get_current_processor(); + rtems_semaphore_release(task_sem); + } + } +} + +static void test(void) +{ + rtems_status_code sc; + 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(); + if (cpu_count < 2) { + printf("Error: Test requires at least 2 cpus\n"); + return; + } + + printf("Create Semaphore\n"); + sc = rtems_semaphore_create( + rtems_build_name('S', 'E', 'M', '0'), + 1, /* initial count = 1 */ + RTEMS_LOCAL | + RTEMS_SIMPLE_BINARY_SEMAPHORE | + RTEMS_NO_INHERIT_PRIORITY | + RTEMS_NO_PRIORITY_CEILING | + RTEMS_FIFO, + 0, + &task_sem + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + /* + * Create and start TA1 at a higher priority + * than the init task. + */ + sc = rtems_task_create( + rtems_build_name('T', 'A', '0', '1'), + 4, + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &task_data.id + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + printf("Start TA1\n"); + sc = rtems_task_start( task_data.id, task, 0 ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + /* + * Verify the Init task is running on the max core. + */ + printf("Verify Init task is on cpu %ld\n",cpu_count-1); + cpu = rtems_get_current_processor(); + rtems_test_assert(cpu == (cpu_count-1)); + + /* Walk TA1 across all of the cores */ + for(i=0; i < cpu_count; i++) { + /* Set the Affinity to core i */ + CPU_ZERO(&cpuset); + CPU_SET(i, &cpuset); + printf("Set Affinity TA1 to cpu %d\n", i); + sc = rtems_task_set_affinity( task_data.id, sizeof(cpuset), &cpuset ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + /* Wait a bit to be sure it has switched cores then clear the task data */ + test_delay(50); + while( rtems_semaphore_obtain (task_sem, RTEMS_NO_WAIT, 0) != RTEMS_SUCCESSFUL ); + task_data.ran = false; + task_data.expected_cpu = i; + rtems_semaphore_release(task_sem); + test_delay(50); + + /* Verify the task ran on core i */ + while( rtems_semaphore_obtain (task_sem, RTEMS_NO_WAIT, 0) != RTEMS_SUCCESSFUL ); + if (task_data.ran != true) + printf("Error: TA01 never ran.\n"); + else + printf( + "TA1 expected cpu: %d actual cpu %d\n", + task_data.expected_cpu, + task_data.actual_cpu + ); + rtems_test_assert(task_data.ran == true); + rtems_test_assert(task_data.expected_cpu == task_data.actual_cpu); + rtems_semaphore_release(task_sem); + } +} + +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/smpschedaffinity04/smpschedaffinity04.doc b/testsuites/smptests/smpschedaffinity04/smpschedaffinity04.doc new file mode 100644 index 0000000..ca68f88 --- /dev/null +++ b/testsuites/smptests/smpschedaffinity04/smpschedaffinity04.doc @@ -0,0 +1,11 @@ +This file describes the directives and concepts tested by this test set. + +test set name: smpschedaffinity01 + +directives: + + - XXX + +concepts: + + - Ensure that affinity of a secondary task can be walked across all cpus. diff --git a/testsuites/smptests/smpschedaffinity04/smpschedaffinity04.scn b/testsuites/smptests/smpschedaffinity04/smpschedaffinity04.scn new file mode 100644 index 0000000..8d4c7d3 --- /dev/null +++ b/testsuites/smptests/smpschedaffinity04/smpschedaffinity04.scn @@ -0,0 +1,13 @@ +*** BEGIN OF TEST SMPSCHEDAFFINITY 4 *** +Create Semaphore +Start TA1 +Verify Init task is on cpu 3 +Set Affinity TA1 to cpu 0 +TA1 expected cpu: 0 actual cpu 0 +Set Affinity TA1 to cpu 1 +TA1 expected cpu: 1 actual cpu 1 +Set Affinity TA1 to cpu 2 +TA1 expected cpu: 2 actual cpu 2 +Set Affinity TA1 to cpu 3 +TA1 expected cpu: 3 actual cpu 3 +*** END OF TEST SMPSCHEDAFFINITY 4 *** -- 1.8.1.4 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel