8,15 → 8,6 |
|
#define page_tabs 0xDF800000 |
|
typedef struct |
{ |
link_t link; |
link_t adj; |
addr_t base; |
size_t size; |
void *parent; |
u32_t state; |
}md_t; |
|
#define MD_FREE 1 |
#define MD_USED 2 |
83,7 → 74,6 |
list_initialize(&lheap.used); |
list_initialize(&sheap.used); |
|
|
md_slab = slab_cache_create(sizeof(md_t), 32,NULL,NULL,SLAB_CACHE_MAGDEFERRED); |
|
md = (md_t*)slab_alloc(md_slab,0); |
622,16 → 612,12 |
}; |
|
|
void * __fastcall mem_alloc(size_t size, u32_t flags) |
md_t* __fastcall md_alloc(size_t size, u32_t flags) |
{ |
eflags_t efl; |
|
md_t *md; |
|
DBG("\nmem_alloc: %x bytes\n", size); |
|
ASSERT(size != 0); |
|
size = (size+4095)&~4095; |
|
if( flags & PG_MAP ) |
641,6 → 627,9 |
if( !md ) |
return NULL; |
|
ASSERT(md->state == MD_USED); |
ASSERT(md->parent != NULL); |
|
md_t *lmd = (md_t*)md->parent; |
|
ASSERT( lmd != NULL); |
661,15 → 650,34 |
}; |
} |
else |
{ |
md = find_unmapped_md(size); |
|
if( !md ) |
return NULL; |
|
ASSERT(md->parent != NULL); |
ASSERT(md->state == MD_USED); |
} |
|
return md; |
}; |
|
|
void * __fastcall mem_alloc(size_t size, u32_t flags) |
{ |
eflags_t efl; |
|
md_t *md; |
|
DBG("\nmem_alloc: %x bytes\n", size); |
|
ASSERT(size != 0); |
|
md = md_alloc(size, flags); |
|
if( !md ) |
return NULL; |
|
efl = safe_cli(); |
spinlock_lock(&sheap.lock); |
|