[Pal/lib] memmmger/slabmgr use size_t uniformly

and add assert(size) where appropriate.
This commit is contained in:
Isaku Yamahata
2020-02-21 14:51:09 -08:00
parent 58d556e441
commit d918847eac
2 changed files with 41 additions and 41 deletions
+23 -23
View File
@@ -60,7 +60,7 @@ typedef struct mem_obj {
DEFINE_LIST(mem_area);
typedef struct mem_area {
LIST_TYPE(mem_area) __list;
unsigned int size;
size_t size;
MEM_OBJ_TYPE objs[];
} MEM_AREA_TYPE, *MEM_AREA;
@@ -80,35 +80,35 @@ typedef struct mem_mgr {
#define __MAX_MEM_SIZE(size) (__MIN_MEM_SIZE() + __SUM_OBJ_SIZE(size))
#ifdef ALLOC_ALIGNMENT
static inline int size_align_down(int size) {
static inline size_t size_align_down(size_t size) {
assert(IS_POWER_OF_2(ALLOC_ALIGNMENT));
int s = __MAX_MEM_SIZE(size) - sizeof(MEM_MGR_TYPE);
int p = s - ALIGN_DOWN_POW2(s, ALLOC_ALIGNMENT);
int o = __SUM_OBJ_SIZE(1);
size_t s = __MAX_MEM_SIZE(size) - sizeof(MEM_MGR_TYPE);
size_t p = s - ALIGN_DOWN_POW2(s, ALLOC_ALIGNMENT);
size_t o = __SUM_OBJ_SIZE(1);
return size - p / o - (p % o ? 1 : 0);
}
static inline int size_align_up(int size) {
static inline size_t size_align_up(size_t size) {
assert(IS_POWER_OF_2(ALLOC_ALIGNMENT));
int s = __MAX_MEM_SIZE(size) - sizeof(MEM_MGR_TYPE);
int p = ALIGN_UP_POW2(s, ALLOC_ALIGNMENT) - s;
int o = __SUM_OBJ_SIZE(1);
size_t s = __MAX_MEM_SIZE(size) - sizeof(MEM_MGR_TYPE);
size_t p = ALIGN_UP_POW2(s, ALLOC_ALIGNMENT) - s;
size_t o = __SUM_OBJ_SIZE(1);
return size + p / o;
}
static inline int init_align_down(int size) {
static inline size_t init_align_down(size_t size) {
assert(IS_POWER_OF_2(ALLOC_ALIGNMENT));
int s = __MAX_MEM_SIZE(size);
int p = s - ALIGN_DOWN_POW2(s, ALLOC_ALIGNMENT);
int o = __SUM_OBJ_SIZE(1);
size_t s = __MAX_MEM_SIZE(size);
size_t p = s - ALIGN_DOWN_POW2(s, ALLOC_ALIGNMENT);
size_t o = __SUM_OBJ_SIZE(1);
return size - p / o - (p % o ? 1 : 0);
}
static inline int init_align_up(int size) {
static inline size_t init_align_up(size_t size) {
assert(IS_POWER_OF_2(ALLOC_ALIGNMENT));
int s = __MAX_MEM_SIZE(size);
int p = ALIGN_UP_POW2(s, ALLOC_ALIGNMENT) - s;
int o = __SUM_OBJ_SIZE(1);
size_t s = __MAX_MEM_SIZE(size);
size_t p = ALIGN_UP_POW2(s, ALLOC_ALIGNMENT) - s;
size_t o = __SUM_OBJ_SIZE(1);
return size + p / o;
}
#endif
@@ -122,11 +122,12 @@ static inline void __set_free_mem_area(MEM_AREA area, MEM_MGR mgr) {
mgr->active_area = area;
}
static inline MEM_MGR create_mem_mgr(unsigned int size) {
static inline MEM_MGR create_mem_mgr(size_t size) {
void* mem = system_malloc(__MAX_MEM_SIZE(size));
MEM_AREA area;
MEM_MGR mgr;
assert(size);
if (!mem)
return NULL;
@@ -145,9 +146,10 @@ static inline MEM_MGR create_mem_mgr(unsigned int size) {
return mgr;
}
static inline MEM_MGR enlarge_mem_mgr(MEM_MGR mgr, unsigned int size) {
static inline MEM_MGR enlarge_mem_mgr(MEM_MGR mgr, size_t size) {
MEM_AREA area;
assert(size);
area = (MEM_AREA)system_malloc(sizeof(MEM_AREA_TYPE) + __SUM_OBJ_SIZE(size));
if (!area)
return NULL;
@@ -202,9 +204,10 @@ static inline OBJ_TYPE* get_mem_obj_from_mgr(MEM_MGR mgr) {
return &mobj->obj;
}
static inline OBJ_TYPE* get_mem_obj_from_mgr_enlarge(MEM_MGR mgr, unsigned int size) {
static inline OBJ_TYPE* get_mem_obj_from_mgr_enlarge(MEM_MGR mgr, size_t size) {
MEM_OBJ mobj;
assert(size);
SYSTEM_LOCK();
while (mgr->obj == mgr->obj_top && LISTP_EMPTY(&mgr->free_list)) {
MEM_AREA area;
@@ -218,9 +221,6 @@ static inline OBJ_TYPE* get_mem_obj_from_mgr_enlarge(MEM_MGR mgr, unsigned int s
SYSTEM_UNLOCK();
if (!size)
return NULL;
/* There can be concurrent attempt to try to enlarge the
allocator, but we prevent deadlocks or crashes. */
area = (MEM_AREA)system_malloc(sizeof(MEM_AREA_TYPE) + __SUM_OBJ_SIZE(size));
+18 -18
View File
@@ -85,7 +85,7 @@ DEFINE_LIST(slab_area);
typedef struct __attribute__((packed)) slab_area {
LIST_TYPE(slab_area) __list;
unsigned int size;
size_t size;
unsigned char pad[AREA_PADDING];
unsigned char raw[];
} SLAB_AREA_TYPE, *SLAB_AREA;
@@ -175,35 +175,35 @@ typedef struct __attribute__((packed)) large_mem_obj {
#define __INIT_MAX_MEM_SIZE(size) (__INIT_MIN_MEM_SIZE() + __INIT_SUM_OBJ_SIZE(size))
#ifdef ALLOC_ALIGNMENT
static inline int size_align_down(int slab_size, int size) {
static inline size_t size_align_down(size_t slab_size, size_t size) {
assert(IS_POWER_OF_2(ALLOC_ALIGNMENT));
int s = __MAX_MEM_SIZE(slab_size, size);
int p = s - ALIGN_DOWN_POW2(s, ALLOC_ALIGNMENT);
int o = __SUM_OBJ_SIZE(slab_size, 1);
size_t s = __MAX_MEM_SIZE(slab_size, size);
size_t p = s - ALIGN_DOWN_POW2(s, ALLOC_ALIGNMENT);
size_t o = __SUM_OBJ_SIZE(slab_size, 1);
return size - p / o - (p % o ? 1 : 0);
}
static inline int size_align_up(int slab_size, int size) {
static inline size_t size_align_up(size_t slab_size, size_t size) {
assert(IS_POWER_OF_2(ALLOC_ALIGNMENT));
int s = __MAX_MEM_SIZE(slab_size, size);
int p = ALIGN_UP_POW2(s, ALLOC_ALIGNMENT) - s;
int o = __SUM_OBJ_SIZE(slab_size, 1);
size_t s = __MAX_MEM_SIZE(slab_size, size);
size_t p = ALIGN_UP_POW2(s, ALLOC_ALIGNMENT) - s;
size_t o = __SUM_OBJ_SIZE(slab_size, 1);
return size + p / o;
}
static inline int init_align_down(int size) {
static inline size_t init_align_down(size_t size) {
assert(IS_POWER_OF_2(ALLOC_ALIGNMENT));
int s = __INIT_MAX_MEM_SIZE(size);
int p = s - ALIGN_DOWN_POW2(s, ALLOC_ALIGNMENT);
int o = __INIT_SUM_OBJ_SIZE(1);
size_t s = __INIT_MAX_MEM_SIZE(size);
size_t p = s - ALIGN_DOWN_POW2(s, ALLOC_ALIGNMENT);
size_t o = __INIT_SUM_OBJ_SIZE(1);
return size - p / o - (p % o ? 1 : 0);
}
static inline int init_size_align_up(int size) {
static inline size_t init_size_align_up(size_t size) {
assert(IS_POWER_OF_2(ALLOC_ALIGNMENT));
int s = __INIT_MAX_MEM_SIZE(size);
int p = ALIGN_UP_POW2(s, ALLOC_ALIGNMENT) - s;
int o = __INIT_SUM_OBJ_SIZE(1);
size_t s = __INIT_MAX_MEM_SIZE(size);
size_t p = ALIGN_UP_POW2(s, ALLOC_ALIGNMENT) - s;
size_t o = __INIT_SUM_OBJ_SIZE(1);
return size + p / o;
}
#endif /* ALLOC_ALIGNMENT */
@@ -213,7 +213,7 @@ static inline int init_size_align_up(int size) {
#endif
static inline void __set_free_slab_area(SLAB_AREA area, struct slab_level_mgr* lmgr, int level) {
int slab_size = slab_levels[level] + SLAB_HDR_SIZE;
size_t slab_size = slab_levels[level] + SLAB_HDR_SIZE;
lmgr->addr = (void*)area->raw;
lmgr->addr_top = (void*)area->raw + (area->size * slab_size);
lmgr->size += area->size;