source: rtems/testsuites/smptests/smpscheduler02/init.c @ 03c9f24

5
Last change on this file since 03c9f24 was 03c9f24, checked in by Sebastian Huber <sebastian.huber@…>, on 04/05/19 at 06:03:12

rtems: Add rtems_scheduler_get_processor()

Add rtems_scheduler_get_processor() as a replacement for
rtems_get_current_processor(). The rtems_get_current_processor() is a
bit orphaned. Adopt it by the Scheduler Manager. This is in line with
the glibc sched_getcpu() function.

Deprecate rtems_get_current_processor().

Update #3731.

  • Property mode set to 100644
File size: 14.9 KB
Line 
1/*
2 * Copyright (c) 2014, 2017 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.org/license/LICENSE.
13 */
14
15#ifdef HAVE_CONFIG_H
16  #include "config.h"
17#endif
18
19#include <sched.h>
20#include <limits.h>
21
22#include <rtems.h>
23#include <rtems/libcsupport.h>
24
25#include "tmacros.h"
26
27const char rtems_test_name[] = "SMPSCHEDULER 2";
28
29#define SCHED_A rtems_build_name(' ', ' ', ' ', 'A')
30
31#define SCHED_B rtems_build_name(' ', ' ', ' ', 'B')
32
33#define SCHED_C rtems_build_name(' ', ' ', ' ', 'C')
34
35static rtems_id main_task_id;
36
37static rtems_id cmtx_id;
38
39static rtems_id imtx_id;
40
41static volatile bool ready;
42
43static void task(rtems_task_argument arg)
44{
45  rtems_status_code sc;
46
47  (void) arg;
48
49  rtems_test_assert(rtems_scheduler_get_processor() == 1);
50  rtems_test_assert(sched_get_priority_min(SCHED_RR) == 1);
51  rtems_test_assert(sched_get_priority_max(SCHED_RR) == INT_MAX - 1);
52
53  sc = rtems_semaphore_obtain(cmtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
54  rtems_test_assert(sc == RTEMS_NOT_DEFINED);
55
56  sc = rtems_event_transient_send(main_task_id);
57  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
58
59  sc = rtems_semaphore_obtain(imtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
60  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
61
62  sc = rtems_semaphore_release(imtx_id);
63  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
64
65  sc = rtems_event_transient_send(main_task_id);
66  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
67
68  while (1) {
69    /* Do nothing */
70  }
71}
72
73static void sticky_task(rtems_task_argument arg)
74{
75  rtems_status_code sc;
76  rtems_id mtx_id;
77
78  (void) arg;
79
80  rtems_test_assert(rtems_scheduler_get_processor() == 0);
81
82  sc = rtems_semaphore_create(
83    rtems_build_name(' ', 'M', 'T', 'X'),
84    1,
85    RTEMS_BINARY_SEMAPHORE | RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
86    2,
87    &mtx_id
88  );
89  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
90
91  sc = rtems_semaphore_obtain(mtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
92  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
93
94  ready = true;
95
96  sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
97  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
98
99  sc = rtems_semaphore_release(mtx_id);
100  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
101
102  sc = rtems_semaphore_delete(mtx_id);
103  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
104
105  sc = rtems_event_transient_send(main_task_id);
106  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
107
108  while (1) {
109    /* Do nothing */
110  }
111}
112
113static void test_scheduler_add_remove_processors(void)
114{
115  rtems_status_code sc;
116  rtems_id scheduler_a_id;
117  rtems_id scheduler_c_id;
118
119  sc = rtems_scheduler_ident(SCHED_A, &scheduler_a_id);
120  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
121
122  sc = rtems_scheduler_ident(SCHED_C, &scheduler_c_id);
123  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
124
125  sc = rtems_scheduler_add_processor(scheduler_c_id, 62);
126  rtems_test_assert(sc == RTEMS_NOT_CONFIGURED);
127
128  sc = rtems_scheduler_add_processor(scheduler_c_id, 63);
129  rtems_test_assert(sc == RTEMS_INCORRECT_STATE);
130
131  sc = rtems_scheduler_remove_processor(scheduler_c_id, 62);
132  rtems_test_assert(sc == RTEMS_INVALID_NUMBER);
133
134  sc = rtems_scheduler_remove_processor(scheduler_a_id, 0);
135  rtems_test_assert(sc == RTEMS_RESOURCE_IN_USE);
136
137  if (rtems_get_processor_count() > 1) {
138    rtems_id scheduler_id;
139    rtems_id scheduler_b_id;
140    rtems_id task_id;
141    cpu_set_t first_cpu;
142
143    sc = rtems_scheduler_ident(SCHED_B, &scheduler_b_id);
144    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
145
146    sc = rtems_scheduler_remove_processor(scheduler_b_id, 1);
147    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
148
149    sc = rtems_scheduler_add_processor(scheduler_a_id, 1);
150    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
151
152    rtems_test_assert(rtems_scheduler_get_processor() == 0);
153
154    sc = rtems_scheduler_remove_processor(scheduler_a_id, 0);
155    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
156
157    rtems_test_assert(rtems_scheduler_get_processor() == 1);
158
159    CPU_ZERO(&first_cpu);
160    CPU_SET(0, &first_cpu);
161    sc = rtems_scheduler_ident_by_processor_set(
162      sizeof(first_cpu),
163      &first_cpu,
164      &scheduler_id
165    );
166    rtems_test_assert(sc == RTEMS_INCORRECT_STATE);
167
168    sc = rtems_scheduler_add_processor(scheduler_a_id, 0);
169    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
170
171    rtems_test_assert(rtems_scheduler_get_processor() == 1);
172
173    sc = rtems_task_create(
174      rtems_build_name('T', 'A', 'S', 'K'),
175      2,
176      RTEMS_MINIMUM_STACK_SIZE,
177      RTEMS_DEFAULT_MODES,
178      RTEMS_DEFAULT_ATTRIBUTES,
179      &task_id
180    );
181    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
182
183    sc = rtems_task_start(task_id, sticky_task, 0);
184    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
185
186    while (!ready) {
187      /* Wait */
188    }
189
190    sc = rtems_scheduler_remove_processor(scheduler_a_id, 1);
191    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
192
193    rtems_test_assert(rtems_scheduler_get_processor() == 0);
194
195    sc = rtems_event_transient_send(task_id);
196    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
197
198    sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
199    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
200
201    sc = rtems_task_delete(task_id);
202    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
203
204    sc = rtems_scheduler_add_processor(scheduler_b_id, 1);
205    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
206  }
207}
208
209static void test(void)
210{
211  rtems_status_code sc;
212  rtems_id task_id;
213  rtems_id scheduler_id;
214  rtems_id scheduler_a_id;
215  rtems_id scheduler_b_id;
216  rtems_id scheduler_c_id;
217  rtems_task_priority prio;
218  cpu_set_t cpuset;
219  cpu_set_t first_cpu;
220  cpu_set_t second_cpu;
221  cpu_set_t all_cpus;
222  cpu_set_t online_cpus;
223  uint32_t cpu_count;
224
225  rtems_test_assert(rtems_scheduler_get_processor() == 0);
226
227  cpu_count = rtems_get_processor_count();
228  main_task_id = rtems_task_self();
229
230  CPU_ZERO(&first_cpu);
231  CPU_SET(0, &first_cpu);
232
233  CPU_ZERO(&second_cpu);
234  CPU_SET(1, &second_cpu);
235
236  CPU_FILL(&all_cpus);
237
238  CPU_ZERO(&online_cpus);
239  CPU_SET(0, &online_cpus);
240
241  if (cpu_count > 1) {
242    CPU_SET(1, &online_cpus);
243  }
244
245  sc = rtems_scheduler_ident(SCHED_A, &scheduler_a_id);
246  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
247
248  if (cpu_count > 1) {
249    sc = rtems_scheduler_ident(SCHED_B, &scheduler_b_id);
250    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
251    rtems_test_assert(scheduler_a_id != scheduler_b_id);
252  }
253
254  sc = rtems_scheduler_ident(SCHED_C, &scheduler_c_id);
255  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
256
257  sc = rtems_semaphore_create(
258    rtems_build_name('C', 'M', 'T', 'X'),
259    1,
260    RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_PRIORITY_CEILING,
261    1,
262    &cmtx_id
263  );
264  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
265
266  sc = rtems_semaphore_create(
267    rtems_build_name('I', 'M', 'T', 'X'),
268    1,
269    RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY,
270    1,
271    &imtx_id
272  );
273  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
274
275  prio = 2;
276  sc = rtems_semaphore_set_priority(cmtx_id, scheduler_a_id, prio, &prio);
277  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
278  rtems_test_assert(prio == 1);
279
280  if (cpu_count > 1) {
281    prio = 1;
282    sc = rtems_semaphore_set_priority(cmtx_id, scheduler_b_id, prio, &prio);
283    rtems_test_assert(sc == RTEMS_NOT_DEFINED);
284    rtems_test_assert(prio == 2);
285  }
286
287  CPU_ZERO(&cpuset);
288  sc = rtems_scheduler_get_processor_set(
289    scheduler_a_id,
290    sizeof(cpuset),
291    &cpuset
292  );
293  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
294  rtems_test_assert(CPU_EQUAL(&cpuset, &first_cpu));
295
296  if (cpu_count > 1) {
297    CPU_ZERO(&cpuset);
298    sc = rtems_scheduler_get_processor_set(
299      scheduler_b_id,
300      sizeof(cpuset),
301      &cpuset
302    );
303    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
304    rtems_test_assert(CPU_EQUAL(&cpuset, &second_cpu));
305  }
306
307  sc = rtems_task_create(
308    rtems_build_name('T', 'A', 'S', 'K'),
309    1,
310    RTEMS_MINIMUM_STACK_SIZE,
311    RTEMS_DEFAULT_MODES,
312    RTEMS_DEFAULT_ATTRIBUTES,
313    &task_id
314  );
315  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
316
317  sc = rtems_task_get_scheduler(task_id, &scheduler_id);
318  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
319  rtems_test_assert(scheduler_id == scheduler_a_id);
320
321  CPU_ZERO(&cpuset);
322  sc = rtems_task_get_affinity(task_id, sizeof(cpuset), &cpuset);
323  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
324  rtems_test_assert(CPU_EQUAL(&cpuset, &online_cpus));
325
326  rtems_test_assert(sched_get_priority_min(SCHED_RR) == 1);
327  rtems_test_assert(sched_get_priority_max(SCHED_RR) == 254);
328
329  sc = rtems_task_set_scheduler(task_id, scheduler_c_id, 1);
330  rtems_test_assert(sc == RTEMS_UNSATISFIED);
331
332  sc = rtems_task_set_scheduler(task_id, scheduler_c_id + 1, 1);
333  rtems_test_assert(sc == RTEMS_INVALID_ID);
334
335  if (cpu_count > 1) {
336    sc = rtems_task_set_scheduler(task_id, scheduler_b_id, 1);
337    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
338
339    sc = rtems_task_get_scheduler(task_id, &scheduler_id);
340    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
341    rtems_test_assert(scheduler_id == scheduler_b_id);
342
343    CPU_ZERO(&cpuset);
344    sc = rtems_task_get_affinity(task_id, sizeof(cpuset), &cpuset);
345    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
346    rtems_test_assert(CPU_EQUAL(&cpuset, &online_cpus));
347
348    sc = rtems_task_set_affinity(task_id, sizeof(all_cpus), &all_cpus);
349    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
350
351    sc = rtems_task_set_affinity(task_id, sizeof(first_cpu), &first_cpu);
352    rtems_test_assert(sc == RTEMS_INVALID_NUMBER);
353
354    sc = rtems_task_get_scheduler(task_id, &scheduler_id);
355    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
356    rtems_test_assert(scheduler_id == scheduler_b_id);
357
358    sc = rtems_task_set_affinity(task_id, sizeof(online_cpus), &online_cpus);
359    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
360
361    sc = rtems_task_set_affinity(task_id, sizeof(second_cpu), &second_cpu);
362    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
363
364    sc = rtems_task_set_scheduler(task_id, scheduler_a_id, 1);
365    rtems_test_assert(sc == RTEMS_UNSATISFIED);
366
367    sc = rtems_task_get_scheduler(task_id, &scheduler_id);
368    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
369    rtems_test_assert(scheduler_id == scheduler_b_id);
370
371    sc = rtems_semaphore_obtain(imtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
372    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
373
374    sc = rtems_task_set_scheduler(task_id, scheduler_b_id, 1);
375    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
376
377    sc = rtems_task_start(task_id, task, 0);
378    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
379
380    sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
381    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
382
383    /* Ensure that the other task waits for the mutex owned by us */
384    sc = rtems_task_wake_after(2);
385    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
386
387    sc = rtems_task_set_scheduler(RTEMS_SELF, scheduler_b_id, 1);
388    rtems_test_assert(sc == RTEMS_RESOURCE_IN_USE);
389
390    sc = rtems_semaphore_release(imtx_id);
391    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
392
393    sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
394    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
395  }
396
397  sc = rtems_task_delete(task_id);
398  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
399
400  sc = rtems_semaphore_delete(cmtx_id);
401  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
402
403  sc = rtems_semaphore_delete(imtx_id);
404  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
405
406  test_scheduler_add_remove_processors();
407}
408
409static void Init(rtems_task_argument arg)
410{
411  rtems_resource_snapshot snapshot;
412
413  TEST_BEGIN();
414
415  rtems_resource_snapshot_take(&snapshot);
416
417  test();
418
419  rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
420
421  TEST_END();
422  rtems_test_exit(0);
423}
424
425#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
426#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
427
428#define CONFIGURE_MAXIMUM_TASKS 2
429#define CONFIGURE_MAXIMUM_SEMAPHORES 2
430#define CONFIGURE_MAXIMUM_MRSP_SEMAPHORES 1
431
432/* Lets see when the first RTEMS system hits this limit */
433#define CONFIGURE_MAXIMUM_PROCESSORS 64
434
435#define CONFIGURE_SCHEDULER_EDF_SMP
436#define CONFIGURE_SCHEDULER_PRIORITY_SMP
437#define CONFIGURE_SCHEDULER_SIMPLE_SMP
438
439#include <rtems/scheduler.h>
440
441RTEMS_SCHEDULER_PRIORITY_SMP(a, 256);
442
443RTEMS_SCHEDULER_EDF_SMP(b, CONFIGURE_MAXIMUM_PROCESSORS);
444
445RTEMS_SCHEDULER_SIMPLE_SMP(c);
446
447#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
448  RTEMS_SCHEDULER_TABLE_PRIORITY_SMP(a, SCHED_A), \
449  RTEMS_SCHEDULER_TABLE_EDF_SMP(b, SCHED_B), \
450  RTEMS_SCHEDULER_TABLE_SIMPLE_SMP(c, SCHED_C)
451
452#define CONFIGURE_SCHEDULER_ASSIGNMENTS \
453  RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
454  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
455  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
456  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
457  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
458  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
459  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
460  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
461  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
462  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
463  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
464  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
465  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
466  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
467  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
468  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
469  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
470  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
471  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
472  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
473  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
474  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
475  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
476  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
477  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
478  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
479  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
480  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
481  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
482  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
483  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
484  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
485  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
486  RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
487
488#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
489
490#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
491
492#define CONFIGURE_INIT
493
494#include <rtems/confdefs.h>
Note: See TracBrowser for help on using the repository browser.