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/init.c | |
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/init.c')
-rw-r--r-- | testsuites/smptests/smpschedaffinity03/init.c | 101 |
1 files changed, 101 insertions, 0 deletions
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> |