diff --git reconstruction/services/interconnection/umm_malloc/umm_malloc.c bes/services/interconnection/umm_malloc/umm_malloc.c
index 94d147225d7..a344d14ff95 100644
--- a/services/interconnection/umm_malloc/umm_malloc.c
+++ b/services/interconnection/umm_malloc/umm_malloc.c
@@ -29,11 +29,14 @@
#include <stdio.h>
#include <string.h>
+#include "stdint.h"
+#include "cmsis_os.h"
#include "dbglog.h"
#include "umm_malloc.h"
/* Use the default DBGLOG_LEVEL and DBGLOG_FUNCTION */
+unsigned char umm_heap_array[UMM_MALLOC_CFG_HEAP_SIZE];
/* ------------------------------------------------------------------------- */
UMM_H_ATTPACKPRE typedef struct umm_ptr_t {
@@ -72,6 +75,40 @@ unsigned short int umm_numblocks = 0;
#define UMM_PFREE(b) (UMM_BLOCK(b).body.free.prev)
#define UMM_DATA(b) (UMM_BLOCK(b).body.data)
+static osMutexId umm_clock_mutex_id = NULL;
+osMutexDef(umm_clock_mutex);
+
+/* ------------------------------------------------------------------------ */
+void LOCK_UMM_CLOCK(void)
+{
+ if(osMutexWait(umm_clock_mutex_id, osWaitForever) != osOK)
+ DBGLOG_INFO(1,"%s Error", __func__);
+}
+
+void UNLOCK_UMM_CLOCK(void)
+{
+ if(osMutexRelease(umm_clock_mutex_id) != osOK)
+ DBGLOG_INFO(1,"%s Error", __func__);
+}
+
+/* ------------------------------------------------------------------------ */
+
+static void trace_umm_blocks_info( void ) {
+ unsigned short int blockSize = 0;
+ unsigned short int cf = 0;
+
+ cf = UMM_NFREE(0);
+ blockSize = blockSize;
+ DBGLOG_INFO(1, "fisrt free block %d", cf);
+
+ while( cf ) {
+ blockSize = (UMM_NBLOCK(cf) & UMM_BLOCKNO_MASK) - cf;
+
+ DBGLOG_INFO(2, "Looking at block %6i size %6i\n", cf, blockSize );
+
+ cf = UMM_NFREE(cf);
+ }
+}
/* ------------------------------------------------------------------------ */
@@ -145,7 +182,7 @@ static void umm_assimilate_up( unsigned short int c ) {
* the free list
*/
- DBGLOG_DEBUG( "Assimilate up to next block, which is FREE\n" );
+ DBGLOG_DEBUG(2, "%d Assimilate up to next block %d, which is FREE\n", c, UMM_NBLOCK(c));
/* Disconnect the next block from the FREE list */
@@ -177,6 +214,13 @@ void umm_init( void ) {
/* init heap pointer and size, and memset it to 0 */
umm_heap = (umm_block *)UMM_MALLOC_CFG_HEAP_ADDR;
umm_numblocks = (UMM_MALLOC_CFG_HEAP_SIZE / sizeof(umm_block));
+ DBGLOG_DEBUG(3, "%s umm_heap %p blocks number %d", __func__, umm_heap, umm_numblocks);
+
+ if (umm_clock_mutex_id == NULL)
+ {
+ umm_clock_mutex_id = osMutexCreate((osMutex(umm_clock_mutex)));
+ }
+
memset(umm_heap, 0x00, UMM_MALLOC_CFG_HEAP_SIZE);
/* setup initial blank heap structure */
@@ -238,7 +282,7 @@ void umm_free( void *ptr ) {
/* If we're being asked to free a NULL pointer, well that's just silly! */
if( (void *)0 == ptr ) {
- DBGLOG_DEBUG( "free a null pointer -> do nothing\n" );
+ DBGLOG_DEBUG(0, "free a null pointer -> do nothing\n" );
return;
}
@@ -259,7 +303,7 @@ void umm_free( void *ptr ) {
c = (((char *)ptr)-(char *)(&(umm_heap[0])))/sizeof(umm_block);
- DBGLOG_DEBUG( "Freeing block %6i\n", c );
+ DBGLOG_DEBUG(2, "Freeing block %6i %p\n", c, ptr);
/* Now let's assimilate this block with the next one if possible. */
@@ -269,7 +313,7 @@ void umm_free( void *ptr ) {
if( UMM_NBLOCK(UMM_PBLOCK(c)) & UMM_FREELIST_MASK ) {
- DBGLOG_DEBUG( "Assimilate down to next block, which is FREE\n" );
+ DBGLOG_DEBUG(1, "Assimilate down to next block %d, which is FREE\n", UMM_PBLOCK(c));
c = umm_assimilate_down(c, UMM_FREELIST_MASK);
} else {
@@ -278,7 +322,7 @@ void umm_free( void *ptr ) {
* of the free list
*/
- DBGLOG_DEBUG( "Just add to head of free list\n" );
+ DBGLOG_DEBUG(0, "Just add to head of free list\n" );
UMM_PFREE(UMM_NFREE(0)) = c;
UMM_NFREE(c) = UMM_NFREE(0);
@@ -315,7 +359,7 @@ void *umm_malloc( size_t size ) {
*/
if( 0 == size ) {
- DBGLOG_DEBUG( "malloc a block of 0 bytes -> do nothing\n" );
+ DBGLOG_DEBUG(0, "malloc a block of 0 bytes -> do nothing\n" );
return( (void *)NULL );
}
@@ -341,7 +385,7 @@ void *umm_malloc( size_t size ) {
while( cf ) {
blockSize = (UMM_NBLOCK(cf) & UMM_BLOCKNO_MASK) - cf;
- DBGLOG_TRACE( "Looking at block %6i size %6i\n", cf, blockSize );
+ DBGLOG_DEBUG(2, "Looking at block %6i size %6i\n", cf, blockSize );
#if defined UMM_BEST_FIT
if( (blockSize >= blocks) && (blockSize < bestSize) ) {
@@ -374,7 +418,7 @@ void *umm_malloc( size_t size ) {
if( blockSize == blocks ) {
/* It's an exact fit and we don't neet to split off a block. */
- DBGLOG_DEBUG( "Allocating %6i blocks starting at %6i - exact\n", blocks, cf );
+ DBGLOG_DEBUG(2, "Allocating %6i blocks starting at %6i - exact\n", blocks, cf );
/* Disconnect this block from the FREE list */
@@ -382,7 +426,7 @@ void *umm_malloc( size_t size ) {
} else {
/* It's not an exact fit and we need to split off a block. */
- DBGLOG_DEBUG( "Allocating %6i blocks starting at %6i - existing\n", blocks, cf );
+ DBGLOG_DEBUG(2, "Allocating %6i blocks starting at %6i - existing\n", blocks, cf );
/*
* split current free block `cf` into two blocks. The first one will be
@@ -408,7 +452,8 @@ void *umm_malloc( size_t size ) {
} else {
/* Out of memory */
- DBGLOG_DEBUG( "Can't allocate %5i blocks\n", blocks );
+ DBGLOG_DEBUG(1, "Can't allocate %5i blocks\n", blocks );
+ trace_umm_blocks_info();
/* Release the critical section... */
UMM_CRITICAL_EXIT();
@@ -448,7 +493,7 @@ void *umm_realloc( void *ptr, size_t size ) {
*/
if( ((void *)NULL == ptr) ) {
- DBGLOG_DEBUG( "realloc the NULL pointer - call malloc()\n" );
+ DBGLOG_DEBUG(0, "realloc the NULL pointer - call malloc()\n" );
return( umm_malloc(size) );
}
@@ -460,7 +505,7 @@ void *umm_realloc( void *ptr, size_t size ) {
*/
if( 0 == size ) {
- DBGLOG_DEBUG( "realloc to 0 size, just free the block\n" );
+ DBGLOG_DEBUG(0, "realloc to 0 size, just free the block\n" );
umm_free( ptr );
@@ -509,7 +554,7 @@ void *umm_realloc( void *ptr, size_t size ) {
prevBlockSize = (c - UMM_PBLOCK(c));
}
- DBGLOG_DEBUG( "realloc blocks %i blockSize %i nextBlockSize %i prevBlockSize %i\n", blocks, blockSize, nextBlockSize, prevBlockSize );
+ DBGLOG_DEBUG(4, "realloc blocks %i blockSize %i nextBlockSize %i prevBlockSize %i\n", blocks, blockSize, nextBlockSize, prevBlockSize );
/*
* Ok, now that we're here we know how many blocks we want and the current
@@ -536,21 +581,21 @@ void *umm_realloc( void *ptr, size_t size ) {
*/
if (blockSize >= blocks) {
- DBGLOG_DEBUG( "realloc the same or smaller size block - %i, do nothing\n", blocks );
+ DBGLOG_DEBUG(1, "realloc the same or smaller size block - %i, do nothing\n", blocks );
/* This space intentionally left blank */
} else if ((blockSize + nextBlockSize) >= blocks) {
- DBGLOG_DEBUG( "realloc using next block - %i\n", blocks );
+ DBGLOG_DEBUG(1, "realloc using next block - %i\n", blocks );
umm_assimilate_up( c );
blockSize += nextBlockSize;
} else if ((prevBlockSize + blockSize) >= blocks) {
- DBGLOG_DEBUG( "realloc using prev block - %i\n", blocks );
+ DBGLOG_DEBUG(1, "realloc using prev block - %i\n", blocks );
umm_disconnect_from_free_list( UMM_PBLOCK(c) );
c = umm_assimilate_down(c, 0);
memmove( (void *)&UMM_DATA(c), ptr, curSize );
ptr = (void *)&UMM_DATA(c);
blockSize += prevBlockSize;
} else if ((prevBlockSize + blockSize + nextBlockSize) >= blocks) {
- DBGLOG_DEBUG( "realloc using prev and next block - %i\n", blocks );
+ DBGLOG_DEBUG(1, "realloc using prev and next block - %i\n", blocks );
umm_assimilate_up( c );
umm_disconnect_from_free_list( UMM_PBLOCK(c) );
c = umm_assimilate_down(c, 0);
@@ -558,14 +603,14 @@ void *umm_realloc( void *ptr, size_t size ) {
ptr = (void *)&UMM_DATA(c);
blockSize += (prevBlockSize + nextBlockSize);
} else {
- DBGLOG_DEBUG( "realloc a completely new block %i\n", blocks );
+ DBGLOG_DEBUG(1, "realloc a completely new block %i\n", blocks );
void *oldptr = ptr;
if( (ptr = umm_malloc( size )) ) {
- DBGLOG_DEBUG( "realloc %i to a bigger block %i, copy, and free the old\n", blockSize, blocks );
+ DBGLOG_DEBUG(2, "realloc %i to a bigger block %i, copy, and free the old\n", blockSize, blocks );
memcpy( ptr, oldptr, curSize );
umm_free( oldptr );
} else {
- DBGLOG_DEBUG( "realloc %i to a bigger block %i failed - return NULL and leave the old block!\n", blockSize, blocks );
+ DBGLOG_DEBUG(2, "realloc %i to a bigger block %i failed - return NULL and leave the old block!\n", blockSize, blocks );
/* This space intentionally left blnk */
}
blockSize = blocks;
@@ -576,7 +621,7 @@ void *umm_realloc( void *ptr, size_t size ) {
*/
if (blockSize > blocks ) {
- DBGLOG_DEBUG( "split and free %i blocks from %i\n", blocks, blockSize );
+ DBGLOG_DEBUG(2, "split and free %i blocks from %i\n", blocks, blockSize );
umm_split_block( c, blocks, 0 );
umm_free( (void *)&UMM_DATA(c+blocks) );
}
Parent Issue: #76
The list below are files that are derived from open source files.
Included are the original license, the license declared in the SDK, the license we would like the source file relicensed to, and a diff between the reconstruction and the SDK.
include/rtos/rtx/os_tcb.hOriginally
Apache-2.0Declared
BES Licensein SDK version.Relicense to
Apache-2.0Diff of changes (click to view)
rtos/rtx5/RTE_Components.hOriginally
Apache-2.0No Declared License in SDK version.
Relicense to
Apache-2.0Diff of changes (click to view)
services/interconnection/umm_malloc/umm_malloc.cOriginally
MITNo Declared License in SDK version.
Relicense to
MITDiff of changes (click to view)
services/interconnection/umm_malloc/umm_malloc.hOriginally
MITNo Declared License in SDK version.
Relicense to
MITDiff of changes (click to view)
services/multimedia/audio/process/adp/include/adp_config.hOriginally
BSD-3No Declared License in SDK version.
Relicense to
BSD-3Diff of changes (click to view)
services/multimedia/speech/inc/g726.hOriginally
MITDeclared
BES Licensein SDK version.Relicense to
MITDiff of changes (click to view)
thirdparty/audio_codec_lib/ldac/inc/ldacBT.hOriginally
Apache-2.0No Declared License in SDK version.
Relicense to
Apache-2.0Diff of changes (click to view)
thirdparty/audio_codec_lib/liblhdc-dec/inc/lhdcUtil.hOriginally
BSD-3No Declared License in SDK version.
Relicense to
BSD-3.Diff of changes (click to view)