forked from Imagelibrary/rtems
Disable per task variables when SMP is enabled
Per task variables are inherently unsafe in SMP systems. This patch disables them from the build and adds warnings in the appropriate documentation and configuration sections.
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2014. On-Line Applications Research Corporation (OAR).
|
||||
* Copyright (c) 2011-2012 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
@@ -51,7 +52,9 @@ const char rtems_test_name[] = "PSXCONFIG 1";
|
||||
#define CONFIGURE_MAXIMUM_REGIONS 43
|
||||
#define CONFIGURE_MAXIMUM_SEMAPHORES 47
|
||||
#define CONFIGURE_MAXIMUM_TASKS 11
|
||||
#define CONFIGURE_MAXIMUM_TASK_VARIABLES 13
|
||||
#if !defined(RTEMS_SMP)
|
||||
#define CONFIGURE_MAXIMUM_TASK_VARIABLES 13
|
||||
#endif
|
||||
#define CONFIGURE_MAXIMUM_TIMERS 59
|
||||
#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 17
|
||||
|
||||
@@ -196,7 +199,9 @@ typedef struct {
|
||||
|
||||
static char posix_name [NAME_MAX];
|
||||
|
||||
static void *task_var;
|
||||
#if !defined(RTEMS_SMP)
|
||||
static void *task_var;
|
||||
#endif
|
||||
|
||||
static char *get_posix_name(char a, char b, char c, int i)
|
||||
{
|
||||
@@ -208,10 +213,12 @@ static char *get_posix_name(char a, char b, char c, int i)
|
||||
return posix_name;
|
||||
}
|
||||
|
||||
#if !defined(RTEMS_SMP)
|
||||
static void task_var_dtor(void *var __attribute__((unused)))
|
||||
{
|
||||
/* Do nothing */
|
||||
}
|
||||
#endif
|
||||
|
||||
static void *posix_thread(void *arg __attribute__((unused)))
|
||||
{
|
||||
@@ -403,12 +410,14 @@ static rtems_task Init(rtems_task_argument argument)
|
||||
);
|
||||
#endif
|
||||
|
||||
#if !defined(RTEMS_SMP)
|
||||
#ifdef CONFIGURE_MAXIMUM_TASK_VARIABLES
|
||||
for (i = 0; i < CONFIGURE_MAXIMUM_TASK_VARIABLES; ++i) {
|
||||
sc = rtems_task_variable_add(RTEMS_SELF, &task_var, task_var_dtor);
|
||||
directive_failed(sc, "rtems_task_variable_add");
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIGURE_MAXIMUM_TIMERS
|
||||
for (i = 0; i < CONFIGURE_MAXIMUM_TIMERS; ++i) {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014 On-Line Applications Research Corporation (OAR).
|
||||
* Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
@@ -28,15 +29,6 @@ static void test(void)
|
||||
|
||||
rtems_test_assert(rtems_configuration_is_smp_enabled());
|
||||
|
||||
sc = rtems_task_variable_add(RTEMS_SELF, NULL, NULL);
|
||||
rtems_test_assert(sc == RTEMS_NOT_IMPLEMENTED);
|
||||
|
||||
sc = rtems_task_variable_delete(RTEMS_SELF, NULL);
|
||||
rtems_test_assert(sc == RTEMS_NOT_IMPLEMENTED);
|
||||
|
||||
sc = rtems_task_variable_get(RTEMS_SELF, NULL, NULL);
|
||||
rtems_test_assert(sc == RTEMS_NOT_IMPLEMENTED);
|
||||
|
||||
sc = rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &mode);
|
||||
rtems_test_assert(sc == RTEMS_NOT_IMPLEMENTED);
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ ACLOCAL_AMFLAGS = -I ../aclocal
|
||||
SUBDIRS = \
|
||||
sp01 sp02 sp03 sp04 sp05 sp06 sp07 sp08 \
|
||||
sp10 sp11 sp12 sp13 sp14 sp15 sp16 sp17 sp18 sp19 \
|
||||
sp20 sp21 sp22 sp23 sp24 sp25 sp26 sp27 sp27a sp28 sp29 \
|
||||
sp20 sp21 sp22 sp23 sp24 sp25 sp26 sp27 sp27a \
|
||||
sp30 sp31 sp32 sp33 sp34 sp35 sp37 sp38 sp39 \
|
||||
sp40 sp41 sp42 sp43 sp44 sp45 sp46 sp47 sp48 sp49 \
|
||||
sp50 sp51 sp52 sp53 sp54 sp55 sp56 sp57 sp58 sp59 \
|
||||
@@ -33,6 +33,11 @@ SUBDIRS = \
|
||||
spsignal_err01 spport_err01 spmsgq_err01 spmsgq_err02 spsem_err01 \
|
||||
spsem_err02 sptask_err01 spevent_err03 sptask_err03 sptask_err02 \
|
||||
sptask_err04 spclock_err01
|
||||
if HAS_SMP
|
||||
else
|
||||
SUBDIRS += sp29
|
||||
endif
|
||||
SUBDIRS += spprofiling01
|
||||
SUBDIRS += spfatal28
|
||||
SUBDIRS += spthreadlife01
|
||||
SUBDIRS += spprofiling01
|
||||
|
||||
@@ -34,6 +34,10 @@ AC_CHECK_SIZEOF([time_t])
|
||||
AC_CHECK_HEADERS([sys/cpuset.h])
|
||||
AM_CONDITIONAL(HAS_CPUSET,test x"${ac_cv_header_sys_cpuset_h}" = x"yes")
|
||||
|
||||
# Some tests should not be built/run in SMP configurations
|
||||
RTEMS_CHECK_CPUOPTS([RTEMS_SMP])
|
||||
AM_CONDITIONAL(HAS_SMP,test "$rtems_cv_RTEMS_SMP" = "yes")
|
||||
|
||||
# Explicitly list all Makefiles here
|
||||
AC_CONFIG_FILES([Makefile
|
||||
spfatal28/Makefile
|
||||
|
||||
Reference in New Issue
Block a user