[PATCH 06/13] config: Add rtems_malloc_task_stack_for_idle()
Sebastian Huber
sebastian.huber at embedded-brains.de
Tue Oct 4 13:41:15 UTC 2022
On 04/10/2022 15:21, Joel Sherrill wrote:
> On Tue, Oct 4, 2022 at 12:40 AM Sebastian Huber
> <sebastian.huber at embedded-brains.de
> <mailto:sebastian.huber at embedded-brains.de>> wrote:
>
> On 30/09/2022 23:39, Chris Johns wrote:
> > On 30/9/2022 7:21 pm, Sebastian Huber wrote:
> >> Update #4524.
> >> ---
> >> cpukit/doxygen/appl-config.h | 13 +++++
> >> cpukit/include/rtems/rtems/config.h | 29 +++++++++-
> >> cpukit/include/rtems/score/interr.h | 1 +
> >> cpukit/sapi/src/interrtext.c | 3 +-
> >> cpukit/sapi/src/malloctaskstackforidle.c | 59
> +++++++++++++++++++++
> >> spec/build/cpukit/librtemscpu.yml | 1 +
> >> spec/build/testsuites/sptests/grp.yml | 2 +
> >> spec/build/testsuites/sptests/spfatal36.yml | 19 +++++++
> >> testsuites/sptests/spfatal36/init.c | 52
> ++++++++++++++++++
> >> testsuites/sptests/spfatal36/spfatal36.doc | 11 ++++
> >> testsuites/sptests/spinternalerror02/init.c | 2 +-
> >> testsuites/sptests/sptls04/init.c | 2 +
> >> 12 files changed, 191 insertions(+), 3 deletions(-)
> >> create mode 100644 cpukit/sapi/src/malloctaskstackforidle.c
> >> create mode 100644 spec/build/testsuites/sptests/spfatal36.yml
> >> create mode 100644 testsuites/sptests/spfatal36/init.c
> >> create mode 100644 testsuites/sptests/spfatal36/spfatal36.doc
> >>
> >> diff --git a/cpukit/doxygen/appl-config.h
> b/cpukit/doxygen/appl-config.h
> >> index aa6dbae648..ee647dc961 100644
> >> --- a/cpukit/doxygen/appl-config.h
> >> +++ b/cpukit/doxygen/appl-config.h
> >> @@ -4842,6 +4842,19 @@
> >> * configuration options. It is assumed that any memory
> allocated for the
> >> * stack of an IDLE task will not be from the RTEMS Workspace
> or the memory
> >> * statically allocated by default.
> >> + *
> >> + * For applications with a thread-local storage size which is
> completely
> >> + * unknown at the time the application configuration is
> defined, RTEMS provides
> >> + * an IDLE task stack allocator which uses rtems_malloc().
> >
> > I thought the TLS size was static and set by the linker? Has this
> changed?
>
> No, this didn't change.
>
> >
> > I am confused about the relationship between an unknown TLS size
> and IDLE task?
> > And the relationship of the TLS size and stack size?
>
> Currently, the IDLE task storage area is statically allocated. The size
> of this area is defined by CONFIGURE_IDLE_TASK_STACK_SIZE. So, this
> configuration option doesn't directly specify the IDLE task stack size.
> This size covers also the TLS area.
>
>
> Thanks for speaking up Chris. I also don't like the idea that something that
> has said and meant IDLE stack size was getting other items lumped into it.
>
>
> >
> >> * * The size of the
> >> + * allocated thread storage area is the sum of stack size
> defined by the
> >> + * #CONFIGURE_IDLE_TASK_STACK_SIZE configuration option and the
> actual
> >> + * thread-local storage size of the application.
> >
> > The label CONFIGURE_IDLE_TASK_STACK_SIZE provides no insight into
> it being
> > effected by the TLS size.
> >
> >> * * Define this configuration
> >> + * option to ``rtems_malloc_task_stack_for_idle`` to use this
> allocator. If
> >> + * the memory allocation fails, then the system terminates with the
> >> + * INTERNAL_ERROR_CORE fatal source and the
> >> + * INTERNAL_ERROR_NO_MEMORY_FOR_IDLE_TASK_STACK fatal code
> during system
> >> + * initialization.
> >> + * @endparblock
> >
> > I am confused about the how and why I would use this change?
>
> With the statically allocated storage area for the IDLE task you
> need at
> least an estimate of the size if you define the application
> configuration. If you can't estimate it, then one option is to simply
> allocate it dynamically.
>
> Maybe a better approach is to allocate the IDLE task storage from the
> workspace by default and use the CONFIGURE_IDLE_TASK_STACK_SIZE really
> for the stack size and not the complete storage area. We could add a
> new
> configuration option (for example CONFIGURE_IDLE_TASK_STORAGE_SIZE) to
> enable the static allocation.
>
>
>
> CONFIGURE_IDLE_TASK_STORAGE_SIZE could default to the size of stack size
> plus other items but it seems over complicated. Just have IDLE stack
> size and the other
> area for other items.
>
> I don't know when IDLE task storage size was introduced but it has been
> a long
> time ago. Changing the semantics of it seems quite wrong.
Ok, I will send a v2 of the patch which:
* Changes the default IDLE task storage allocation to the workspace. It
will use CONFIGURE_IDLE_TASK_STACK_SIZE and this size will define the
stack size.
* Adds a new option CONFIGURE_IDLE_TASK_STORAGE_SIZE which will change
the IDLE task storage allocation to a statically allocated area which
will contain the task stack and the thread-local storage area.
* Adds a new option CONFIGURE_IDLE_TASK_MINIMUM_STACK_SIZE which ensures
that the IDLE task stack size has at least this size.
--
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.huber at embedded-brains.de
phone: +49-89-18 94 741 - 16
fax: +49-89-18 94 741 - 08
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
More information about the devel
mailing list