source: rtems/testsuites/smptests/smpload01/init.c @ 65c0166

4.115
Last change on this file since 65c0166 was 65c0166, checked in by Sebastian Huber <sebastian.huber@…>, on 03/17/14 at 12:20:37

smptests/smpload01: Use test extension

  • Property mode set to 100644
File size: 3.0 KB
Line 
1/*
2 * Copyright (c) 2014 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.com/license/LICENSE.
13 */
14
15#ifdef HAVE_CONFIG_H
16  #include "config.h"
17#endif
18
19#include "tmacros.h"
20
21#include <rtems.h>
22#include <rtems/profiling.h>
23
24const char rtems_test_name[] = "SMPLOAD 1";
25
26#define CPU_COUNT 32
27
28#define WORKER_COUNT (3 * CPU_COUNT)
29
30struct {
31  rtems_id sema_prio_inherit;
32  rtems_id sema_prio_ceiling;
33} test_context;
34
35static uint32_t simple_random(uint32_t v)
36{
37        v *= 1664525;
38        v += 1013904223;
39
40        return v;
41}
42
43static void worker_task(rtems_task_argument arg)
44{
45  uint32_t v = arg;
46
47  while (true) {
48    rtems_status_code sc;
49    rtems_id id;
50
51    v = simple_random(v);
52
53    if ((v & 0x80000000) != 0) {
54      id = test_context.sema_prio_inherit;
55    } else {
56      id = test_context.sema_prio_ceiling;
57    }
58
59    sc = rtems_semaphore_obtain(id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
60    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
61
62    sc = rtems_task_wake_after(1);
63    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
64
65    sc = rtems_semaphore_release(id);
66    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
67  }
68}
69
70static void test(void)
71{
72  uint32_t i;
73  rtems_status_code sc;
74  rtems_id id;
75
76  sc = rtems_semaphore_create(
77    rtems_build_name('I', 'N', 'H', 'R'),
78    1,
79    RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY,
80    0,
81    &test_context.sema_prio_inherit
82  );
83  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
84
85  sc = rtems_semaphore_create(
86    rtems_build_name('C', 'E', 'I', 'L'),
87    1,
88    RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_PRIORITY_CEILING,
89    2,
90    &test_context.sema_prio_ceiling
91  );
92  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
93
94  for (i = 0; i < WORKER_COUNT; ++i) {
95    sc = rtems_task_create(
96      rtems_build_name('W', 'O', 'R', 'K'),
97      3 + i,
98      RTEMS_MINIMUM_STACK_SIZE,
99      RTEMS_DEFAULT_MODES,
100      RTEMS_DEFAULT_ATTRIBUTES,
101      &id
102    );
103    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
104
105    sc = rtems_task_start(id, worker_task, i);
106    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
107  }
108
109  sc = rtems_task_wake_after(10 * rtems_clock_get_ticks_per_second());
110  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
111
112  rtems_profiling_report_xml("SMPLOAD 1", rtems_printf_plugin, NULL, 1, "  ");
113}
114
115static void Init(rtems_task_argument arg)
116{
117  TEST_BEGIN();
118
119  test();
120
121  TEST_END();
122  rtems_test_exit(0);
123}
124
125#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
126#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
127
128#define CONFIGURE_SMP_APPLICATION
129
130#define CONFIGURE_SMP_MAXIMUM_PROCESSORS CPU_COUNT
131
132#define CONFIGURE_MAXIMUM_TASKS (1 + WORKER_COUNT)
133#define CONFIGURE_MAXIMUM_SEMAPHORES 2
134
135#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
136
137#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
138
139#define CONFIGURE_INIT
140
141#include <rtems/confdefs.h>
Note: See TracBrowser for help on using the repository browser.