Changeset 5aa5560 in rtems


Ignore:
Timestamp:
11/12/99 14:38:19 (24 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
3136f5c9
Parents:
3c49a508
Message:

Added per task variables based on patch from Eric Norum <eric@…>.
After being submitted, this support was rewritten to be inside the
executive rather than layered on top of it using an extension.

Files:
4 added
3 edited

Legend:

Unmodified
Added
Removed
  • c/src/exec/rtems/src/Makefile.in

    r3c49a508 r5aa5560  
    2525TASK_C_PIECES = tasks taskcreate taskdelete taskgetnote taskident \
    2626    taskinitusers taskissuspended taskmode taskrestart taskresume tasksetnote \
    27     tasksetpriority taskstart tasksuspend taskwakeafter taskwakewhen
     27    tasksetpriority taskstart tasksuspend taskwakeafter taskwakewhen \
     28    taskvariableadd taskvariabledelete
    2829
    2930RATEMON_C_PIECES = ratemon ratemoncancel ratemoncreate ratemondelete \
  • c/src/exec/rtems/src/tasks.c

    r3c49a508 r5aa5560  
    5757  api->pending_events = EVENT_SETS_NONE_PENDING;
    5858  _ASR_Initialize( &api->Signal );
     59  api->task_variables = NULL;
    5960  return TRUE;
    6061}
     
    9495)
    9596{
    96   (void) _Workspace_Free( deleted->API_Extensions[ THREAD_API_RTEMS ] );
     97  RTEMS_API_Control            *api;
     98  struct rtems_task_variable_t *tvp, *next;
     99
     100  api = executing->API_Extensions[ THREAD_API_RTEMS ];
     101
     102  /*
     103   *  Free per task variable memory
     104   */
     105
     106  tvp = api->task_variables;
     107  api->task_variables = NULL;
     108  while (tvp) {
     109    next = tvp->next;
     110    _Workspace_Free( tvp );
     111    tvp = next;
     112  }
     113
     114  /*
     115   *  Free API specific memory
     116   */
     117
     118  (void) _Workspace_Free( api );
    97119 
    98120  deleted->API_Extensions[ THREAD_API_RTEMS ] = NULL;
     
    107129 
    108130void _RTEMS_tasks_Switch_extension(
     131  Thread_Control *executing,
     132  Thread_Control *heir
     133)
     134{
     135  RTEMS_API_Control            *api;
     136  struct rtems_task_variable_t *tvp;
     137
     138  /*
     139   *  Per Task Variables
     140   */
     141
     142
     143  api = executing->API_Extensions[ THREAD_API_RTEMS ];
     144  tvp = api->task_variables;
     145  while (tvp) {
     146    tvp->var = *tvp->ptr;
     147    tvp = tvp->next;
     148  }
     149
     150  api = heir->API_Extensions[ THREAD_API_RTEMS ];
     151  tvp = api->task_variables;
     152  while (tvp) {
     153    *tvp->ptr = tvp->var;
     154    tvp = tvp->next;
     155  }
     156}
     157
     158/*PAGE
     159 *
     160 *  _RTEMS_tasks_Post_switch_extension
     161 *
     162 *  This extension routine is invoked at each context switch.
     163 */
     164 
     165void _RTEMS_tasks_Post_switch_extension(
    109166  Thread_Control *executing
    110167)
     
    117174
    118175  api = executing->API_Extensions[ THREAD_API_RTEMS ];
     176
     177  /*
     178   *  Signal Processing
     179   */
     180
    119181  asr = &api->Signal;
    120182 
     
    142204  NULL,                                     /* predriver */
    143205  _RTEMS_tasks_Initialize_user_tasks,       /* postdriver */
    144   _RTEMS_tasks_Switch_extension             /* post switch */
     206  _RTEMS_tasks_Post_switch_extension        /* post switch */
    145207};
    146208
     
    151213    _RTEMS_tasks_Start_extension,             /* restart */
    152214    _RTEMS_tasks_Delete_extension,            /* delete */
    153     NULL,                                     /* switch */
     215    _RTEMS_tasks_Switch_extension,            /* switch */
    154216    NULL,                                     /* begin */
    155217    NULL,                                     /* exitted */
  • cpukit/rtems/src/tasks.c

    r3c49a508 r5aa5560  
    5757  api->pending_events = EVENT_SETS_NONE_PENDING;
    5858  _ASR_Initialize( &api->Signal );
     59  api->task_variables = NULL;
    5960  return TRUE;
    6061}
     
    9495)
    9596{
    96   (void) _Workspace_Free( deleted->API_Extensions[ THREAD_API_RTEMS ] );
     97  RTEMS_API_Control            *api;
     98  struct rtems_task_variable_t *tvp, *next;
     99
     100  api = executing->API_Extensions[ THREAD_API_RTEMS ];
     101
     102  /*
     103   *  Free per task variable memory
     104   */
     105
     106  tvp = api->task_variables;
     107  api->task_variables = NULL;
     108  while (tvp) {
     109    next = tvp->next;
     110    _Workspace_Free( tvp );
     111    tvp = next;
     112  }
     113
     114  /*
     115   *  Free API specific memory
     116   */
     117
     118  (void) _Workspace_Free( api );
    97119 
    98120  deleted->API_Extensions[ THREAD_API_RTEMS ] = NULL;
     
    107129 
    108130void _RTEMS_tasks_Switch_extension(
     131  Thread_Control *executing,
     132  Thread_Control *heir
     133)
     134{
     135  RTEMS_API_Control            *api;
     136  struct rtems_task_variable_t *tvp;
     137
     138  /*
     139   *  Per Task Variables
     140   */
     141
     142
     143  api = executing->API_Extensions[ THREAD_API_RTEMS ];
     144  tvp = api->task_variables;
     145  while (tvp) {
     146    tvp->var = *tvp->ptr;
     147    tvp = tvp->next;
     148  }
     149
     150  api = heir->API_Extensions[ THREAD_API_RTEMS ];
     151  tvp = api->task_variables;
     152  while (tvp) {
     153    *tvp->ptr = tvp->var;
     154    tvp = tvp->next;
     155  }
     156}
     157
     158/*PAGE
     159 *
     160 *  _RTEMS_tasks_Post_switch_extension
     161 *
     162 *  This extension routine is invoked at each context switch.
     163 */
     164 
     165void _RTEMS_tasks_Post_switch_extension(
    109166  Thread_Control *executing
    110167)
     
    117174
    118175  api = executing->API_Extensions[ THREAD_API_RTEMS ];
     176
     177  /*
     178   *  Signal Processing
     179   */
     180
    119181  asr = &api->Signal;
    120182 
     
    142204  NULL,                                     /* predriver */
    143205  _RTEMS_tasks_Initialize_user_tasks,       /* postdriver */
    144   _RTEMS_tasks_Switch_extension             /* post switch */
     206  _RTEMS_tasks_Post_switch_extension        /* post switch */
    145207};
    146208
     
    151213    _RTEMS_tasks_Start_extension,             /* restart */
    152214    _RTEMS_tasks_Delete_extension,            /* delete */
    153     NULL,                                     /* switch */
     215    _RTEMS_tasks_Switch_extension,            /* switch */
    154216    NULL,                                     /* begin */
    155217    NULL,                                     /* exitted */
Note: See TracChangeset for help on using the changeset viewer.