forked from xuos/xiuos
fix a bug of malloc big memory failed
This commit is contained in:
parent
eb14677832
commit
25cd73821f
|
@ -350,11 +350,12 @@ static void* BigMemMalloc(struct DynamicBuddyMemory *dynamic_buddy, x_size_t siz
|
||||||
|
|
||||||
/* best-fit method */
|
/* best-fit method */
|
||||||
for (node = dynamic_buddy->mm_freenode_list[ndx].next;
|
for (node = dynamic_buddy->mm_freenode_list[ndx].next;
|
||||||
node && (node->size < allocsize);
|
(ndx < MEM_LINKNRS ) && (node->size < allocsize);
|
||||||
node = node->next) {
|
node = node->next) {
|
||||||
|
ndx++;
|
||||||
};
|
};
|
||||||
/* get the best-fit freeNode */
|
/* get the best-fit freeNode */
|
||||||
if (node && (node->size > allocsize)) {
|
if (node && (node->size >= allocsize)) {
|
||||||
struct DynamicFreeNode *remainder;
|
struct DynamicFreeNode *remainder;
|
||||||
struct DynamicFreeNode *next;
|
struct DynamicFreeNode *next;
|
||||||
uint32 remaining;
|
uint32 remaining;
|
||||||
|
@ -1197,25 +1198,47 @@ SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHE
|
||||||
*/
|
*/
|
||||||
void ShowBuddy(void)
|
void ShowBuddy(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int lock = 0;
|
int lock = 0;
|
||||||
struct DynamicFreeNode *debug = NONE;
|
struct DynamicFreeNode *debug = NONE;
|
||||||
|
|
||||||
lock = CriticalAreaLock();
|
lock = CriticalAreaLock();
|
||||||
KPrintf("\n\033[41;1mlist memory information\033[0m\n", __func__);
|
KPrintf("\n\033[41;1mlist memory information\033[0m\n", __func__);
|
||||||
for (debug = ByteManager.dynamic_buddy_manager.mm_freenode_list[0].next;
|
for(int level = 0; level < MEM_LINKNRS; level++) {
|
||||||
debug;debug = debug->next){
|
KPrintf("\n %s level [%d],memory size[2^%d] \n",__func__, level,level +6);
|
||||||
KPrintf("%s,current is %x,next is %x, size %u, flag %x\n",__func__, debug, debug->next,debug->size,debug->flag);
|
for (debug = &ByteManager.dynamic_buddy_manager.mm_freenode_list[level]; ; ) {
|
||||||
|
if(debug->size > 0)
|
||||||
|
KPrintf(" [current node %x,next node %x, size %u, flag %x]\n",debug, debug->next,debug->size,debug->flag);
|
||||||
|
else
|
||||||
|
KPrintf(" [listhead node %x,next node %x]\n",debug, debug->next);
|
||||||
|
if(debug->next)
|
||||||
|
debug = debug->next;
|
||||||
|
|
||||||
|
if(debug->size == 0)
|
||||||
|
break;
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
KPrintf("\nlist memory information\n\n");
|
KPrintf("\nlist memory information\n\n");
|
||||||
#ifdef MEM_EXTERN_SRAM
|
#ifdef MEM_EXTERN_SRAM
|
||||||
for(i = 0; i < EXTSRAM_MAX_NUM; i++) {
|
for(i = 0; i < EXTSRAM_MAX_NUM; i++) {
|
||||||
if(NONE != ExtByteManager[i].done){
|
if(NONE != ExtByteManager[i].done){
|
||||||
KPrintf("\nlist extern sram[%d] memory information\n\n",i);
|
KPrintf("\nlist extern sram[%d] memory information\n\n",i);
|
||||||
for (debug = ExtByteManager[i].dynamic_buddy_manager.mm_freenode_list[0].next;
|
for(int lev = 0; lev < MEM_LINKNRS; lev++) {
|
||||||
debug;debug = debug->next){
|
KPrintf("\n %s level [%d],memory size[2^%d] \n",__func__, lev,lev +6);
|
||||||
KPrintf("%s,current is %x,next is %x, size %u, flag %x\n",__func__, debug, debug->next,debug->size,debug->flag);
|
for (debug = & ExtByteManager[i].dynamic_buddy_manager.mm_freenode_list[lev]; ; ) {
|
||||||
};
|
if(debug->size > 0)
|
||||||
|
KPrintf(" [current node %x,next node %x, size %u, flag %x]\n",debug, debug->next,debug->size,debug->flag);
|
||||||
|
else
|
||||||
|
KPrintf(" [listhead node %x,next node %x]\n",debug, debug->next);
|
||||||
|
if(debug->next)
|
||||||
|
debug = debug->next;
|
||||||
|
|
||||||
|
if(debug->size == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue