summaryrefslogtreecommitdiffstats
path: root/testsuites/smptests/smpfatal07/init.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-05-23 15:32:32 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-05-26 08:56:44 +0200
commitd134adeba3abd0fef8ed2046cc5bf7f877d7a77c (patch)
tree4ad0cb5a60e30d196c21654213b953685ca5d3ce /testsuites/smptests/smpfatal07/init.c
parentbsp/gdbarmsim: Change syscall functions to not clash with RTEMS functions. (diff)
downloadrtems-d134adeba3abd0fef8ed2046cc5bf7f877d7a77c.tar.bz2
score: Fix race condition in SMP startup
Do not use the Per_CPU_Control::started in _SMP_Start_multitasking_on_secondary_processor() since this field may be not up to date when a secondary processor reads it. Use the read-only scheduler assignment instead. Add a new fatal error SMP_FATAL_MULTITASKING_START_ON_INVALID_PROCESSOR. This prevents out-of-bounds access. It is currently not possible to test these fatal errors. One option would be to fake values of the _CPU_SMP_Get_current_processor(), but unfortunately this function is inline on some architectures.
Diffstat (limited to 'testsuites/smptests/smpfatal07/init.c')
-rw-r--r--testsuites/smptests/smpfatal07/init.c75
1 files changed, 0 insertions, 75 deletions
diff --git a/testsuites/smptests/smpfatal07/init.c b/testsuites/smptests/smpfatal07/init.c
deleted file mode 100644
index 126274209d..0000000000
--- a/testsuites/smptests/smpfatal07/init.c
+++ /dev/null
@@ -1,75 +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 <rtems/score/threadimpl.h>
-
-#include <assert.h>
-#include <stdlib.h>
-
-const char rtems_test_name[] = "SMPFATAL 7";
-
-static void Init(rtems_task_argument arg)
-{
- Per_CPU_Control *cpu_self;
-
- _Thread_Disable_dispatch();
- cpu_self = _Per_CPU_Get();
- cpu_self->started = false;
- _SMP_Start_multitasking_on_secondary_processor();
-
- 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_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR
- ) {
- 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_MAXIMUM_TASKS 1
-
-#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-
-#define CONFIGURE_INIT
-
-#include <rtems/confdefs.h>