[PATCH] api: Remove deprecated task variables
Aun-Ali Zaidi
admin at kodeit.net
Tue Mar 1 03:46:17 UTC 2016
Task variables were a feature of RTEMS' Tasks which functioned in the same way
as POSIX keys and TLS.
In addition to their scarce usage they are not SMP safe.
updates #2494.
---
c/src/ada/rtems-tasks.adb | 65 ---
c/src/ada/rtems-tasks.ads | 20 -
.../lib/libbsp/powerpc/gen5200/include/bestcomm.h | 20 -
cpukit/librpc/src/rpc/clnt_raw.c | 4 +-
cpukit/rtems/Makefile.am | 7 -
cpukit/rtems/include/rtems/rtems/tasks.h | 46 ---
cpukit/rtems/include/rtems/rtems/tasksimpl.h | 15 -
cpukit/rtems/mainpage.h | 37 --
cpukit/rtems/src/tasks.c | 75 +---
cpukit/rtems/src/taskvariable_invoke_dtor.c | 52 ---
cpukit/rtems/src/taskvariableadd.c | 97 -----
cpukit/rtems/src/taskvariabledelete.c | 86 ----
cpukit/rtems/src/taskvariableget.c | 88 -----
cpukit/sapi/include/confdefs.h | 50 +--
cpukit/score/include/rtems/score/thread.h | 34 --
testsuites/psxtests/psxconfig01/init.c | 29 --
testsuites/psxtests/psxconfig01/psxconfig01.scn | 8 +-
testsuites/sptests/sp28/Makefile.am | 22 --
testsuites/sptests/sp28/init.c | 439 ---------------------
testsuites/sptests/sp28/sp28.doc | 0
testsuites/sptests/sp28/sp28.scn | 17 -
21 files changed, 10 insertions(+), 1201 deletions(-)
delete mode 100644 cpukit/rtems/src/taskvariable_invoke_dtor.c
delete mode 100644 cpukit/rtems/src/taskvariableadd.c
delete mode 100644 cpukit/rtems/src/taskvariabledelete.c
delete mode 100644 cpukit/rtems/src/taskvariableget.c
delete mode 100644 testsuites/sptests/sp28/Makefile.am
delete mode 100644 testsuites/sptests/sp28/init.c
delete mode 100644 testsuites/sptests/sp28/sp28.doc
delete mode 100644 testsuites/sptests/sp28/sp28.scn
diff --git a/c/src/ada/rtems-tasks.adb b/c/src/ada/rtems-tasks.adb
index b809fcf..1fc7fcd 100644
--- a/c/src/ada/rtems-tasks.adb
+++ b/c/src/ada/rtems-tasks.adb
@@ -203,71 +203,6 @@ package body RTEMS.Tasks is
end Mode;
- procedure Variable_Add
- (ID : in RTEMS.ID;
- Task_Variable : in RTEMS.Address;
- Dtor : in Variable_Dtor;
- Result : out RTEMS.Status_Codes)
- is
- function Variable_Add_Base
- (ID : RTEMS.ID;
- Task_Variable : RTEMS.Address;
- Dtor : Variable_Dtor)
- return RTEMS.Status_Codes;
- pragma Import (C, Variable_Add_Base, "rtems_task_variable_add");
- begin
-
- Result := Variable_Add_Base (ID, Task_Variable, Dtor);
-
- end Variable_Add;
-
- procedure Variable_Get
- (ID : in RTEMS.ID;
- Task_Variable : out RTEMS.Address;
- Task_Variable_Value : out RTEMS.Address;
- Result : out RTEMS.Status_Codes)
- is
- function Variable_Get_Base
- (ID : RTEMS.ID;
- Task_Variable : access RTEMS.Address;
- Task_Variable_Value : access RTEMS.Address)
- return RTEMS.Status_Codes;
- pragma Import (C, Variable_Get_Base, "rtems_task_variable_get");
- Task_Variable_Base : aliased RTEMS.Address;
- Task_Variable_Value_Base : aliased RTEMS.Address;
- begin
-
- Result :=
- Variable_Get_Base
- (ID,
- Task_Variable_Base'Access,
- Task_Variable_Value_Base'Access);
- Task_Variable := Task_Variable_Base;
- Task_Variable_Value := Task_Variable_Value_Base;
-
- end Variable_Get;
-
- procedure Variable_Delete
- (ID : in RTEMS.ID;
- Task_Variable : out RTEMS.Address;
- Result : out RTEMS.Status_Codes)
- is
- function Variable_Delete_Base
- (ID : RTEMS.ID;
- Task_Variable : access RTEMS.Address)
- return RTEMS.Status_Codes;
- pragma Import
- (C,
- Variable_Delete_Base,
- "rtems_task_variable_delete");
- Task_Variable_Base : aliased RTEMS.Address;
- begin
-
- Result := Variable_Delete_Base (ID, Task_Variable_Base'Access);
- Task_Variable := Task_Variable_Base;
-
- end Variable_Delete;
-
procedure Wake_When
(Time_Buffer : in RTEMS.Time_Of_Day;
Result : out RTEMS.Status_Codes)
diff --git a/c/src/ada/rtems-tasks.ads b/c/src/ada/rtems-tasks.ads
index c1f200b..52a87b3 100644
--- a/c/src/ada/rtems-tasks.ads
+++ b/c/src/ada/rtems-tasks.ads
@@ -122,26 +122,6 @@ package RTEMS.Tasks is
);
pragma Convention (C, Variable_Dtor);
- procedure Variable_Add (
- ID : in RTEMS.ID;
- Task_Variable : in RTEMS.Address;
- Dtor : in Variable_Dtor;
- Result : out RTEMS.Status_Codes
- );
-
- procedure Variable_Get (
- ID : in RTEMS.ID;
- Task_Variable : out RTEMS.Address;
- Task_Variable_Value : out RTEMS.Address;
- Result : out RTEMS.Status_Codes
- );
-
- procedure Variable_Delete (
- ID : in RTEMS.ID;
- Task_Variable : out RTEMS.Address;
- Result : out RTEMS.Status_Codes
- );
-
procedure Wake_When (
Time_Buffer : in RTEMS.Time_Of_Day;
Result : out RTEMS.Status_Codes
diff --git a/c/src/lib/libbsp/powerpc/gen5200/include/bestcomm.h b/c/src/lib/libbsp/powerpc/gen5200/include/bestcomm.h
index 3664655..92c410f 100644
--- a/c/src/lib/libbsp/powerpc/gen5200/include/bestcomm.h
+++ b/c/src/lib/libbsp/powerpc/gen5200/include/bestcomm.h
@@ -220,24 +220,6 @@ static inline bool bestcomm_task_is_running(const bestcomm_task *self)
return (*self->task_control_register & SDMA_TCR_EN) != 0;
}
-static inline uint32_t bestcomm_get_task_variable(const bestcomm_task *self, size_t index)
-{
- assert(index < VAR_COUNT);
- return (*self->variable_table)[index];
-}
-
-static inline volatile uint32_t *bestcomm_task_get_address_of_variable(const bestcomm_task *self, size_t index)
-{
- assert(index < VAR_COUNT);
- return &(*self->variable_table)[index];
-}
-
-static inline void bestcomm_task_set_variable(const bestcomm_task *self, size_t index, uint32_t value)
-{
- assert(index < VAR_COUNT);
- (*self->variable_table)[index] = value;
-}
-
static inline uint32_t bestcomm_task_get_increment_and_condition(const bestcomm_task *self, size_t index)
{
assert(index < INC_COUNT);
@@ -269,8 +251,6 @@ static inline void bestcomm_task_set_increment(const bestcomm_task *self, size_t
bestcomm_task_set_increment_and_condition_32(self, index, INC_INIT(0, inc));
}
-void bestcomm_task_clear_variables(const bestcomm_task *self);
-
static inline uint32_t bestcomm_task_get_opcode(const bestcomm_task *self, size_t index)
{
assert(index < self->tdt_opcode_count);
diff --git a/cpukit/librpc/src/rpc/clnt_raw.c b/cpukit/librpc/src/rpc/clnt_raw.c
index c522cec..1432cfc 100644
--- a/cpukit/librpc/src/rpc/clnt_raw.c
+++ b/cpukit/librpc/src/rpc/clnt_raw.c
@@ -67,7 +67,7 @@ struct clnt_raw_private {
} u;
u_int mcnt;
};
-#define clntraw_private (rtems_rpc_task_variables->clnt_raw_private)
+#define clntraw_private (NULL)
static enum clnt_stat clntraw_call(CLIENT *h, rpcproc_t proc, xdrproc_t xargs, void *argsp, xdrproc_t xresults, void *resultsp, struct timeval timeout);
static void clntraw_abort(void);
@@ -102,7 +102,7 @@ clntraw_create(
clp = (struct clnt_raw_private *)calloc(1, sizeof (*clp));
if (clp == 0)
return (0);
- clntraw_private = clp;
+ clp = clntraw_private;
}
/*
* pre-serialize the static part of the call msg and stash it away
diff --git a/cpukit/rtems/Makefile.am b/cpukit/rtems/Makefile.am
index c92a7c8..acca419 100644
--- a/cpukit/rtems/Makefile.am
+++ b/cpukit/rtems/Makefile.am
@@ -104,13 +104,6 @@ librtems_a_SOURCES += src/taskstart.c
librtems_a_SOURCES += src/tasksuspend.c
librtems_a_SOURCES += src/taskwakeafter.c
librtems_a_SOURCES += src/taskwakewhen.c
-if HAS_SMP
-else
-librtems_a_SOURCES += src/taskvariableadd.c
-librtems_a_SOURCES += src/taskvariabledelete.c
-librtems_a_SOURCES += src/taskvariableget.c
-librtems_a_SOURCES += src/taskvariable_invoke_dtor.c
-endif
librtems_a_SOURCES += src/schedulergetprocessorset.c
librtems_a_SOURCES += src/schedulerident.c
diff --git a/cpukit/rtems/include/rtems/rtems/tasks.h b/cpukit/rtems/include/rtems/rtems/tasks.h
index 11e2780..5f33e0b 100644
--- a/cpukit/rtems/include/rtems/rtems/tasks.h
+++ b/cpukit/rtems/include/rtems/rtems/tasks.h
@@ -372,52 +372,6 @@ rtems_status_code rtems_task_is_suspended(
rtems_id id
);
-#if !defined(RTEMS_SMP)
-/**
- * @brief RTEMS Add Task Variable
- *
- * @deprecated Task variables are deprecated.
- *
- * This directive adds a per task variable.
- *
- * @note This service is not available in SMP configurations.
- */
-rtems_status_code rtems_task_variable_add(
- rtems_id tid,
- void **ptr,
- void (*dtor)(void *)
-) RTEMS_DEPRECATED;
-
-/**
- * @brief Get a per-task variable
- *
- * @deprecated Task variables are deprecated.
- *
- * This directive gets the value of a task variable.
- *
- * @note This service is not available in SMP configurations.
- */
-rtems_status_code rtems_task_variable_get(
- rtems_id tid,
- void **ptr,
- void **result
-) RTEMS_DEPRECATED;
-
-/**
- * @brief RTEMS Delete Task Variable
- *
- * @deprecated Task variables are deprecated.
- *
- * This directive removes a per task variable.
- *
- * @note This service is not available in SMP configurations.
- */
-rtems_status_code rtems_task_variable_delete(
- rtems_id tid,
- void **ptr
-) RTEMS_DEPRECATED;
-#endif
-
#if defined(__RTEMS_HAVE_SYS_CPUSET_H__)
/**
* @brief Gets the processor affinity set of a task.
diff --git a/cpukit/rtems/include/rtems/rtems/tasksimpl.h b/cpukit/rtems/include/rtems/rtems/tasksimpl.h
index 3f8a873..82e8618 100644
--- a/cpukit/rtems/include/rtems/rtems/tasksimpl.h
+++ b/cpukit/rtems/include/rtems/rtems/tasksimpl.h
@@ -47,21 +47,6 @@ extern Thread_Information _RTEMS_tasks_Information;
*/
void _RTEMS_tasks_Initialize_user_tasks( void );
-#if !defined(RTEMS_SMP)
-/**
- * @brief RTEMS Tasks Invoke Task Variable Destructor
- *
- * @deprecated Task variables are deprecated.
- *
- * This routine invokes the optional user provided destructor on the
- * task variable and frees the memory for the task variable.
- */
-void _RTEMS_Tasks_Invoke_task_variable_dtor(
- Thread_Control *the_thread,
- rtems_task_variable_t *tvp
-) RTEMS_DEPRECATED;
-#endif
-
RTEMS_INLINE_ROUTINE Thread_Control *_RTEMS_tasks_Allocate(void)
{
_Objects_Allocator_lock();
diff --git a/cpukit/rtems/mainpage.h b/cpukit/rtems/mainpage.h
index 9801bfb..4ee8420 100644
--- a/cpukit/rtems/mainpage.h
+++ b/cpukit/rtems/mainpage.h
@@ -854,43 +854,6 @@
* the floating point unit is CPU dependent but will generally result in an
* exception condition.
*
- * @section ClassicTasksSecPerTaskVariables Per Task Variables
- *
- * Per task variables are used to support global variables whose value may be
- * unique to a task. After indicating that a variable should be treated as
- * private (i.e. per-task) the task can access and modify the variable, but the
- * modifications will not appear to other tasks, and other tasks' modifications
- * to that variable will not affect the value seen by the task. This is
- * accomplished by saving and restoring the variable's value each time a task
- * switch occurs to or from the calling task.
- *
- * The value seen by other tasks, including those which have not added the
- * variable to their set and are thus accessing the variable as a common
- * location shared among tasks, can not be affected by a task once it has added
- * a variable to its local set. Changes made to the variable by other tasks
- * will not affect the value seen by a task which has added the variable to its
- * private set.
- *
- * This feature can be used when a routine is to be spawned repeatedly as
- * several independent tasks. Although each task will have its own stack, and
- * thus separate stack variables, they will all share the same static and
- * global variables. To make a variable not shareable (i.e. a "global" variable
- * that is specific to a single task), the tasks can call
- * rtems_task_variable_add() to make a separate copy of the variable for each
- * task, but all at the same physical address.
- *
- * Task variables increase the context switch time to and from the tasks that
- * own them so it is desirable to minimize the number of task variables. One
- * efficient method is to have a single task variable that is a pointer to a
- * dynamically allocated structure containing the task's private "global" data.
- *
- * A critical point with per-task variables is that each task must separately
- * request that the same global variable is per-task private.
- *
- * @b {WARNING}: Per-task variables are fundamentally incorrect in SMP
- * systems and should not be used in SMP applications. They
- * are disabled.
- *
* @section ClassicTasksSecBuildingTaskAttributeSet Building a Task Attribute Set
*
* In general, an attribute set is built by a bitwise OR of the desired
diff --git a/cpukit/rtems/src/tasks.c b/cpukit/rtems/src/tasks.c
index 832228e..09e1243 100644
--- a/cpukit/rtems/src/tasks.c
+++ b/cpukit/rtems/src/tasks.c
@@ -91,87 +91,18 @@ static void _RTEMS_tasks_Delete_extension(
_ASR_Destroy( &api->Signal );
}
-static void _RTEMS_tasks_Terminate_extension(
- Thread_Control *executing
-)
-{
- /*
- * Free per task variable memory
- *
- * Per Task Variables are only enabled in uniprocessor configurations.
- */
- #if !defined(RTEMS_SMP)
- /*
- * We know this is deprecated and don't want a warning on every BSP built.
- */
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- do {
- rtems_task_variable_t *tvp, *next;
-
- tvp = executing->task_variables;
- executing->task_variables = NULL;
- while (tvp) {
- next = (rtems_task_variable_t *)tvp->next;
- _RTEMS_Tasks_Invoke_task_variable_dtor( executing, tvp );
- tvp = next;
- }
- } while (0);
- #pragma GCC diagnostic pop
- #endif
-}
-
-#if !defined(RTEMS_SMP)
-/*
- * _RTEMS_tasks_Switch_extension
- *
- * This extension routine is invoked at each context switch.
- *
- * @note Since this only needs to address per-task variables, it is
- * disabled entirely for SMP configurations.
- */
-static void _RTEMS_tasks_Switch_extension(
- Thread_Control *executing,
- Thread_Control *heir
-)
-{
- rtems_task_variable_t *tvp;
-
- /*
- * Per Task Variables are only enabled in uniprocessor configurations
- */
-
- tvp = executing->task_variables;
- while (tvp) {
- tvp->tval = *tvp->ptr;
- *tvp->ptr = tvp->gval;
- tvp = (rtems_task_variable_t *)tvp->next;
- }
-
- tvp = heir->task_variables;
- while (tvp) {
- tvp->gval = *tvp->ptr;
- *tvp->ptr = tvp->tval;
- tvp = (rtems_task_variable_t *)tvp->next;
- }
-}
-#define RTEMS_TASKS_SWITCH_EXTENSION _RTEMS_tasks_Switch_extension
-#else
-#define RTEMS_TASKS_SWITCH_EXTENSION NULL
-#endif
-
User_extensions_Control _RTEMS_tasks_User_extensions = {
{ NULL, NULL },
- { { NULL, NULL }, RTEMS_TASKS_SWITCH_EXTENSION },
+ { { NULL, NULL }, NULL },
{ _RTEMS_tasks_Create_extension, /* create */
_RTEMS_tasks_Start_extension, /* start */
_RTEMS_tasks_Start_extension, /* restart */
_RTEMS_tasks_Delete_extension, /* delete */
- RTEMS_TASKS_SWITCH_EXTENSION, /* switch */
+ NULL, /* switch */
NULL, /* begin */
NULL, /* exitted */
NULL, /* fatal */
- _RTEMS_tasks_Terminate_extension /* terminate */
+ NULL /* terminate */
}
};
diff --git a/cpukit/rtems/src/taskvariable_invoke_dtor.c b/cpukit/rtems/src/taskvariable_invoke_dtor.c
deleted file mode 100644
index b9213f2..0000000
--- a/cpukit/rtems/src/taskvariable_invoke_dtor.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * @file
- *
- * @brief RTEMS Tasks Invoke Task Variable Destructor
- * @ingroup ClassicTasks
- */
-
-/*
- * COPYRIGHT (c) 1989-2014.
- * On-Line Applications Research Corporation (OAR).
- *
- * 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.
- */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if !defined(RTEMS_SMP)
-#include <rtems/rtems/tasksimpl.h>
-#include <rtems/score/threadimpl.h>
-#include <rtems/score/wkspace.h>
-
-/*
- * We know this is deprecated and don't want a warning on every BSP built.
- */
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-
-void _RTEMS_Tasks_Invoke_task_variable_dtor(
- Thread_Control *the_thread,
- rtems_task_variable_t *tvp
-)
-{
- void (*dtor)(void *);
- void *value;
-
- dtor = tvp->dtor;
- if (_Thread_Get_executing() == the_thread) {
- value = *tvp->ptr;
- *tvp->ptr = tvp->gval;
- } else {
- value = tvp->tval;
- }
-
- if ( dtor )
- (*dtor)(value);
-
- _Workspace_Free(tvp);
-}
-#endif
diff --git a/cpukit/rtems/src/taskvariableadd.c b/cpukit/rtems/src/taskvariableadd.c
deleted file mode 100644
index 0fea945..0000000
--- a/cpukit/rtems/src/taskvariableadd.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * @file
- *
- * @brief RTEMS Add Task Variable
- * @ingroup ClassicTasks
- */
-
-/*
- * COPYRIGHT (c) 1989-2014.
- * On-Line Applications Research Corporation (OAR).
- *
- * 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.
- */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if !defined(RTEMS_SMP)
-#include <rtems/rtems/tasks.h>
-#include <rtems/score/threadimpl.h>
-#include <rtems/score/wkspace.h>
-#include <rtems/config.h>
-
-/*
- * We know this is deprecated and don't want a warning on every BSP built.
- */
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-
-rtems_status_code rtems_task_variable_add(
- rtems_id tid,
- void **ptr,
- void (*dtor)(void *)
-)
-{
- Thread_Control *the_thread;
- Objects_Locations location;
- rtems_task_variable_t *tvp, *new;
-
-#if defined( RTEMS_SMP )
- if ( rtems_configuration_is_smp_enabled() ) {
- return RTEMS_NOT_IMPLEMENTED;
- }
-#endif
-
- if ( !ptr )
- return RTEMS_INVALID_ADDRESS;
-
- the_thread = _Thread_Get (tid, &location);
- switch (location) {
-
- case OBJECTS_LOCAL:
- /*
- * Figure out if the variable is already in this task's list.
- */
- tvp = the_thread->task_variables;
- while (tvp) {
- if (tvp->ptr == ptr) {
- tvp->dtor = dtor;
- _Objects_Put( &the_thread->Object );
- return RTEMS_SUCCESSFUL;
- }
- tvp = (rtems_task_variable_t *)tvp->next;
- }
-
- /*
- * Now allocate memory for this task variable.
- */
- new = (rtems_task_variable_t *)
- _Workspace_Allocate(sizeof(rtems_task_variable_t));
- if (new == NULL) {
- _Objects_Put( &the_thread->Object );
- return RTEMS_NO_MEMORY;
- }
- new->gval = *ptr;
- new->ptr = ptr;
- new->dtor = dtor;
-
- new->next = (struct rtems_task_variable_tt *)the_thread->task_variables;
- the_thread->task_variables = new;
- _Objects_Put( &the_thread->Object );
- return RTEMS_SUCCESSFUL;
-
-#if defined(RTEMS_MULTIPROCESSING)
- case OBJECTS_REMOTE:
- _Thread_Dispatch();
- return RTEMS_ILLEGAL_ON_REMOTE_OBJECT;
-#endif
-
- case OBJECTS_ERROR:
- break;
- }
- return RTEMS_INVALID_ID;
-}
-#endif
diff --git a/cpukit/rtems/src/taskvariabledelete.c b/cpukit/rtems/src/taskvariabledelete.c
deleted file mode 100644
index 3f7f84e..0000000
--- a/cpukit/rtems/src/taskvariabledelete.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * @file
- *
- * @brief RTEMS Delete Task Variable
- * @ingroup ClassicTasks
- */
-
-/*
- * COPYRIGHT (c) 1989-2014.
- * On-Line Applications Research Corporation (OAR).
- *
- * 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.
- */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if !defined(RTEMS_SMP)
-#include <rtems/rtems/tasksimpl.h>
-#include <rtems/score/threadimpl.h>
-#include <rtems/score/wkspace.h>
-#include <rtems/config.h>
-
-/*
- * We know this is deprecated and don't want a warning on every BSP built.
- */
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-
-rtems_status_code rtems_task_variable_delete(
- rtems_id tid,
- void **ptr
-)
-{
- Thread_Control *the_thread;
- Objects_Locations location;
- rtems_task_variable_t *tvp, *prev;
-
-#if defined( RTEMS_SMP )
- if ( rtems_configuration_is_smp_enabled() ) {
- return RTEMS_NOT_IMPLEMENTED;
- }
-#endif
-
- if ( !ptr )
- return RTEMS_INVALID_ADDRESS;
-
- prev = NULL;
-
- the_thread = _Thread_Get (tid, &location);
- switch (location) {
-
- case OBJECTS_LOCAL:
- tvp = the_thread->task_variables;
- while (tvp) {
- if (tvp->ptr == ptr) {
- if (prev)
- prev->next = tvp->next;
- else
- the_thread->task_variables = (rtems_task_variable_t *)tvp->next;
-
- _RTEMS_Tasks_Invoke_task_variable_dtor( the_thread, tvp );
- _Objects_Put( &the_thread->Object );
- return RTEMS_SUCCESSFUL;
- }
- prev = tvp;
- tvp = (rtems_task_variable_t *)tvp->next;
- }
- _Objects_Put( &the_thread->Object );
- return RTEMS_INVALID_ADDRESS;
-
-#if defined(RTEMS_MULTIPROCESSING)
- case OBJECTS_REMOTE:
- _Thread_Dispatch();
- return RTEMS_ILLEGAL_ON_REMOTE_OBJECT;
-#endif
-
- case OBJECTS_ERROR:
- break;
- }
-
- return RTEMS_INVALID_ID;
-}
-#endif
diff --git a/cpukit/rtems/src/taskvariableget.c b/cpukit/rtems/src/taskvariableget.c
deleted file mode 100644
index 3b9cd25..0000000
--- a/cpukit/rtems/src/taskvariableget.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * @file
- *
- * @brief Get a per-task variable
- * @ingroup ClassicTasks Tasks
- */
-
-/*
- * COPYRIGHT (c) 1989-2014.
- * On-Line Applications Research Corporation (OAR).
- *
- * 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.
- */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if !defined(RTEMS_SMP)
-#include <rtems/rtems/tasksimpl.h>
-#include <rtems/score/threadimpl.h>
-#include <rtems/score/wkspace.h>
-#include <rtems/config.h>
-
-/*
- * We know this is deprecated and don't want a warning on every BSP built.
- */
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-
-rtems_status_code rtems_task_variable_get(
- rtems_id tid,
- void **ptr,
- void **result
-)
-{
- Thread_Control *the_thread;
- Objects_Locations location;
- rtems_task_variable_t *tvp;
-
-#if defined( RTEMS_SMP )
- if ( rtems_configuration_is_smp_enabled() ) {
- return RTEMS_NOT_IMPLEMENTED;
- }
-#endif
-
- if ( !ptr )
- return RTEMS_INVALID_ADDRESS;
-
- if ( !result )
- return RTEMS_INVALID_ADDRESS;
-
- the_thread = _Thread_Get (tid, &location);
- switch (location) {
-
- case OBJECTS_LOCAL:
- /*
- * Figure out if the variable is in this task's list.
- */
- tvp = the_thread->task_variables;
- while (tvp) {
- if (tvp->ptr == ptr) {
- /*
- * Should this return the current (i.e not the
- * saved) value if `tid' is the current task?
- */
- *result = tvp->tval;
- _Objects_Put( &the_thread->Object );
- return RTEMS_SUCCESSFUL;
- }
- tvp = (rtems_task_variable_t *)tvp->next;
- }
- _Objects_Put( &the_thread->Object );
- return RTEMS_INVALID_ADDRESS;
-
-#if defined(RTEMS_MULTIPROCESSING)
- case OBJECTS_REMOTE:
- _Thread_Dispatch();
- return RTEMS_ILLEGAL_ON_REMOTE_OBJECT;
-#endif
-
- case OBJECTS_ERROR:
- break;
- }
- return RTEMS_INVALID_ID;
-}
-#endif
diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
index ee2558c..8afe9a0 100644
--- a/cpukit/sapi/include/confdefs.h
+++ b/cpukit/sapi/include/confdefs.h
@@ -2067,42 +2067,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
#define CONFIGURE_TASKS \
(CONFIGURE_MAXIMUM_TASKS + CONFIGURE_LIBBLOCK_TASKS)
- /**
- * This macro calculates the memory required for task variables.
- *
- * @deprecated Task variables are deprecated.
- *
- * Each task variable is individually allocated from the Workspace.
- * Hence, we do the multiplication on the configured size.
- *
- * @note Per-task variables are disabled for SMP configurations.
- */
- #if defined(RTEMS_SMP)
- #ifdef CONFIGURE_MAXIMUM_TASK_VARIABLES
- #warning "Per-Task Variables are deprecated and will be removed."
- #error "Per-Task Variables are not safe for SMP systems and disabled."
- #endif
- #define CONFIGURE_MAXIMUM_TASK_VARIABLES 0
- #define CONFIGURE_MEMORY_FOR_TASK_VARIABLES(_task_variables) 0
- #else
- #ifndef CONFIGURE_MAXIMUM_TASK_VARIABLES
- /** This macro specifies the maximum number of task variables. */
- #define CONFIGURE_MAXIMUM_TASK_VARIABLES 0
- /**
- * This macro is calculated to specify the memory required for task
- * variables.
- *
- * This is an internal parameter.
- */
- #define CONFIGURE_MEMORY_FOR_TASK_VARIABLES(_task_variables) 0
- #else
- #warning "Per-Task Variables are deprecated and will be removed."
- #define CONFIGURE_MEMORY_FOR_TASK_VARIABLES(_task_variables) \
- (_task_variables) * \
- _Configure_From_workspace(sizeof(rtems_task_variable_t))
- #endif
- #endif
-
#ifndef CONFIGURE_MAXIMUM_TIMERS
/** This specifies the maximum number of Classic API timers. */
#define CONFIGURE_MAXIMUM_TIMERS 0
@@ -2805,9 +2769,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
#define CONFIGURE_MAXIMUM_GOROUTINES 400
#endif
- #define CONFIGURE_GOROUTINES_TASK_VARIABLES \
- (2 * CONFIGURE_MAXIMUM_GOROUTINES)
-
#ifndef CONFIGURE_MAXIMUM_GO_CHANNELS
#define CONFIGURE_MAXIMUM_GO_CHANNELS 500
#endif
@@ -2832,9 +2793,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
/** This specifies the maximum number of Go co-routines. */
#define CONFIGURE_MAXIMUM_GOROUTINES 0
- /** This specifies the maximum number of Go per-task variables required. */
- #define CONFIGURE_GOROUTINES_TASK_VARIABLES 0
-
/** This specifies the maximum number of Go channels required. */
#define CONFIGURE_MAXIMUM_GO_CHANNELS 0
#endif
@@ -3054,9 +3012,7 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
* Classic API as configured.
*/
#define CONFIGURE_MEMORY_FOR_CLASSIC \
- (CONFIGURE_MEMORY_FOR_TASK_VARIABLES(CONFIGURE_MAXIMUM_TASK_VARIABLES + \
- CONFIGURE_GOROUTINES_TASK_VARIABLES) + \
- CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS + \
+ (CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS + \
CONFIGURE_TIMER_FOR_SHARED_MEMORY_DRIVER ) + \
CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_SEMAPHORES) + \
CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(CONFIGURE_MAXIMUM_MESSAGE_QUEUES) + \
@@ -3553,7 +3509,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
/* Classic API Pieces */
uint32_t CLASSIC_TASKS;
- uint32_t TASK_VARIABLES;
uint32_t TIMERS;
uint32_t SEMAPHORES;
uint32_t MESSAGE_QUEUES;
@@ -3606,9 +3561,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
CONFIGURE_MEMORY_FOR_IDLE_TASK,
/* Classic API Pieces */
- CONFIGURE_MEMORY_FOR_TASKS(CONFIGURE_MAXIMUM_TASKS, 0),
- CONFIGURE_MEMORY_FOR_TASK_VARIABLES(CONFIGURE_MAXIMUM_TASK_VARIABLES +
- CONFIGURE_GOROUTINES_TASK_VARIABLES),
CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS),
CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_SEMAPHORES),
CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(CONFIGURE_MAXIMUM_MESSAGE_QUEUES),
diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h
index 69caef1..04293bb 100644
--- a/cpukit/score/include/rtems/score/thread.h
+++ b/cpukit/score/include/rtems/score/thread.h
@@ -178,35 +178,6 @@ typedef enum {
*/
typedef void (*Thread_CPU_budget_algorithm_callout )( Thread_Control * );
-#if !defined(RTEMS_SMP)
-/**
- * @brief Forward reference to the per task variable structure..
- *
- * Forward reference to the per task variable structure.
- */
-struct rtems_task_variable_tt;
-
-/**
- * @brief Internal structure used to manager per task variables.
- *
- * This is the internal structure used to manager per Task Variables.
- */
-typedef struct {
- /** This field points to the next per task variable for this task. */
- struct rtems_task_variable_tt *next;
- /** This field points to the physical memory location of this per
- * task variable.
- */
- void **ptr;
- /** This field is to the global value for this per task variable. */
- void *gval;
- /** This field is to this thread's value for this per task variable. */
- void *tval;
- /** This field points to the destructor for this per task variable. */
- void (*dtor)(void *);
-} rtems_task_variable_t;
-#endif
-
/**
* The following structure contains the information which defines
* the starting state of a thread.
@@ -829,11 +800,6 @@ struct _Thread_Control {
/** This array contains the API extension area pointers. */
void *API_Extensions[ THREAD_API_LAST + 1 ];
-#if !defined(RTEMS_SMP)
- /** This field points to the set of per task variables. */
- rtems_task_variable_t *task_variables;
-#endif
-
/**
* This is the thread key value chain's control, which is used
* to track all key value for specific thread, and when thread
diff --git a/testsuites/psxtests/psxconfig01/init.c b/testsuites/psxtests/psxconfig01/init.c
index b4c555e..6fdb709 100644
--- a/testsuites/psxtests/psxconfig01/init.c
+++ b/testsuites/psxtests/psxconfig01/init.c
@@ -57,9 +57,6 @@ const char rtems_test_name[] = "PSXCONFIG 1";
#define CONFIGURE_MAXIMUM_REGIONS 43
#define CONFIGURE_MAXIMUM_SEMAPHORES 47
#define CONFIGURE_MAXIMUM_TASKS 11
-#if !defined(RTEMS_SMP)
- #define CONFIGURE_MAXIMUM_TASK_VARIABLES 13
-#endif
#define CONFIGURE_MAXIMUM_TIMERS 59
#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 17
@@ -203,10 +200,6 @@ typedef struct {
static char posix_name [NAME_MAX];
-#if !defined(RTEMS_SMP)
- static void *task_var;
-#endif
-
static char *get_posix_name(char a, char b, char c, int i)
{
posix_name [NAME_MAX - 5] = a;
@@ -217,13 +210,6 @@ 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 RTEMS_UNUSED)
-{
- /* Do nothing */
-}
-#endif
-
static void *posix_thread(void *arg RTEMS_UNUSED)
{
rtems_test_assert(0);
@@ -436,21 +422,6 @@ static rtems_task Init(rtems_task_argument argument)
);
#endif
-#if !defined(RTEMS_SMP)
-#ifdef CONFIGURE_MAXIMUM_TASK_VARIABLES
- /*
- * We know this is deprecated and don't want a warning on every BSP built.
- */
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- 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");
- }
- #pragma GCC diagnostic pop
-#endif
-#endif
-
#ifdef CONFIGURE_MAXIMUM_TIMERS
for (i = 0; i < CONFIGURE_MAXIMUM_TIMERS; ++i) {
sc = rtems_timer_create(name, &id);
diff --git a/testsuites/psxtests/psxconfig01/psxconfig01.scn b/testsuites/psxtests/psxconfig01/psxconfig01.scn
index c2aeee5..ff5d0cc 100644
--- a/testsuites/psxtests/psxconfig01/psxconfig01.scn
+++ b/testsuites/psxtests/psxconfig01/psxconfig01.scn
@@ -1,7 +1,7 @@
*** POSIX TEST CONFIG 01 ***
-used blocks = 61, largest used block = 8264, used space = 78792
-free blocks = 1, largest free block = 115944, free space = 115944
+used blocks = 52, largest used block = 16024, used space = 76888
+free blocks = 1, largest free block = 92984, free space = 92984
object creation done
-used blocks = 280, largest used block = 8264, used space = 193704
-free blocks = 1, largest free block = 1032, free space = 1032
+used blocks = 136, largest used block = 16024, used space = 169696
+free blocks = 1, largest free block = 176, free space = 176
*** END OF POSIX TEST CONFIG 01 ***
diff --git a/testsuites/sptests/sp28/Makefile.am b/testsuites/sptests/sp28/Makefile.am
deleted file mode 100644
index d02ff97..0000000
--- a/testsuites/sptests/sp28/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-
-rtems_tests_PROGRAMS = sp28
-sp28_SOURCES = init.c
-
-dist_rtems_tests_DATA = sp28.scn
-dist_rtems_tests_DATA += sp28.doc
-
-include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP at .cfg
-include $(top_srcdir)/../automake/compile.am
-include $(top_srcdir)/../automake/leaf.am
-
-
-AM_CPPFLAGS += -I$(top_srcdir)/../support/include
-
-LINK_OBJS = $(sp28_OBJECTS)
-LINK_LIBS = $(sp28_LDLIBS)
-
-sp28$(EXEEXT): $(sp28_OBJECTS) $(sp28_DEPENDENCIES)
- @rm -f sp28$(EXEEXT)
- $(make-exe)
-
-include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/sptests/sp28/init.c b/testsuites/sptests/sp28/init.c
deleted file mode 100644
index 4798bff..0000000
--- a/testsuites/sptests/sp28/init.c
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
- * COPYRIGHT (c) 1989-2012.
- * On-Line Applications Research Corporation (OAR).
- *
- * 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 <tmacros.h>
-
-#include <bsp.h>
-#include <rtems/error.h>
-#include <stdio.h>
-
-const char rtems_test_name[] = "SP 28";
-
-/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument argument);
-rtems_task subtask(rtems_task_argument arg);
-rtems_task Task_variable_deleter(rtems_task_argument ignored);
-void starttask(int arg);
-void test_errors(void);
-void test_dtor(void *pointer);
-void test_multiple_taskvars(void);
-void test_out_of_memory(void);
-rtems_task Other_Task(rtems_task_argument ignored);
-void test_delete_from_other_task(void);
-void test_delete_as_side_effect(void);
-
-volatile void *taskvar;
-volatile int nRunning;
-volatile int nDeleted;
-
-rtems_task
-subtask (rtems_task_argument arg)
-{
- uintptr_t localvar = arg;
- int i;
- rtems_status_code sc;
-
- nRunning++;
- while (nRunning != 3)
- rtems_task_wake_after (0);
-
- sc = rtems_task_variable_add(RTEMS_SELF, (void **)&taskvar, NULL);
- directive_failed( sc, "task variable add" );
-
- taskvar = (void *)localvar;
- while (localvar < 1000) {
- localvar++;
- rtems_task_wake_after (0);
- taskvar = (void *)((uintptr_t)taskvar + 1);
- rtems_task_wake_after (0);
- if ((uintptr_t)taskvar != localvar) {
- printf(
- "Task:%" PRIdrtems_task_argument " taskvar:%" PRIuPTR
- " localvar:%" PRIuPTR "\n",
- arg,
- (uintptr_t)taskvar,
- localvar
- );
- rtems_task_suspend (RTEMS_SELF);
- }
- }
- sc = rtems_task_variable_delete(RTEMS_SELF, (void **)&taskvar);
- nDeleted++;
- directive_failed( sc, "task variable delete" );
-
- if ((uintptr_t)taskvar == localvar) {
- printf(
- "Task:%" PRIdrtems_task_argument " deleted taskvar:%" PRIuPTR
- " localvar:%" PRIuPTR "\n",
- arg,
- (uintptr_t)taskvar,
- localvar
- );
- nRunning--;
- rtems_task_suspend (RTEMS_SELF);
- }
- while (nDeleted != 3)
- rtems_task_wake_after (0);
- for (i = 0 ; i < 1000 ; i++) {
- taskvar = (void *)(localvar = 100 * arg);
- rtems_task_wake_after(0);
- if (nRunning <= 1)
- break;
- if ((uintptr_t)taskvar == localvar) {
- printf(
- "Task:%" PRIdrtems_task_argument " taskvar:%" PRIuPTR
- " localvar:%" PRIuPTR "\n",
- arg,
- (uintptr_t)taskvar,
- localvar
- );
- nRunning--;
- rtems_task_suspend(RTEMS_SELF);
- }
- }
- nRunning--;
- while (nRunning)
- rtems_task_wake_after(0);
-
- TEST_END();
- rtems_test_exit(0);
-}
-
-void
-starttask (int arg)
-{
- rtems_id tid;
- rtems_status_code sc;
-
- sc = rtems_task_create(rtems_build_name ('S', 'R', 'V', arg + 'A'),
- RTEMS_MAXIMUM_PRIORITY - 1u,
- RTEMS_MINIMUM_STACK_SIZE,
- RTEMS_PREEMPT|RTEMS_NO_TIMESLICE|RTEMS_NO_ASR|RTEMS_INTERRUPT_LEVEL(0),
- RTEMS_NO_FLOATING_POINT|RTEMS_LOCAL,
- &tid
- );
- directive_failed( sc, "task create" );
-
- sc = rtems_task_start(tid, subtask, arg);
- directive_failed( sc, "task start" );
-}
-
-volatile void *taskvar1;
-volatile void *taskvar2;
-volatile void *taskvar3;
-
-void test_errors(void)
-{
- rtems_status_code sc;
- void *value;
-
- /*
- * task variable add error status codes
- */
- puts( "task variable add - NULL pointer - RTEMS_INVALID_ADDRESS" );
- sc = rtems_task_variable_add(RTEMS_SELF, NULL, NULL );
- fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "add NULL pointer" );
-
- /*
- * task variable get error status codes
- */
- puts( "task variable get - bad Id - RTEMS_INVALID_ID" );
- sc = rtems_task_variable_get(
- rtems_task_self() + 10,
- (void **)&taskvar1,
- &value
- );
- fatal_directive_status( sc, RTEMS_INVALID_ID, "bad Id" );
-
- puts( "task variable get - NULL pointer - RTEMS_INVALID_ADDRESS" );
- sc = rtems_task_variable_get(RTEMS_SELF, NULL, &value );
- fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "get NULL pointer" );
-
- puts( "task variable get - bad result - RTEMS_INVALID_ADDRESS" );
- sc = rtems_task_variable_get(RTEMS_SELF, (void **)&taskvar1, NULL);
- fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "get bad result" );
-
- puts( "task variable get - bad pointer - RTEMS_INVALID_ADDRESS" );
- sc = rtems_task_variable_get(RTEMS_SELF, (void **)&taskvar1, &value);
- fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "get bad pointer" );
-
- /*
- * task variable delete error status codes
- */
- puts( "task variable delete - bad Id - RTEMS_INVALID_ID" );
- sc = rtems_task_variable_delete( rtems_task_self() + 10, (void **)&taskvar1 );
- fatal_directive_status( sc, RTEMS_INVALID_ID, "bad Id" );
-
- puts( "task variable delete - NULL pointer - RTEMS_INVALID_ADDRESS" );
- sc = rtems_task_variable_delete(RTEMS_SELF, NULL);
- fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "delete NULL pointer" );
-
- puts( "task variable delete - bad pointer - RTEMS_INVALID_ADDRESS" );
- sc = rtems_task_variable_delete(RTEMS_SELF, (void **)&taskvar1);
- fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "delete bad pointer" );
-
-}
-
-volatile uint32_t test_dtor_ran;
-
-void test_dtor(void *pointer)
-{
- test_dtor_ran++;
-}
-
-
-void test_multiple_taskvars(void)
-{
- rtems_status_code sc;
- void *value;
-
- test_dtor_ran = 0;
-
- /*
- * Add multiple task variables and add each twice to
- * verify that behavior is OK
- */
- puts( "task variable add - bad Id - RTEMS_INVALID_ID" );
- sc = rtems_task_variable_add(
- rtems_task_self() + 10,
- (void **)&taskvar1,
- NULL
- );
- fatal_directive_status( sc, RTEMS_INVALID_ID, "bad Id" );
-
- puts( "Adding multiple task variables" );
- sc = rtems_task_variable_add(RTEMS_SELF, (void **)&taskvar1, NULL);
- directive_failed( sc, "add multiple #1" );
-
- sc = rtems_task_variable_add(RTEMS_SELF, (void **)&taskvar1, test_dtor);
- directive_failed( sc, "add multiple #2" );
-
- sc = rtems_task_variable_add(RTEMS_SELF, (void **)&taskvar2, test_dtor);
- directive_failed( sc, "add multiple #3" );
-
- sc = rtems_task_variable_add(RTEMS_SELF, (void **)&taskvar2, NULL);
- directive_failed( sc, "add multiple #4" );
-
- sc = rtems_task_variable_add(RTEMS_SELF, (void **)&taskvar3, NULL);
- directive_failed( sc, "add multiple #5" );
-
- sc = rtems_task_variable_add(RTEMS_SELF, (void **)&taskvar3, test_dtor);
- directive_failed( sc, "add multiple #6" );
-
- /*
- * Obtain task variables in various spots on the chain
- */
- puts( "Obtaining multiple task variables" );
- sc = rtems_task_variable_get( RTEMS_SELF, (void **)&taskvar3, &value );
- directive_failed( sc, "get multiple #1" );
- sc = rtems_task_variable_get( RTEMS_SELF, (void **)&taskvar2, &value );
- directive_failed( sc, "get multiple #2" );
- sc = rtems_task_variable_get( RTEMS_SELF, (void **)&taskvar1, &value );
- directive_failed( sc, "get multiple #2" );
-
- /*
- * Delete task variables in various spots on the chain
- */
-
- /* to trip the destructors */
- taskvar1 = (void *)1;
- taskvar2 = (void *)2;
- taskvar3 = (void *)3;
-
- puts( "Deleting multiple task variables" );
- sc = rtems_task_variable_delete(RTEMS_SELF, (void **)&taskvar2);
- directive_failed( sc, "delete multiple #1" );
- sc = rtems_task_variable_delete(RTEMS_SELF, (void **)&taskvar3);
- directive_failed( sc, "delete multiple #2" );
- sc = rtems_task_variable_delete(RTEMS_SELF, (void **)&taskvar1);
- directive_failed( sc, "delete multiple #3" );
-
- if ( test_dtor_ran != 2 ) {
- printf(
- "Test dtor ran %" PRIu32 " times not 2 times as expected\n",
- test_dtor_ran
- );
- rtems_test_exit(0);
- }
-}
-
-#define MAX_VARS 4096
-
-void *Pointers[MAX_VARS];
-
-void test_out_of_memory(void)
-{
- int i;
- int max;
- rtems_status_code sc;
- int ran_out = 0;
- void **base;
-
- base = Pointers;
-
- for (i=0 ; i<MAX_VARS ; i++ ) {
- sc = rtems_task_variable_add(RTEMS_SELF, &base[i], NULL);
- if ( sc == RTEMS_NO_MEMORY ) {
- puts( "task_variable_add - returns NO_MEMORY" );
- max = i;
- ran_out = 1;
- break;
- }
- directive_failed( sc, "add loop until out of memory" );
- }
-
- if ( !ran_out ) {
- puts( "ERROR!!! did not run out of memory adding task variables!" );
- rtems_test_exit(0);
- }
-
- for (i=0 ; i<max ; i++ ) {
- sc = rtems_task_variable_delete(RTEMS_SELF, &base[i]);
- directive_failed( sc, "delete loop until out of memory" );
- }
-}
-
-rtems_id main_task;
-rtems_id other_task;
-
-rtems_task Other_Task(rtems_task_argument ignored)
-{
- rtems_status_code sc;
-
- puts( "Deleting task variables in another task" );
- sc = rtems_task_variable_delete(main_task, (void **)&taskvar1);
- directive_failed( sc, "delete loop for other task" );
-
- (void) rtems_task_delete( RTEMS_SELF );
-}
-
-void test_delete_from_other_task(void)
-{
- rtems_status_code sc;
-
- test_dtor_ran = 0;
-
- sc = rtems_task_ident( RTEMS_SELF, 0, &main_task );
- directive_failed( sc, "task ident" );
-
- sc = rtems_task_variable_add(RTEMS_SELF, (void **)&taskvar1, test_dtor);
- directive_failed( sc, "add for other task case" );
-
- sc = rtems_task_create(rtems_build_name ('O', 'T', 'H', 'R'),
- RTEMS_MAXIMUM_PRIORITY - 1u,
- RTEMS_MINIMUM_STACK_SIZE,
- RTEMS_PREEMPT|RTEMS_NO_TIMESLICE|RTEMS_NO_ASR|RTEMS_INTERRUPT_LEVEL(0),
- RTEMS_NO_FLOATING_POINT|RTEMS_LOCAL,
- &other_task
- );
- directive_failed( sc, "task create other" );
-
- sc = rtems_task_start(other_task, Other_Task, 0);
- directive_failed( sc, "task start other" );
-
- rtems_task_wake_after( 100 );
-
- if ( test_dtor_ran != 1 ) {
- printf(
- "Test dtor ran %" PRIu32 " times not 1 times as expected\n",
- test_dtor_ran
- );
- rtems_test_exit(0);
- }
-}
-
-/*
- * Task which adds task variables just to delete them
- */
-rtems_task Task_variable_deleter(rtems_task_argument ignored)
-{
- rtems_status_code sc;
-
- puts( "Adding multiple task variables to delete implicitly" );
- sc = rtems_task_variable_add(RTEMS_SELF, (void **)&taskvar1, test_dtor);
- directive_failed( sc, "add multiple for delete #1" );
-
- sc = rtems_task_variable_add(RTEMS_SELF, (void **)&taskvar2, NULL);
- directive_failed( sc, "add multiple for delete #2" );
-
- sc = rtems_task_variable_add(RTEMS_SELF, (void **)&taskvar3, test_dtor);
- directive_failed( sc, "add multiple for delete #3" );
-
- (void) rtems_task_delete( RTEMS_SELF );
-}
-
-void test_delete_as_side_effect(void)
-{
- rtems_status_code sc;
- rtems_id deleter_task;
-
- test_dtor_ran = 0;
-
- sc = rtems_task_create(rtems_build_name ('O', 'T', 'H', 'R'),
- RTEMS_MAXIMUM_PRIORITY - 1u,
- RTEMS_MINIMUM_STACK_SIZE,
- RTEMS_PREEMPT|RTEMS_NO_TIMESLICE|RTEMS_NO_ASR|RTEMS_INTERRUPT_LEVEL(0),
- RTEMS_NO_FLOATING_POINT|RTEMS_LOCAL,
- &deleter_task
- );
- directive_failed( sc, "task create deleter" );
-
- sc = rtems_task_start(deleter_task, Task_variable_deleter, 0);
- directive_failed( sc, "task start deleter" );
-
- rtems_task_wake_after( 100 );
-
- if ( test_dtor_ran != 2 ) {
- printf(
- "Test dtor ran %" PRIu32 " times not 2 times as expected\n",
- test_dtor_ran
- );
- rtems_test_exit(0);
- }
-}
-
-rtems_task Init (rtems_task_argument ignored)
-{
- TEST_BEGIN();
-
- test_errors();
-
- test_multiple_taskvars();
-
- test_delete_as_side_effect();
-
- test_delete_from_other_task();
-
- starttask (1);
- starttask (2);
- starttask (3);
-
- test_out_of_memory();
-
- rtems_task_suspend (RTEMS_SELF);
-}
-
-#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
-#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 2
-
-#define CONFIGURE_MAXIMUM_TASKS 4
-#define CONFIGURE_MAXIMUM_TASK_VARIABLES (4)
-#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
-
-#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_MICROSECONDS_PER_TICK 10000
-
-#define CONFIGURE_INIT
-#include <rtems/confdefs.h>
-
diff --git a/testsuites/sptests/sp28/sp28.doc b/testsuites/sptests/sp28/sp28.doc
deleted file mode 100644
index e69de29..0000000
diff --git a/testsuites/sptests/sp28/sp28.scn b/testsuites/sptests/sp28/sp28.scn
deleted file mode 100644
index 654ae97..0000000
--- a/testsuites/sptests/sp28/sp28.scn
+++ /dev/null
@@ -1,17 +0,0 @@
-*** START OF TEST 28 ***
-task variable add - NULL pointer - RTEMS_INVALID_ADDRESS
-task variable get - bad Id - RTEMS_INVALID_ID
-task variable get - NULL pointer - RTEMS_INVALID_ADDRESS
-task variable get - bad result - RTEMS_INVALID_ADDRESS
-task variable get - bad pointer - RTEMS_INVALID_ADDRESS
-task variable delete - bad Id - RTEMS_INVALID_ID
-task variable delete - NULL pointer - RTEMS_INVALID_ADDRESS
-task variable delete - bad pointer - RTEMS_INVALID_ADDRESS
-task variable add - bad Id - RTEMS_INVALID_ID
-Adding multiple task variables
-Obtaining multiple task variables
-Deleting multiple task variables
-Adding multiple task variables to delete implicitly
-Deleting task variables in another task
-task_variable_add - returns NO_MEMORY
-*** END OF TEST 28 ***
--
2.7.2
More information about the devel
mailing list