forked from Imagelibrary/rtems
score: SMP_FATAL_SCHEDULER_WITHOUT_PROCESSORS
Avoid the SMP_FATAL_SCHEDULER_WITHOUT_PROCESSORS fatal error and make it a run-time error in rtems_scheduler_ident() and _Scheduler_Get_by_id().
This commit is contained in:
@@ -16,7 +16,6 @@ SUBDIRS += smpfatal02
|
||||
SUBDIRS += smpfatal03
|
||||
SUBDIRS += smpfatal04
|
||||
SUBDIRS += smpfatal05
|
||||
SUBDIRS += smpfatal06
|
||||
SUBDIRS += smpfatal07
|
||||
SUBDIRS += smpfatal08
|
||||
SUBDIRS += smpload01
|
||||
|
||||
@@ -71,7 +71,6 @@ smpfatal02/Makefile
|
||||
smpfatal03/Makefile
|
||||
smpfatal04/Makefile
|
||||
smpfatal05/Makefile
|
||||
smpfatal06/Makefile
|
||||
smpfatal07/Makefile
|
||||
smpfatal08/Makefile
|
||||
smpload01/Makefile
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
rtems_tests_PROGRAMS = smpfatal06
|
||||
smpfatal06_SOURCES = init.c
|
||||
|
||||
dist_rtems_tests_DATA = smpfatal06.scn smpfatal06.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 = $(smpfatal06_OBJECTS)
|
||||
LINK_LIBS = $(smpfatal06_LDLIBS)
|
||||
|
||||
smpfatal06$(EXEEXT): $(smpfatal06_OBJECTS) $(smpfatal06_DEPENDENCIES)
|
||||
@rm -f smpfatal06$(EXEEXT)
|
||||
$(make-exe)
|
||||
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
@@ -1,81 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2014 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Dornierstr. 4
|
||||
* 82178 Puchheim
|
||||
* Germany
|
||||
* <rtems@embedded-brains.de>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/test.h>
|
||||
#include <rtems/score/smpimpl.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
const char rtems_test_name[] = "SMPFATAL 6";
|
||||
|
||||
static void Init(rtems_task_argument arg)
|
||||
{
|
||||
assert(0);
|
||||
}
|
||||
|
||||
static void fatal_extension(
|
||||
rtems_fatal_source source,
|
||||
bool is_internal,
|
||||
rtems_fatal_code code
|
||||
)
|
||||
{
|
||||
rtems_test_begink();
|
||||
|
||||
if (
|
||||
source == RTEMS_FATAL_SOURCE_SMP
|
||||
&& !is_internal
|
||||
&& code == SMP_FATAL_SCHEDULER_WITHOUT_PROCESSORS
|
||||
) {
|
||||
rtems_test_endk();
|
||||
}
|
||||
}
|
||||
|
||||
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
|
||||
#define CONFIGURE_INITIAL_EXTENSIONS \
|
||||
{ .fatal = fatal_extension }, \
|
||||
RTEMS_TEST_INITIAL_EXTENSION
|
||||
|
||||
#define CONFIGURE_SMP_APPLICATION
|
||||
|
||||
#define CONFIGURE_SMP_MAXIMUM_PROCESSORS 1
|
||||
|
||||
#define CONFIGURE_SCHEDULER_SIMPLE_SMP
|
||||
|
||||
#include <rtems/scheduler.h>
|
||||
|
||||
RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(a);
|
||||
RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(b);
|
||||
|
||||
#define CONFIGURE_SCHEDULER_CONTROLS \
|
||||
RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(a, rtems_build_name('S', 'I', 'M', 'P')), \
|
||||
RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(b, rtems_build_name('S', 'I', 'M', 'P'))
|
||||
|
||||
#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
|
||||
RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY)
|
||||
|
||||
#define CONFIGURE_MAXIMUM_TASKS 1
|
||||
|
||||
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
||||
|
||||
#define CONFIGURE_INIT
|
||||
|
||||
#include <rtems/confdefs.h>
|
||||
@@ -1,11 +0,0 @@
|
||||
This file describes the directives and concepts tested by this test set.
|
||||
|
||||
test set name: smpfatal06
|
||||
|
||||
directives:
|
||||
|
||||
- _SMP_Handler_initialize()
|
||||
|
||||
concepts:
|
||||
|
||||
- Ensure that a scheduler without processor leads to a fatal error.
|
||||
@@ -1,2 +0,0 @@
|
||||
*** TEST SMPFATAL 6 ***
|
||||
*** END OF TEST SMPFATAL 6 ***
|
||||
@@ -25,12 +25,12 @@ const char rtems_test_name[] = "SMPSCHEDULER 2";
|
||||
|
||||
#if defined(__RTEMS_HAVE_SYS_CPUSET_H__)
|
||||
|
||||
#define CPU_COUNT 2
|
||||
|
||||
#define SCHED_A rtems_build_name(' ', ' ', ' ', 'A')
|
||||
|
||||
#define SCHED_B rtems_build_name(' ', ' ', ' ', 'B')
|
||||
|
||||
#define SCHED_C rtems_build_name(' ', ' ', ' ', 'C')
|
||||
|
||||
static rtems_id main_task_id;
|
||||
|
||||
static void task(rtems_task_argument arg)
|
||||
@@ -56,6 +56,7 @@ static void test(void)
|
||||
rtems_id scheduler_id;
|
||||
rtems_id scheduler_a_id;
|
||||
rtems_id scheduler_b_id;
|
||||
rtems_id scheduler_c_id;
|
||||
cpu_set_t cpuset;
|
||||
cpu_set_t first_cpu;
|
||||
cpu_set_t second_cpu;
|
||||
@@ -82,6 +83,9 @@ static void test(void)
|
||||
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
|
||||
rtems_test_assert(scheduler_a_id != scheduler_b_id);
|
||||
|
||||
sc = rtems_scheduler_ident(SCHED_C, &scheduler_c_id);
|
||||
rtems_test_assert(sc == RTEMS_UNSATISFIED);
|
||||
|
||||
CPU_ZERO(&cpuset);
|
||||
sc = rtems_scheduler_get_processor_set(
|
||||
scheduler_a_id,
|
||||
@@ -122,6 +126,9 @@ static void test(void)
|
||||
sc = rtems_task_set_scheduler(task_id, scheduler_b_id);
|
||||
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
|
||||
|
||||
sc = rtems_task_set_scheduler(task_id, scheduler_b_id + 1);
|
||||
rtems_test_assert(sc == RTEMS_INVALID_ID);
|
||||
|
||||
sc = rtems_task_get_scheduler(task_id, &scheduler_id);
|
||||
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
|
||||
rtems_test_assert(scheduler_id == scheduler_b_id);
|
||||
@@ -191,11 +198,13 @@ static void Init(rtems_task_argument arg)
|
||||
|
||||
#define CONFIGURE_SMP_APPLICATION
|
||||
|
||||
#define CONFIGURE_SMP_MAXIMUM_PROCESSORS CPU_COUNT
|
||||
/* Lets see when the first RTEMS system hits this limit */
|
||||
#define CONFIGURE_SMP_MAXIMUM_PROCESSORS 64
|
||||
|
||||
#define CONFIGURE_MAXIMUM_PRIORITY 255
|
||||
|
||||
#define CONFIGURE_SCHEDULER_PRIORITY_SMP
|
||||
#define CONFIGURE_SCHEDULER_SIMPLE_SMP
|
||||
|
||||
#include <rtems/scheduler.h>
|
||||
|
||||
@@ -203,15 +212,50 @@ RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(a, CONFIGURE_MAXIMUM_PRIORITY + 1);
|
||||
|
||||
RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(b, CONFIGURE_MAXIMUM_PRIORITY + 1);
|
||||
|
||||
RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(c);
|
||||
|
||||
#define CONFIGURE_SCHEDULER_CONTROLS \
|
||||
RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(a, SCHED_A), \
|
||||
RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(b, SCHED_B)
|
||||
RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(b, SCHED_B), \
|
||||
RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(c, SCHED_C)
|
||||
|
||||
#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
|
||||
RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
|
||||
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY)
|
||||
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
||||
RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
|
||||
|
||||
#define CONFIGURE_MAXIMUM_TASKS CPU_COUNT
|
||||
#define CONFIGURE_MAXIMUM_TASKS 2
|
||||
|
||||
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
|
||||
|
||||
|
||||
Reference in New Issue
Block a user