[PATCH 4/5] score: Optimize Workspace Handler initialization

Chris Johns chrisj at rtems.org
Tue Nov 30 04:33:45 UTC 2021


On 29/11/21 9:29 pm, Sebastian Huber wrote:
> The BSPs provide memory for the workspace initialization via
> _Memory_Get().  Most BSPs provide exactly one memory area.  Only two
> BSPs provide more than one memory area (arm/altera-cyclone-v and
> bsps/powerpc/mpc55xxevb).  Only if more than one memory area is
> provided, there is a need to use _Heap_Extend().  Provide two
> implementations to initialize the workspace handler and let the BSP
> select one of the implementations based on the number of provided memory
> areas.  This gets rid of a dependency on _Heap_Extend().  It also avoids
> dead code sections for most BSPs.
> ---
>  bsps/shared/start/wkspaceinitmany.c           |  46 +++++++
>  bsps/shared/start/wkspaceinitone.c            |  46 +++++++
>  cpukit/include/rtems/score/wkspace.h          |  12 +-
>  cpukit/include/rtems/score/wkspaceinitmany.h  | 129 ++++++++++++++++++
>  cpukit/include/rtems/score/wkspaceinitone.h   | 113 +++++++++++++++
>  cpukit/score/src/wkspace.c                    |  85 +-----------
>  .../altera-cyclone-v/bspalteracyclonev.yml    |   1 +
>  spec/build/bsps/i386/pc386/obj.yml            |   1 +
>  spec/build/bsps/objmem.yml                    |   1 +
>  spec/build/bsps/powerpc/mpc55xxevb/obj.yml    |   1 +
>  spec/build/bsps/powerpc/objmem.yml            |   1 +
>  spec/build/bsps/powerpc/tqm8xx/obj.yml        |   1 +
>  spec/build/bsps/sparc/objmem.yml              |   1 +
>  13 files changed, 347 insertions(+), 91 deletions(-)
>  create mode 100644 bsps/shared/start/wkspaceinitmany.c
>  create mode 100644 bsps/shared/start/wkspaceinitone.c
>  create mode 100644 cpukit/include/rtems/score/wkspaceinitmany.h
>  create mode 100644 cpukit/include/rtems/score/wkspaceinitone.h
> 
> diff --git a/bsps/shared/start/wkspaceinitmany.c b/bsps/shared/start/wkspaceinitmany.c
> new file mode 100644
> index 0000000000..30335d63c9
> --- /dev/null
> +++ b/bsps/shared/start/wkspaceinitmany.c
> @@ -0,0 +1,46 @@
> +/* SPDX-License-Identifier: BSD-2-Clause */
> +
> +/**
> + * @file
> + *
> + * @ingroup RTEMSScoreWorkspace
> + *
> + * @brief This source file contains the _Workspace_Handler_initialization()
> + *   implementation which supports more than one memory area.
> + */
> +
> +/*
> + * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
> + * POSSIBILITY OF SUCH DAMAGE.
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
> +#include <rtems/score/wkspaceinitmany.h>
> +
> +void _Workspace_Handler_initialization( void )
> +{
> +  _Workspace_Initialize_for_many_areas();

_Workspace_Initialize_for_multiple_areas() ?

And then also for _Malloc_Initialize_for_many_areas() ?

> diff --git a/cpukit/include/rtems/score/wkspaceinitmany.h b/cpukit/include/rtems/score/wkspaceinitmany.h
> new file mode 100644
> index 0000000000..0277c6ee1e
> --- /dev/null
> +++ b/cpukit/include/rtems/score/wkspaceinitmany.h
> @@ -0,0 +1,129 @@
> +/* SPDX-License-Identifier: BSD-2-Clause */
> +
> +/**
> + * @file
> + *
> + * @ingroup RTEMSScoreWorkspace
> + *
> + * @brief This header file provides the implementation of
> + *   _Workspace_Initialize_for_many_areas().
> + */
> +
> +/*
> + * Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de)
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
> + * POSSIBILITY OF SUCH DAMAGE.
> + */
> +
> +#ifndef _RTEMS_SCORE_WKSPACEINITMANY_H
> +#define _RTEMS_SCORE_WKSPACEINITMANY_H
> +
> +#include <rtems/score/wkspace.h>
> +#include <rtems/score/heapimpl.h>
> +#include <rtems/score/interr.h>
> +#include <rtems/score/memory.h>
> +#include <rtems/config.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/**
> + * @ingroup RTEMSScoreWorkspace
> + *
> + * @brief Initializes the RTEMS Workspace with support for exactly one memory
> + *   area.

This looks wrong given ...

> + *
> + * This implementation should be used by BSPs which provide more than one
> + * memory area via _Memory_Get() to implement
> + * _Workspace_Handler_initialization().
> + */
> +RTEMS_INLINE_ROUTINE void _Workspace_Initialize_for_many_areas( void )

Chris


More information about the devel mailing list