[PATCH 04/11] rtems: Remove task variables
Gedare Bloom
gedare at rtems.org
Wed May 4 01:55:46 UTC 2016
I feel like this needs a ringing bell. Maybe a funeral dirge.
On Tue, May 3, 2016 at 8:49 AM, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
> Update #2494.
> Update #2555.
> ---
> c/src/ada/rtems-tasks.adb | 65 ----
> c/src/ada/rtems-tasks.ads | 25 --
> 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 | 38 +--
> cpukit/rtems/src/tasks.c | 92 +-----
> 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 | 49 +--
> cpukit/score/include/rtems/score/thread.h | 34 ---
> testsuites/psxtests/psxconfig01/init.c | 29 --
> testsuites/sptests/configure.ac | 1 -
> testsuites/sptests/sp28/Makefile.am | 22 --
> testsuites/sptests/sp28/init.c | 439 ---------------------------
> testsuites/sptests/sp28/sp28.doc | 0
> testsuites/sptests/sp28/sp28.scn | 17 --
> 19 files changed, 10 insertions(+), 1192 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..2cb3157 100644
> --- a/c/src/ada/rtems-tasks.ads
> +++ b/c/src/ada/rtems-tasks.ads
> @@ -117,31 +117,6 @@ package RTEMS.Tasks is
> Result : out RTEMS.Status_Codes
> );
>
> - type Variable_Dtor is access procedure (
> - Argument : in RTEMS.Address
> - );
> - 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/cpukit/rtems/Makefile.am b/cpukit/rtems/Makefile.am
> index 6515a08..73d9e30 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..e2d5132 100644
> --- a/cpukit/rtems/mainpage.h
> +++ b/cpukit/rtems/mainpage.h
> @@ -856,40 +856,10 @@
> *
> * @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.
> + * Per task variables are no longer available. In particular the
> + * rtems_task_variable_add(), rtems_task_variable_get() and
> + * rtems_task_variable_delete() functions are neither declared nor defined
> + * anymore. Use thread local storage or POSIX Keys instead.
> *
> * @section ClassicTasksSecBuildingTaskAttributeSet Building a Task Attribute Set
> *
> diff --git a/cpukit/rtems/src/tasks.c b/cpukit/rtems/src/tasks.c
> index f18e0ab..56b2455 100644
> --- a/cpukit/rtems/src/tasks.c
> +++ b/cpukit/rtems/src/tasks.c
> @@ -18,20 +18,13 @@
> #include "config.h"
> #endif
>
> -#include <rtems/system.h>
> #include <rtems/config.h>
> #include <rtems/sysinit.h>
> #include <rtems/rtems/asrimpl.h>
> #include <rtems/rtems/eventimpl.h>
> -#include <rtems/rtems/signalimpl.h>
> -#include <rtems/rtems/status.h>
> -#include <rtems/rtems/support.h>
> -#include <rtems/rtems/modes.h>
> #include <rtems/rtems/tasksimpl.h>
> -#include <rtems/score/stack.h>
> #include <rtems/score/threadimpl.h>
> #include <rtems/score/userextimpl.h>
> -#include <rtems/score/wkspace.h>
>
> Thread_Information _RTEMS_tasks_Information;
>
> @@ -91,87 +84,12 @@ 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 },
> - { _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, /* begin */
> - NULL, /* exitted */
> - NULL, /* fatal */
> - _RTEMS_tasks_Terminate_extension /* terminate */
> + .Callouts = {
> + .thread_create = _RTEMS_tasks_Create_extension,
> + .thread_start = _RTEMS_tasks_Start_extension,
> + .thread_restart = _RTEMS_tasks_Start_extension,
> + .thread_delete = _RTEMS_tasks_Delete_extension
> }
> };
>
> 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 c32a902..b7c2f44 100644
> --- a/cpukit/sapi/include/confdefs.h
> +++ b/cpukit/sapi/include/confdefs.h
> @@ -2100,42 +2100,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
> @@ -2818,9 +2782,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
> @@ -2845,9 +2806,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
> @@ -3068,9 +3026,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) + \
> @@ -3581,7 +3537,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;
> @@ -3635,8 +3590,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
>
> /* 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 8bc12d2..8ea2db2 100644
> --- a/cpukit/score/include/rtems/score/thread.h
> +++ b/cpukit/score/include/rtems/score/thread.h
> @@ -173,35 +173,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.
> @@ -870,11 +841,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
> -
> /**
> * @brief The POSIX Keys information.
> */
> diff --git a/testsuites/psxtests/psxconfig01/init.c b/testsuites/psxtests/psxconfig01/init.c
> index 9f3c134..582fd11 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
>
> @@ -202,10 +199,6 @@ typedef struct {
>
> static char posix_name [_POSIX_PATH_MAX + 1];
>
> -#if !defined(RTEMS_SMP)
> - static void *task_var;
> -#endif
> -
> static char *get_posix_name(char a, char b, char c, int i)
> {
> posix_name [_POSIX_PATH_MAX - 4] = a;
> @@ -216,13 +209,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);
> @@ -435,21 +421,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/sptests/configure.ac b/testsuites/sptests/configure.ac
> index f5481ae..593b65b 100644
> --- a/testsuites/sptests/configure.ac
> +++ b/testsuites/sptests/configure.ac
> @@ -107,7 +107,6 @@ sp25/Makefile
> sp26/Makefile
> sp27/Makefile
> sp27a/Makefile
> -sp28/Makefile
> sp29/Makefile
> sp30/Makefile
> sp31/Makefile
> 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 ***
> --
> 1.8.4.5
>
>
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list