[rtems commit] Add functions for greedy workspace allocation

Joel Sherrill joel.sherrill at OARcorp.com
Fri Feb 17 15:25:18 UTC 2012


These methods already exist in similar form.

testsuites/support/src/test_support.c:

Allocate_majority_of_workspace
Allocate_majority_of_heap

These are used in psxmsgq02, psxkey01, psxobj01, and spfatal22.

Since you didn't patch any tests or this file, I don't know if you
missed them or did something else.

--joel

On 02/17/2012 09:11 AM, Sebastian Huber wrote:
> Module:    rtems
> Branch:    master
> Commit:    622d6703d3b332ef56d7691b16d3f74959f6ebf8
> Changeset: http://git.rtems.org/rtems/commit/?id=622d6703d3b332ef56d7691b16d3f74959f6ebf8
>
> Author:    Sebastian Huber<sebastian.huber at embedded-brains.de>
> Date:      Fri Feb 17 13:42:51 2012 +0100
>
> Add functions for greedy workspace allocation
>
> Various tests must check program paths that result due to failed memory
> allocations from the workspace.  To avoid tinkering with internal
> workspace structures throughout the test code these functions should be
> used.
>
> ---
>
>   cpukit/rtems/Makefile.am                   |    1 +
>   cpukit/rtems/include/rtems/rtems/support.h |   18 +++++++++++++
>   cpukit/rtems/src/workspacegreedy.c         |   38 ++++++++++++++++++++++++++++
>   3 files changed, 57 insertions(+), 0 deletions(-)
>
> diff --git a/cpukit/rtems/Makefile.am b/cpukit/rtems/Makefile.am
> index e9f9906..8d593a4 100644
> --- a/cpukit/rtems/Makefile.am
> +++ b/cpukit/rtems/Makefile.am
> @@ -254,6 +254,7 @@ librtems_a_SOURCES += src/dpmemdata.c
>
>   ## WORKSPACE_FILES
>   librtems_a_SOURCES += src/workspace.c
> +librtems_a_SOURCES += src/workspacegreedy.c
>
>   librtems_a_SOURCES += src/modes.c
>
> diff --git a/cpukit/rtems/include/rtems/rtems/support.h b/cpukit/rtems/include/rtems/rtems/support.h
> index 220411d..08c911d 100644
> --- a/cpukit/rtems/include/rtems/rtems/support.h
> +++ b/cpukit/rtems/include/rtems/rtems/support.h
> @@ -101,6 +101,24 @@ bool rtems_workspace_free(
>     void *pointer
>   );
>
> +/**
> + * @brief Greedy allocate that empties the workspace.
> + *
> + * Afterward the workspace has at most @a remaining_free_space free space left
> + * in one free block.  All other blocks are used.
> + *
> + * @see rtems_workspace_greedy_free().
> + */
> +void *rtems_workspace_greedy_allocate( size_t remaining_free_space );
> +
> +/**
> + * @brief Frees space of a greedy allocation.
> + *
> + * The @a opaque argument must be the return value of
> + * rtems_workspace_greedy_allocate().
> + */
> +void rtems_workspace_greedy_free( void *opaque );
> +
>   /** @} */
>
>   #ifndef __RTEMS_APPLICATION__
> diff --git a/cpukit/rtems/src/workspacegreedy.c b/cpukit/rtems/src/workspacegreedy.c
> new file mode 100644
> index 0000000..6d8fd9b
> --- /dev/null
> +++ b/cpukit/rtems/src/workspacegreedy.c
> @@ -0,0 +1,38 @@
> +/*
> + * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
> + *
> + *  embedded brains GmbH
> + *  Obere Lagerstr. 30
> + *  82178 Puchheim
> + *  Germany
> + *<rtems at embedded-brains.de>
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.com/license/LICENSE.
> + */
> +
> +#if HAVE_CONFIG_H
> +  #include "config.h"
> +#endif
> +
> +#include<rtems/rtems/support.h>
> +#include<rtems/score/wkspace.h>
> +
> +void *rtems_workspace_greedy_allocate( size_t remaining_free_space )
> +{
> +  void *opaque;
> +
> +  _Thread_Disable_dispatch();
> +  opaque = _Heap_Greedy_allocate(&_Workspace_Area, remaining_free_space );
> +  _Thread_Enable_dispatch();
> +
> +  return opaque;
> +}
> +
> +void rtems_workspace_greedy_free( void *opaque )
> +{
> +  _Thread_Disable_dispatch();
> +  _Heap_Greedy_free(&_Workspace_Area, opaque );
> +  _Thread_Enable_dispatch();
> +}
>
> _______________________________________________
> rtems-vc mailing list
> rtems-vc at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-vc


-- 
Joel Sherrill, Ph.D.             Director of Research&   Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
     Support Available             (256) 722-9985





More information about the devel mailing list