diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-09-06 15:24:08 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-09-06 15:24:08 +0000 |
commit | dea3eccb38b556b04552219e00b7abd656587278 (patch) | |
tree | 6affcb3026172273e366ee15ed3e8ec70f023a20 /cpukit/score/inline/rtems/score/heap.inl | |
parent | Regenerate. (diff) | |
download | rtems-dea3eccb38b556b04552219e00b7abd656587278.tar.bz2 |
2009-09-06 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
* libcsupport/src/free.c, libmisc/stackchk/check.c,
rtems/include/rtems/rtems/region.h, rtems/src/regioncreate.c,
rtems/src/regionextend.c, rtems/src/regiongetinfo.c,
rtems/src/regiongetsegment.c, rtems/src/regiongetsegmentsize.c,
rtems/src/regionresizesegment.c, score/src/pheapallocate.c,
score/src/pheapallocatealigned.c, score/src/pheapextend.c,
score/src/pheapfree.c, score/src/pheapgetblocksize.c,
score/src/pheapgetfreeinfo.c, score/src/pheapgetinfo.c,
score/src/pheapgetsize.c, score/src/pheapinit.c,
score/src/pheapresizeblock.c, score/src/pheapwalk.c:
Update for heap API changes.
* score/include/rtems/score/apimutex.h,
score/include/rtems/score/object.h: Documentation.
* score/include/rtems/score/heap.h,
score/include/rtems/score/protectedheap.h,
score/inline/rtems/score/heap.inl, score/src/heap.c,
score/src/heapallocate.c, score/src/heapallocatealigned.c,
score/src/heapextend.c, score/src/heapfree.c,
score/src/heapgetfreeinfo.c, score/src/heapgetinfo.c,
score/src/heapresizeblock.c, score/src/heapsizeofuserarea.c,
score/src/heapwalk.c: Overall cleanup. Added boundary constraint to
allocation function. More changes follow.
Diffstat (limited to 'cpukit/score/inline/rtems/score/heap.inl')
-rw-r--r-- | cpukit/score/inline/rtems/score/heap.inl | 73 |
1 files changed, 39 insertions, 34 deletions
diff --git a/cpukit/score/inline/rtems/score/heap.inl b/cpukit/score/inline/rtems/score/heap.inl index 7ac5649f28..2bcadac385 100644 --- a/cpukit/score/inline/rtems/score/heap.inl +++ b/cpukit/score/inline/rtems/score/heap.inl @@ -1,8 +1,9 @@ -/** +/** * @file * - * @brief Static inline implementations of the inlined routines from the heap - * handler. + * @ingroup ScoreHeap + * + * @brief Heap Handler API. */ /* @@ -26,7 +27,7 @@ #include <rtems/score/address.h> /** - * @addtogroup ScoreHeap + * @addtogroup ScoreHeap * * @{ */ @@ -41,17 +42,17 @@ RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_tail( Heap_Control *heap ) return &heap->free_list; } -RTEMS_INLINE_ROUTINE Heap_Block *_Heap_First_free_block( Heap_Control *heap ) +RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_first( Heap_Control *heap ) { return _Heap_Free_list_head(heap)->next; } -RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Last_free_block( Heap_Control *heap ) +RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_last( Heap_Control *heap ) { return _Heap_Free_list_tail(heap)->prev; } -RTEMS_INLINE_ROUTINE void _Heap_Block_remove_from_free_list( Heap_Block *block ) +RTEMS_INLINE_ROUTINE void _Heap_Free_list_remove( Heap_Block *block ) { Heap_Block *next = block->next; Heap_Block *prev = block->prev; @@ -60,7 +61,7 @@ RTEMS_INLINE_ROUTINE void _Heap_Block_remove_from_free_list( Heap_Block *block ) next->prev = prev; } -RTEMS_INLINE_ROUTINE void _Heap_Block_replace_in_free_list( +RTEMS_INLINE_ROUTINE void _Heap_Free_list_replace( Heap_Block *old_block, Heap_Block *new_block ) @@ -75,16 +76,16 @@ RTEMS_INLINE_ROUTINE void _Heap_Block_replace_in_free_list( prev->next = new_block; } -RTEMS_INLINE_ROUTINE void _Heap_Block_insert_after( - Heap_Block *prev_block, +RTEMS_INLINE_ROUTINE void _Heap_Free_list_insert_after( + Heap_Block *block_before, Heap_Block *new_block ) { - Heap_Block *next = prev_block->next; + Heap_Block *next = block_before->next; new_block->next = next; - new_block->prev = prev_block; - prev_block->next = new_block; + new_block->prev = block_before; + block_before->next = new_block; next->prev = new_block; } @@ -122,60 +123,64 @@ RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down( * @brief Returns the block which is @a offset away from @a block. */ RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( - const Heap_Block *block, + Heap_Block *block, uintptr_t offset ) { return (Heap_Block *) ((uintptr_t) block + offset); } -/** - * @brief Returns the begin of the allocatable area of @a block. - */ RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block( - Heap_Block *block + const Heap_Block *block ) { - return (uintptr_t) block + HEAP_BLOCK_ALLOC_AREA_OFFSET; + return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE; } -/** - * @brief Returns the block associated with the allocatable area starting at - * @a alloc_area_begin inside a heap with a page size of @a page_size. - */ RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_of_alloc_area( - uintptr_t alloc_area_begin, + uintptr_t alloc_begin, uintptr_t page_size ) { - return (Heap_Block *) (_Heap_Align_down( alloc_area_begin, page_size ) - - HEAP_BLOCK_ALLOC_AREA_OFFSET); + return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size ) + - HEAP_BLOCK_HEADER_SIZE); } -RTEMS_INLINE_ROUTINE bool _Heap_Is_prev_used( Heap_Block *block ) +RTEMS_INLINE_ROUTINE bool _Heap_Is_prev_used( const Heap_Block *block ) { return block->size_and_flag & HEAP_PREV_BLOCK_USED; } -RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( Heap_Block *block ) +RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block ) { return block->size_and_flag & ~HEAP_PREV_BLOCK_USED; } RTEMS_INLINE_ROUTINE bool _Heap_Is_block_in_heap( - Heap_Control *heap, - Heap_Block *block + const Heap_Control *heap, + const Heap_Block *block ) { - return _Addresses_Is_in_range( block, heap->start, heap->final ); + return (uintptr_t) block >= (uintptr_t) heap->first_block + && (uintptr_t) block <= (uintptr_t) heap->last_block; } /** - * @brief Returns the maximum size of the heap. + * @brief Returns the heap area size. */ -RTEMS_INLINE_ROUTINE uintptr_t _Heap_Get_size( Heap_Control *heap ) +RTEMS_INLINE_ROUTINE uintptr_t _Heap_Get_size( const Heap_Control *heap ) +{ + return heap->area_end - heap->area_begin; +} + +RTEMS_INLINE_ROUTINE uintptr_t _Heap_Max( uintptr_t a, uintptr_t b ) +{ + return a > b ? a : b; +} + +RTEMS_INLINE_ROUTINE uintptr_t _Heap_Min( uintptr_t a, uintptr_t b ) { - return (uintptr_t) heap->end - (uintptr_t) heap->begin; + return a < b ? a : b; } /** @} */ |