Changed base implementation of protected heap allocations to use _Heap_Allocate_aligned_with_boundary().

This commit is contained in:
Thomas Doerfler
2009-11-30 13:06:21 +00:00
parent 51bdbca101
commit 9224a751b1
7 changed files with 72 additions and 66 deletions

View File

@@ -1,3 +1,14 @@
2009-11-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
* score/include/rtems/score/protectedheap.h,
score/src/pheapallocate.c: Changed base implementation of protected
heap allocations to use _Heap_Allocate_aligned_with_boundary().
* libcsupport/include/rtems/malloc.h, libcsupport/src/rtems_malloc.c:
Check system state. Process deferred frees. Renamed rtems_malloc() in
rtems_heap_allocate_aligned_with_boundary().
* score/src/pheapallocatealigned.c: Removed file.
* score/Makefile.am: Update for removed file.
2009-11-30 Sebastian Huber <sebastian.huber@embedded-brains.de> 2009-11-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libblock/include/rtems/bdbuf.h: Documentation. * libblock/include/rtems/bdbuf.h: Documentation.

View File

@@ -169,7 +169,11 @@ int rtems_memalign(
* @return A pointer to the begin of the allocated memory area, or @c NULL if * @return A pointer to the begin of the allocated memory area, or @c NULL if
* no memory is available or the parameters are inconsistent. * no memory is available or the parameters are inconsistent.
*/ */
void *rtems_malloc(size_t size, uintptr_t alignment, uintptr_t boundary); void *rtems_heap_allocate_aligned_with_boundary(
size_t size,
uintptr_t alignment,
uintptr_t boundary
);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -28,23 +28,29 @@
#ifdef RTEMS_NEWLIB #ifdef RTEMS_NEWLIB
#include "malloc_p.h" #include "malloc_p.h"
#include <stdlib.h> void *rtems_heap_allocate_aligned_with_boundary(
#include <errno.h> size_t size,
uintptr_t alignment,
void *rtems_malloc(size_t size, uintptr_t alignment, uintptr_t boundary) uintptr_t boundary
)
{ {
void *p = NULL; if (
_System_state_Is_up( _System_state_Get() )
&& !malloc_is_system_state_OK()
) {
return NULL;
}
_RTEMS_Lock_allocator(); malloc_deferred_frees_process();
p = _Heap_Allocate_aligned_with_boundary(
RTEMS_Malloc_Heap,
size,
alignment,
boundary
);
_RTEMS_Unlock_allocator();
return p; /* FIXME: Statistics, boundary checks */
return _Protected_heap_Allocate_aligned_with_boundary(
RTEMS_Malloc_Heap,
size,
alignment,
boundary
);
} }
#endif #endif

View File

@@ -138,7 +138,7 @@ libscore_a_SOURCES += src/objectallocatebyindex.c src/objectgetbyindex.c
endif endif
## PROTECTED_HEAP_C_FILES ## PROTECTED_HEAP_C_FILES
libscore_a_SOURCES += src/pheapallocatealigned.c src/pheapallocate.c \ libscore_a_SOURCES += src/pheapallocate.c \
src/pheapextend.c src/pheapfree.c src/pheapgetsize.c \ src/pheapextend.c src/pheapfree.c src/pheapgetsize.c \
src/pheapgetblocksize.c src/pheapgetfreeinfo.c src/pheapgetinfo.c \ src/pheapgetblocksize.c src/pheapgetfreeinfo.c src/pheapgetinfo.c \
src/pheapinit.c src/pheapresizeblock.c src/pheapwalk.c src/pheapinit.c src/pheapresizeblock.c src/pheapwalk.c

View File

@@ -66,19 +66,37 @@ bool _Protected_heap_Extend(
/** /**
* @brief See _Heap_Allocate_aligned_with_boundary(). * @brief See _Heap_Allocate_aligned_with_boundary().
*/ */
void *_Protected_heap_Allocate( void *_Protected_heap_Allocate_aligned_with_boundary(
Heap_Control *heap, Heap_Control *heap,
uintptr_t size uintptr_t size,
uintptr_t alignment,
uintptr_t boundary
); );
/** /**
* @brief See _Heap_Allocate_aligned_with_boundary(). * @brief See _Heap_Allocate_aligned_with_boundary() with boundary equals zero.
*/ */
void *_Protected_heap_Allocate_aligned( RTEMS_INLINE_ROUTINE void *_Protected_heap_Allocate_aligned(
Heap_Control *heap, Heap_Control *heap,
uintptr_t size, uintptr_t size,
uintptr_t alignment uintptr_t alignment
); )
{
return
_Protected_heap_Allocate_aligned_with_boundary( heap, size, alignment, 0 );
}
/**
* @brief See _Heap_Allocate_aligned_with_boundary() with alignment and
* boundary equals zero.
*/
RTEMS_INLINE_ROUTINE void *_Protected_heap_Allocate(
Heap_Control *heap,
uintptr_t size
)
{
return _Protected_heap_Allocate_aligned_with_boundary( heap, size, 0, 0 );
}
/** /**
* @brief See _Heap_Size_of_alloc_area(). * @brief See _Heap_Size_of_alloc_area().

View File

@@ -24,16 +24,23 @@
#include <rtems/system.h> #include <rtems/system.h>
#include <rtems/score/protectedheap.h> #include <rtems/score/protectedheap.h>
void *_Protected_heap_Allocate( void *_Protected_heap_Allocate_aligned_with_boundary(
Heap_Control *the_heap, Heap_Control *heap,
uintptr_t size uintptr_t size,
uintptr_t alignment,
uintptr_t boundary
) )
{ {
void *p; void *p;
_RTEMS_Lock_allocator(); _RTEMS_Lock_allocator();
p = _Heap_Allocate( the_heap, size ); p = _Heap_Allocate_aligned_with_boundary(
heap,
size,
alignment,
boundary
);
_RTEMS_Unlock_allocator(); _RTEMS_Unlock_allocator();
return p; return p;
} }

View File

@@ -1,40 +0,0 @@
/**
* @file
*
* @ingroup ScoreProtHeap
*
* @brief Protected Heap Handler implementation.
*/
/*
* COPYRIGHT (c) 1989-2007.
* On-Line Applications Research Corporation (OAR).
*
* 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.
*
* $Id$
*/
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include <rtems/system.h>
#include <rtems/score/protectedheap.h>
void *_Protected_heap_Allocate_aligned(
Heap_Control *the_heap,
uintptr_t size,
uintptr_t alignment
)
{
void *p;
_RTEMS_Lock_allocator();
p = _Heap_Allocate_aligned( the_heap, size, alignment );
_RTEMS_Unlock_allocator();
return p;
}