/******************************************************************************/
/* src/kernel/MemMng/MemMngArea.c */
-/* 2017/03/11 */
+/* 2017/03/12 */
/* Copyright (C) 2017 Mochi. */
/******************************************************************************/
/******************************************************************************/
pAddr = NULL;
pFree = NULL;
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() start. size=%#x", __func__, size );
+
/* サイズチェック */
if ( size == 0 ) {
/* 不正 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=NULL", __func__ );
+
return NULL;
} else {
if ( pFree == NULL ) {
/* メモリ領域情報無 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=NULL", __func__ );
+
return NULL;
}
pAddr = AreaAllocPartially( pFree, size );
}
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%010p", __func__, pAddr );
+
return pAddr;
}
pFree = NULL;
pInfo = NULL;
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() start. pAddr=%010p", __func__, pAddr );
+
/* 引数チェック */
if ( pAddr == NULL ) {
/* 不正 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%d", __func__, CMN_FAILURE );
+
return CMN_FAILURE;
}
if ( pInfo == NULL ) {
/* メモリ領域情報無 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%d", __func__, CMN_FAILURE );
+
return CMN_FAILURE;
}
if ( retMLib != MLIB_SUCCESS ) {
/* 失敗 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%d", __func__, CMN_FAILURE );
+
return CMN_FAILURE;
}
break;
}
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%d", __func__, ret );
+
return ret;
}
void MemMngAreaInit( MochiKernelMemoryMap_t *pMap,
size_t mapSize )
{
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() start.", __func__ );
+
/* 空メモリ領域情報リスト初期化 */
AreaInitEmptyList();
/* 使用中メモリ領域リスト初期化 */
AreaInitUsedList();
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end.", __func__ );
+
return;
}
{
MLibRet_t retMLib; /* MLib関数戻り値 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() start. pFree=%010p", __func__, pFree );
+
/* 未使用メモリ領域リストから削除 */
retMLib = MLibBasicListRemove( &( gAreaTbl.freeList ),
( MLibBasicListNode_t * ) pFree );
if ( retMLib != MLIB_SUCCESS ) {
/* 失敗 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=NULL", __func__ );
+
return NULL;
}
if ( retMLib != MLIB_SUCCESS ) {
/* 失敗 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=NULL", __func__ );
+
return NULL;
}
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%010p", __func__, pFree->pAddr );
+
/* メモリ領域先頭アドレス返却 */
return pFree->pAddr;
}
/* 初期化 */
retMLib = MLIB_FAILURE;
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() start. pFree=%010p, size=%#x", __func__, pFree, size );
+
/* 空メモリ領域情報リストからメモリ領域情報取得 */
pEmpty = ( AreaInfo_t * )
MLibBasicListRemoveTail( &( gAreaTbl.emptyList ) );
if ( pEmpty == NULL ) {
/* メモリ領域情報無 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=NULL", __func__ );
+
return NULL;
}
if ( retMLib != MLIB_SUCCESS ) {
/* 失敗 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=NULL", __func__ );
+
return NULL;
}
pFree->pAddr += size; /* 先頭アドレス */
pFree->size -= size; /* サイズ */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end.", __func__ );
+
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%010p", __func__, pEmpty->pAddr );
+
/* メモリ領域先頭アドレス返却 */
return pEmpty->pAddr;
}
retMLib = MLIB_FAILURE;
pNext = NULL;
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() start. pFree=%010p, pUsed=%010p", __func__, pFree, pUsed );
+
/* メモリ領域位置関係比較 */
if ( pUsed->pAddr > pFree->pAddr ) {
/* 使用中メモリ領域が未使用メモリ領域の前 */
if ( pNext == NULL ) {
/* メモリ領域情報無 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%d", __func__, CMN_SUCCESS );
+
return CMN_SUCCESS;
}
/* 未使用メモリ領域サイズ復元 */
pFree->size = size;
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%d", __func__, CMN_FAILURE );
+
return CMN_FAILURE;
}
}
}
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%d", __func__, CMN_SUCCESS );
+
return CMN_SUCCESS;
}
{
MLibRet_t retMLib; /* MLib関数戻り値 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() start. pUsed=%010p", __func__, pUsed );
+
/* 最後尾挿入 */
retMLib = MLibBasicListInsertTail( &( gAreaTbl.freeList ),
( MLibBasicListNode_t * ) pUsed );
if ( retMLib != MLIB_SUCCESS ) {
/* 失敗 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%d", __func__, CMN_FAILURE );
+
return CMN_FAILURE;
}
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%d", __func__, CMN_SUCCESS );
+
return CMN_SUCCESS;
}
{
MLibRet_t retMLib; /* MLib関数戻り値 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() start. pFree=%010p, pUsed=%010p", __func__, pFree, pUsed );
+
/* 指定した未使用メモリ領域の前に挿入 */
retMLib = MLibBasicListInsertPrev( &( gAreaTbl.freeList ),
( MLibBasicListNode_t * ) pFree,
if ( retMLib != MLIB_SUCCESS ) {
/* 失敗 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%d", __func__, CMN_FAILURE );
+
return CMN_FAILURE;
}
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end. ret=%d", __func__, CMN_SUCCESS );
+
return CMN_SUCCESS;
}
MLibRet_t retMLib; /* MLIB関数戻り値 */
MLibBasicListNode_t *pEmpty; /* 空メモリ領域情報ノード */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() start.", __func__ );
+
/* 空メモリ領域情報リスト初期化 */
retMLib = MLibBasicListInit( &( gAreaTbl.emptyList ) );
/* 失敗 */
/* [TODO]カーネルパニック */
+ DEBUG_LOG( "ERROR!!! retMLib=%d", retMLib );
}
/* メモリ領域情報初期化 */
/* 失敗 */
/* [TODO]カーネルパニック */
+ DEBUG_LOG( "ERROR!!! retMLib=%d", retMLib );
}
}
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end.", __func__ );
+
return;
}
pEmpty = NULL;
pEntry = NULL;
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() start. pMap=%010p, mapSize=%u", __func__, pMap, mapSize );
+
/* 未使用メモリ領域リスト初期化 */
retMLib = MLibBasicListInit( &( gAreaTbl.freeList ) );
}
}
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end.", __func__ );
+
return;
}
{
MLibRet_t retMLib; /* MLIB関数戻り値 */
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() start.", __func__ );
+
/* 使用中メモリ領域リスト初期化 */
retMLib = MLibBasicListInit( &( gAreaTbl.usedList ) );
/* 失敗 */
/* [TODO]カーネルパニック */
+ DEBUG_LOG( "ERROR!!! retMLib=%d", retMLib );
}
+ /* デバッグトレースログ出力 */
+ DEBUG_LOG( "%s() end.", __func__ );
+
return;
}