Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:43

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG
0005  *
0006  * Redistribution and use in source and binary forms, with or without
0007  * modification, are permitted provided that the following conditions
0008  * are met:
0009  * 1. Redistributions of source code must retain the above copyright
0010  *    notice, this list of conditions and the following disclaimer.
0011  * 2. Redistributions in binary form must reproduce the above copyright
0012  *    notice, this list of conditions and the following disclaimer in the
0013  *    documentation and/or other materials provided with the distribution.
0014  *
0015  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0016  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0017  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0018  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0019  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0020  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0021  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0022  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0023  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0024  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0025  * POSSIBILITY OF SUCH DAMAGE.
0026  */
0027 
0028 #ifdef HAVE_CONFIG_H
0029 #include "config.h"
0030 #endif
0031 
0032 #include <sched.h>
0033 #include <limits.h>
0034 
0035 #include <rtems.h>
0036 #include <rtems/libcsupport.h>
0037 
0038 #include "tmacros.h"
0039 
0040 const char rtems_test_name[] = "SMPSCHEDULER 2";
0041 
0042 #define SCHED_A rtems_build_name(' ', ' ', ' ', 'A')
0043 
0044 #define SCHED_B rtems_build_name(' ', ' ', ' ', 'B')
0045 
0046 #define SCHED_C rtems_build_name(' ', ' ', ' ', 'C')
0047 
0048 static rtems_id main_task_id;
0049 
0050 static rtems_id cmtx_id;
0051 
0052 static rtems_id imtx_id;
0053 
0054 static volatile bool ready;
0055 
0056 static void task(rtems_task_argument arg)
0057 {
0058   rtems_status_code sc;
0059 
0060   (void) arg;
0061 
0062   rtems_test_assert(rtems_scheduler_get_processor() == 1);
0063   rtems_test_assert(sched_get_priority_min(SCHED_RR) == 1);
0064   rtems_test_assert(sched_get_priority_max(SCHED_RR) == INT_MAX - 1);
0065 
0066   sc = rtems_semaphore_obtain(cmtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
0067   rtems_test_assert(sc == RTEMS_NOT_DEFINED);
0068 
0069   sc = rtems_event_transient_send(main_task_id);
0070   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0071 
0072   sc = rtems_semaphore_obtain(imtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
0073   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0074 
0075   sc = rtems_semaphore_release(imtx_id);
0076   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0077 
0078   sc = rtems_event_transient_send(main_task_id);
0079   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0080 
0081   while (1) {
0082     /* Do nothing */
0083   }
0084 }
0085 
0086 static void sticky_task(rtems_task_argument arg)
0087 {
0088   rtems_status_code sc;
0089   rtems_id mtx_id;
0090 
0091   (void) arg;
0092 
0093   rtems_test_assert(rtems_scheduler_get_processor() == 0);
0094 
0095   sc = rtems_semaphore_create(
0096     rtems_build_name(' ', 'M', 'T', 'X'),
0097     1,
0098     RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
0099       RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
0100     2,
0101     &mtx_id
0102   );
0103   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0104 
0105   sc = rtems_semaphore_obtain(mtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
0106   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0107 
0108   ready = true;
0109 
0110   sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
0111   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0112 
0113   sc = rtems_semaphore_release(mtx_id);
0114   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0115 
0116   sc = rtems_semaphore_delete(mtx_id);
0117   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0118 
0119   sc = rtems_event_transient_send(main_task_id);
0120   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0121 
0122   while (1) {
0123     /* Do nothing */
0124   }
0125 }
0126 
0127 static void test_scheduler_add_remove_processors(void)
0128 {
0129   rtems_status_code sc;
0130   rtems_id scheduler_a_id;
0131   rtems_id scheduler_c_id;
0132 
0133   sc = rtems_scheduler_ident(SCHED_A, &scheduler_a_id);
0134   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0135 
0136   sc = rtems_scheduler_ident(SCHED_C, &scheduler_c_id);
0137   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0138 
0139   sc = rtems_scheduler_add_processor(scheduler_c_id, 62);
0140   rtems_test_assert(sc == RTEMS_NOT_CONFIGURED);
0141 
0142   sc = rtems_scheduler_add_processor(scheduler_c_id, 63);
0143   rtems_test_assert(sc == RTEMS_INCORRECT_STATE);
0144 
0145   sc = rtems_scheduler_remove_processor(scheduler_c_id, 62);
0146   rtems_test_assert(sc == RTEMS_INVALID_NUMBER);
0147 
0148   sc = rtems_scheduler_remove_processor(scheduler_a_id, 0);
0149   rtems_test_assert(sc == RTEMS_RESOURCE_IN_USE);
0150 
0151   if (rtems_scheduler_get_processor_maximum() > 1) {
0152     rtems_id scheduler_id;
0153     rtems_id scheduler_b_id;
0154     rtems_id task_id;
0155     cpu_set_t first_cpu;
0156 
0157     sc = rtems_scheduler_ident(SCHED_B, &scheduler_b_id);
0158     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0159 
0160     sc = rtems_scheduler_remove_processor(scheduler_b_id, 1);
0161     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0162 
0163     sc = rtems_scheduler_add_processor(scheduler_a_id, 1);
0164     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0165 
0166     rtems_test_assert(rtems_scheduler_get_processor() == 0);
0167 
0168     sc = rtems_scheduler_remove_processor(scheduler_a_id, 0);
0169     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0170 
0171     rtems_test_assert(rtems_scheduler_get_processor() == 1);
0172 
0173     CPU_ZERO(&first_cpu);
0174     CPU_SET(0, &first_cpu);
0175     sc = rtems_scheduler_ident_by_processor_set(
0176       sizeof(first_cpu),
0177       &first_cpu,
0178       &scheduler_id
0179     );
0180     rtems_test_assert(sc == RTEMS_INCORRECT_STATE);
0181 
0182     sc = rtems_scheduler_add_processor(scheduler_a_id, 0);
0183     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0184 
0185     rtems_test_assert(rtems_scheduler_get_processor() == 1);
0186 
0187     sc = rtems_task_create(
0188       rtems_build_name('T', 'A', 'S', 'K'),
0189       2,
0190       RTEMS_MINIMUM_STACK_SIZE,
0191       RTEMS_DEFAULT_MODES,
0192       RTEMS_DEFAULT_ATTRIBUTES,
0193       &task_id
0194     );
0195     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0196 
0197     sc = rtems_task_start(task_id, sticky_task, 0);
0198     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0199 
0200     while (!ready) {
0201       /* Wait */
0202     }
0203 
0204     sc = rtems_scheduler_remove_processor(scheduler_a_id, 1);
0205     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0206 
0207     rtems_test_assert(rtems_scheduler_get_processor() == 0);
0208 
0209     sc = rtems_event_transient_send(task_id);
0210     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0211 
0212     sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
0213     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0214 
0215     sc = rtems_task_delete(task_id);
0216     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0217 
0218     sc = rtems_scheduler_add_processor(scheduler_b_id, 1);
0219     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0220   }
0221 }
0222 
0223 static void test(void)
0224 {
0225   rtems_status_code sc;
0226   rtems_id task_id;
0227   rtems_id scheduler_id;
0228   rtems_id scheduler_a_id;
0229   rtems_id scheduler_b_id;
0230   rtems_id scheduler_c_id;
0231   rtems_task_priority prio;
0232   cpu_set_t cpuset;
0233   cpu_set_t first_cpu;
0234   cpu_set_t second_cpu;
0235   cpu_set_t all_cpus;
0236   cpu_set_t online_cpus;
0237   uint32_t cpu_count;
0238 
0239   rtems_test_assert(rtems_scheduler_get_processor() == 0);
0240 
0241   cpu_count = rtems_scheduler_get_processor_maximum();
0242   main_task_id = rtems_task_self();
0243 
0244   CPU_ZERO(&first_cpu);
0245   CPU_SET(0, &first_cpu);
0246 
0247   CPU_ZERO(&second_cpu);
0248   CPU_SET(1, &second_cpu);
0249 
0250   CPU_FILL(&all_cpus);
0251 
0252   CPU_ZERO(&online_cpus);
0253   CPU_SET(0, &online_cpus);
0254 
0255   if (cpu_count > 1) {
0256     CPU_SET(1, &online_cpus);
0257   }
0258 
0259   sc = rtems_scheduler_ident(SCHED_A, &scheduler_a_id);
0260   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0261 
0262   if (cpu_count > 1) {
0263     sc = rtems_scheduler_ident(SCHED_B, &scheduler_b_id);
0264     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0265     rtems_test_assert(scheduler_a_id != scheduler_b_id);
0266   }
0267 
0268   sc = rtems_scheduler_ident(SCHED_C, &scheduler_c_id);
0269   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0270 
0271   sc = rtems_semaphore_create(
0272     rtems_build_name('C', 'M', 'T', 'X'),
0273     1,
0274     RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_PRIORITY_CEILING,
0275     1,
0276     &cmtx_id
0277   );
0278   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0279 
0280   sc = rtems_semaphore_create(
0281     rtems_build_name('I', 'M', 'T', 'X'),
0282     1,
0283     RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY,
0284     1,
0285     &imtx_id
0286   );
0287   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0288 
0289   prio = 2;
0290   sc = rtems_semaphore_set_priority(cmtx_id, scheduler_a_id, prio, &prio);
0291   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0292   rtems_test_assert(prio == 1);
0293 
0294   if (cpu_count > 1) {
0295     prio = 1;
0296     sc = rtems_semaphore_set_priority(cmtx_id, scheduler_b_id, prio, &prio);
0297     rtems_test_assert(sc == RTEMS_NOT_DEFINED);
0298     rtems_test_assert(prio == 1);
0299   }
0300 
0301   CPU_ZERO(&cpuset);
0302   sc = rtems_scheduler_get_processor_set(
0303     scheduler_a_id,
0304     sizeof(cpuset),
0305     &cpuset
0306   );
0307   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0308   rtems_test_assert(CPU_EQUAL(&cpuset, &first_cpu));
0309 
0310   if (cpu_count > 1) {
0311     CPU_ZERO(&cpuset);
0312     sc = rtems_scheduler_get_processor_set(
0313       scheduler_b_id,
0314       sizeof(cpuset),
0315       &cpuset
0316     );
0317     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0318     rtems_test_assert(CPU_EQUAL(&cpuset, &second_cpu));
0319   }
0320 
0321   sc = rtems_task_create(
0322     rtems_build_name('T', 'A', 'S', 'K'),
0323     1,
0324     RTEMS_MINIMUM_STACK_SIZE,
0325     RTEMS_DEFAULT_MODES,
0326     RTEMS_DEFAULT_ATTRIBUTES,
0327     &task_id
0328   );
0329   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0330 
0331   sc = rtems_task_get_scheduler(task_id, &scheduler_id);
0332   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0333   rtems_test_assert(scheduler_id == scheduler_a_id);
0334 
0335   CPU_ZERO(&cpuset);
0336   sc = rtems_task_get_affinity(task_id, sizeof(cpuset), &cpuset);
0337   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0338   rtems_test_assert(CPU_EQUAL(&cpuset, &online_cpus));
0339 
0340   rtems_test_assert(sched_get_priority_min(SCHED_RR) == 1);
0341   rtems_test_assert(sched_get_priority_max(SCHED_RR) == 254);
0342 
0343   sc = rtems_task_set_scheduler(task_id, scheduler_c_id, 1);
0344   rtems_test_assert(sc == RTEMS_UNSATISFIED);
0345 
0346   sc = rtems_task_set_scheduler(task_id, scheduler_c_id + 1, 1);
0347   rtems_test_assert(sc == RTEMS_INVALID_ID);
0348 
0349   if (cpu_count > 1) {
0350     sc = rtems_task_set_scheduler(task_id, scheduler_b_id, 1);
0351     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0352 
0353     sc = rtems_task_get_scheduler(task_id, &scheduler_id);
0354     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0355     rtems_test_assert(scheduler_id == scheduler_b_id);
0356 
0357     CPU_ZERO(&cpuset);
0358     sc = rtems_task_get_affinity(task_id, sizeof(cpuset), &cpuset);
0359     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0360     rtems_test_assert(CPU_EQUAL(&cpuset, &online_cpus));
0361 
0362     sc = rtems_task_set_affinity(task_id, sizeof(all_cpus), &all_cpus);
0363     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0364 
0365     sc = rtems_task_set_affinity(task_id, sizeof(first_cpu), &first_cpu);
0366     rtems_test_assert(sc == RTEMS_INVALID_NUMBER);
0367 
0368     sc = rtems_task_get_scheduler(task_id, &scheduler_id);
0369     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0370     rtems_test_assert(scheduler_id == scheduler_b_id);
0371 
0372     sc = rtems_task_set_affinity(task_id, sizeof(online_cpus), &online_cpus);
0373     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0374 
0375     sc = rtems_task_set_affinity(task_id, sizeof(second_cpu), &second_cpu);
0376     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0377 
0378     sc = rtems_task_set_scheduler(task_id, scheduler_a_id, 1);
0379     rtems_test_assert(sc == RTEMS_UNSATISFIED);
0380 
0381     sc = rtems_task_get_scheduler(task_id, &scheduler_id);
0382     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0383     rtems_test_assert(scheduler_id == scheduler_b_id);
0384 
0385     sc = rtems_semaphore_obtain(imtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
0386     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0387 
0388     sc = rtems_task_set_scheduler(task_id, scheduler_b_id, 1);
0389     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0390 
0391     sc = rtems_task_start(task_id, task, 0);
0392     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0393 
0394     sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
0395     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0396 
0397     /* Ensure that the other task waits for the mutex owned by us */
0398     sc = rtems_task_wake_after(2);
0399     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0400 
0401     sc = rtems_task_set_scheduler(RTEMS_SELF, scheduler_b_id, 1);
0402     rtems_test_assert(sc == RTEMS_RESOURCE_IN_USE);
0403 
0404     sc = rtems_semaphore_release(imtx_id);
0405     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0406 
0407     sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
0408     rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0409   }
0410 
0411   sc = rtems_task_delete(task_id);
0412   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0413 
0414   sc = rtems_semaphore_delete(cmtx_id);
0415   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0416 
0417   sc = rtems_semaphore_delete(imtx_id);
0418   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0419 
0420   test_scheduler_add_remove_processors();
0421 }
0422 
0423 static void Init(rtems_task_argument arg)
0424 {
0425   rtems_resource_snapshot snapshot;
0426 
0427   TEST_BEGIN();
0428 
0429   rtems_resource_snapshot_take(&snapshot);
0430 
0431   test();
0432 
0433   rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
0434 
0435   TEST_END();
0436   rtems_test_exit(0);
0437 }
0438 
0439 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
0440 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0441 
0442 #define CONFIGURE_MAXIMUM_TASKS 2
0443 #define CONFIGURE_MAXIMUM_SEMAPHORES 2
0444 
0445 /* Lets see when the first RTEMS system hits this limit */
0446 #define CONFIGURE_MAXIMUM_PROCESSORS 64
0447 
0448 #define CONFIGURE_SCHEDULER_EDF_SMP
0449 #define CONFIGURE_SCHEDULER_PRIORITY_SMP
0450 #define CONFIGURE_SCHEDULER_SIMPLE_SMP
0451 
0452 #include <rtems/scheduler.h>
0453 
0454 RTEMS_SCHEDULER_PRIORITY_SMP(a, 256);
0455 
0456 RTEMS_SCHEDULER_EDF_SMP(b);
0457 
0458 RTEMS_SCHEDULER_SIMPLE_SMP(c);
0459 
0460 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
0461   RTEMS_SCHEDULER_TABLE_PRIORITY_SMP(a, SCHED_A), \
0462   RTEMS_SCHEDULER_TABLE_EDF_SMP(b, SCHED_B), \
0463   RTEMS_SCHEDULER_TABLE_SIMPLE_SMP(c, SCHED_C)
0464 
0465 #define CONFIGURE_SCHEDULER_ASSIGNMENTS \
0466   RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
0467   RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
0468   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0469   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0470   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0471   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0472   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0473   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0474   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0475   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0476   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0477   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0478   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0479   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0480   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0481   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0482   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0483   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0484   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0485   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0486   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0487   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0488   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0489   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0490   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0491   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0492   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0493   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0494   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0495   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0496   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0497   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0498   RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
0499   RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
0500 
0501 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0502 
0503 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0504 
0505 #define CONFIGURE_INIT
0506 
0507 #include <rtems/confdefs.h>