summaryrefslogtreecommitdiffstats
path: root/testsuites/smptests/smpfatal09/init.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-12-18 08:45:06 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-12-18 08:50:08 +0100
commit7c19e50bdd3b6ae234b171992f2e109d4f804cda (patch)
treec967305bf67491cb855cf19077139ad836113d8e /testsuites/smptests/smpfatal09/init.c
parentconfig: Remove CONFIGURE_CONFDEFS_DEBUG (diff)
downloadrtems-7c19e50bdd3b6ae234b171992f2e109d4f804cda.tar.bz2
score: Fix per-CPU data allocation
Allocate the per-CPU data for secondary processors directly from the heap areas before heap initialization and not via _Workspace_Allocate_aligned(). This avoids dependency on the workspace allocator. It fixes also a problem on some platforms (e.g. QorIQ) where at this early point in the system initialization the top of the RAM is used by low-level startup code on secondary processors (boot pages). Update #3507.
Diffstat (limited to '')
-rw-r--r--testsuites/smptests/smpfatal09/init.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/testsuites/smptests/smpfatal09/init.c b/testsuites/smptests/smpfatal09/init.c
new file mode 100644
index 0000000000..ecbb54d586
--- /dev/null
+++ b/testsuites/smptests/smpfatal09/init.c
@@ -0,0 +1,87 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2018 embedded brains GmbH
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+#include <rtems/score/percpudata.h>
+#include <rtems/score/wkspace.h>
+
+#include <tmacros.h>
+
+static PER_CPU_DATA_ITEM(int, i) = 123;
+
+const char rtems_test_name[] = "SMPFATAL 9";
+
+static void Init( rtems_task_argument arg )
+{
+ Heap_Area area = { .begin = NULL, .size = 0 };
+ int i;
+
+ TEST_BEGIN();
+ i = *PER_CPU_DATA_GET( _Per_CPU_Get_snapshot(), int, i );
+ RTEMS_OBFUSCATE_VARIABLE( i );
+ rtems_test_assert( i == 123 );
+
+ _Workspace_Handler_initialization( &area, 1, NULL );
+ rtems_test_assert( 0 );
+}
+
+static void fatal_extension(
+ rtems_fatal_source source,
+ bool always_set_to_false,
+ rtems_fatal_code code
+)
+{
+ if (
+ source == INTERNAL_ERROR_CORE
+ && !always_set_to_false
+ && code == INTERNAL_ERROR_NO_MEMORY_FOR_PER_CPU_DATA
+ ) {
+ TEST_END();
+ }
+}
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+#define CONFIGURE_INITIAL_EXTENSIONS \
+ { .fatal = fatal_extension }, \
+ RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_MAXIMUM_PROCESSORS 2
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>