[PATCH 2/3] score: Simplify thread control initialization
Chris Johns
chrisj at rtems.org
Wed Apr 9 00:49:10 UTC 2014
On 9/04/2014 12:15 am, Sebastian Huber wrote:
> The thread control block contains fields that point to application
> configuration dependent memory areas, like the scheduler information,
> the API control blocks, the user extension context table, the RTEMS
> notepads and the Newlib re-entrancy support. Account for these areas in
> the configuration and avoid extra workspace allocations for these areas.
This is a nice goal to aim for. I do have some questions related how we
see confdefs.h in RTEMS these days.
> This helps also to avoid heap fragementation and reduces the per thread
> memory due to a reduced heap allocation overhead.
Nice.
> diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
> index cac87d3..2a37474 100644
> --- a/cpukit/sapi/include/confdefs.h
> +++ b/cpukit/sapi/include/confdefs.h
> +
> + const size_t _Thread_Control_size = sizeof( Configuration_Thread_control );
> +
> + const Thread_Control_add_on _Thread_Control_add_ons[] = {
> + {
> + offsetof( Configuration_Thread_control, Control.scheduler_info ),
> + offsetof( Configuration_Thread_control, Scheduler )
> + }, {
> + offsetof(
> + Configuration_Thread_control,
> + Control.API_Extensions[ THREAD_API_RTEMS ]
> + ),
> + offsetof( Configuration_Thread_control, API_RTEMS )
> + }, {
> + offsetof(
> + Configuration_Thread_control,
> + Control.libc_reent
> + ),
> + offsetof( Configuration_Thread_control, Newlib )
> + }
> + #ifdef RTEMS_POSIX_API
> + , {
> + offsetof(
> + Configuration_Thread_control,
> + Control.API_Extensions[ THREAD_API_POSIX ]
> + ),
> + offsetof( Configuration_Thread_control, API_POSIX )
> + }
> + #endif
> + };
> +
> + const size_t _Thread_Control_add_on_count =
> + RTEMS_ARRAY_SIZE( _Thread_Control_add_ons );
> +
[snip]
> diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h
> index aae9a72..61e6bc0 100644
> --- a/cpukit/score/include/rtems/score/thread.h
> +++ b/cpukit/score/include/rtems/score/thread.h
> @@ -582,8 +582,6 @@ struct Thread_Control_struct {
> struct _reent *libc_reent;
> /** This array contains the API extension area pointers. */
> void *API_Extensions[ THREAD_API_LAST + 1 ];
> - /** This field points to the user extension pointers. */
> - void **extensions;
>
> #if !defined(RTEMS_SMP)
> /** This field points to the set of per task variables. */
> @@ -600,6 +598,13 @@ struct Thread_Control_struct {
> Chain_Control Key_Chain;
>
> Thread_Life_control Life;
> +
> + /**
> + * @brief Variable length array of user extension pointers.
> + *
> + * The length is defined by the application via <rtems/confdefs.h>.
> + */
> + void *extensions[ 0 ];
> };
>
> #if (CPU_PROVIDES_IDLE_THREAD_BODY == FALSE)
> @@ -654,6 +659,57 @@ RTEMS_INLINE_ROUTINE Thread_Control *_Thread_Get_executing( void )
> return executing;
> }
>
> +/**
> + * @brief Thread control add-on.
> + */
> +typedef struct {
> + /**
> + * @brief Offset of the pointer field in Thread_Control referencing an
> + * application configuration dependent memory area in the thread control
> + * block.
> + */
> + size_t destination_offset;
> +
> + /**
> + * @brief Offset relative to the thread control block begin to an application
> + * configuration dependent memory area.
> + */
> + size_t source_offset;
> +} Thread_Control_add_on;
> +
> +/**
> + * @brief Thread control add-ons.
> + *
> + * The thread control block contains fields that point to application
> + * configuration dependent memory areas, like the scheduler information, the
> + * API control blocks, the user extension context table, the RTEMS notepads and
> + * the Newlib re-entrancy support. Account for these areas in the
> + * configuration and avoid extra workspace allocations for these areas.
> + *
> + * This array is provided via <rtems/confdefs.h>.
> + *
> + * @see _Thread_Control_add_on_count and _Thread_Control_size.
> + */
> +extern const Thread_Control_add_on _Thread_Control_add_ons[];
> +
> +/**
> + * @brief Thread control add-on count.
> + *
> + * Count of entries in _Thread_Control_add_ons.
> + *
> + * This value is provided via <rtems/confdefs.h>.
> + */
> +extern const size_t _Thread_Control_add_on_count;
> +
> +/**
> + * @brief Size of the thread control block of a particular application.
> + *
> + * This value is provided via <rtems/confdefs.h>.
> + *
> + * @see _Thread_Control_add_ons.
> + */
> +extern const size_t _Thread_Control_size;
> +
This approach further changes the "standard" way to configuring RTEMS. I
suspect it may have already changed and this change moves the position a
little further. I think we need to acknowledge this and sort out what it
means, ie documentation.
The confdefs.h file started as a way to create the configuration tables
and to help users. A user was always able to create the underlying
tables and manage the process themselves. Changes like this and a number
of others in confdefs.h are not documented in user manuals. Does this
means we are starting to say "When configuring RTEMS use confdefs.h ?" ?
Chris
More information about the devel
mailing list