summaryrefslogtreecommitdiff
path: root/src/slab.c
diff options
context:
space:
mode:
authorShell <[email protected]>2024-08-28 20:54:55 +0800
committerMeco Man <[email protected]>2024-09-01 15:12:34 -0400
commitdfd8ccf262d53723056490d8858807f792ffa013 (patch)
tree83cc36f546cf5c17ed407318daf5dda0194b80c3 /src/slab.c
parentb6f1b16d7a7a61bc0b5301a6fcf084cef9f31e3b (diff)
feat: kernel/libcpu: fit into ilp32d
Diffstat (limited to 'src/slab.c')
-rw-r--r--src/slab.c50
1 files changed, 25 insertions, 25 deletions
diff --git a/src/slab.c b/src/slab.c
index b1e2971b2e..456f0ec648 100644
--- a/src/slab.c
+++ b/src/slab.c
@@ -136,7 +136,7 @@
#define PAGE_TYPE_LARGE 0x02
#define btokup(addr) \
- (&slab->memusage[((rt_ubase_t)(addr) - slab->heap_start) >> RT_MM_PAGE_BITS])
+ (&slab->memusage[((rt_uintptr_t)(addr) - slab->heap_start) >> RT_MM_PAGE_BITS])
/**
* Base structure of slab memory object
@@ -194,8 +194,8 @@ struct rt_slab_page
struct rt_slab
{
struct rt_memory parent; /**< inherit from rt_memory */
- rt_ubase_t heap_start; /**< memory start address */
- rt_ubase_t heap_end; /**< memory end address */
+ rt_uintptr_t heap_start; /**< memory start address */
+ rt_uintptr_t heap_end; /**< memory end address */
struct rt_slab_memusage *memusage;
struct rt_slab_zone *zone_array[RT_SLAB_NZONES]; /* linked list of zones NFree > 0 */
struct rt_slab_zone *zone_free; /* whole zones that have become free */
@@ -261,7 +261,7 @@ void rt_slab_page_free(rt_slab_t m, void *addr, rt_size_t npages)
struct rt_slab *slab = (struct rt_slab *)m;
RT_ASSERT(addr != RT_NULL);
- RT_ASSERT((rt_ubase_t)addr % RT_MM_PAGE_SIZE == 0);
+ RT_ASSERT((rt_uintptr_t)addr % RT_MM_PAGE_SIZE == 0);
RT_ASSERT(npages != 0);
n = (struct rt_slab_page *)addr;
@@ -324,18 +324,18 @@ static void rt_slab_page_init(struct rt_slab *slab, void *addr, rt_size_t npages
rt_slab_t rt_slab_init(const char *name, void *begin_addr, rt_size_t size)
{
rt_uint32_t limsize, npages;
- rt_ubase_t start_addr, begin_align, end_align;
+ rt_uintptr_t start_addr, begin_align, end_align;
struct rt_slab *slab;
- slab = (struct rt_slab *)RT_ALIGN((rt_ubase_t)begin_addr, RT_ALIGN_SIZE);
- start_addr = (rt_ubase_t)slab + sizeof(*slab);
+ slab = (struct rt_slab *)RT_ALIGN((rt_uintptr_t)begin_addr, RT_ALIGN_SIZE);
+ start_addr = (rt_uintptr_t)slab + sizeof(*slab);
/* align begin and end addr to page */
- begin_align = RT_ALIGN((rt_ubase_t)start_addr, RT_MM_PAGE_SIZE);
- end_align = RT_ALIGN_DOWN((rt_ubase_t)begin_addr + size, RT_MM_PAGE_SIZE);
+ begin_align = RT_ALIGN((rt_uintptr_t)start_addr, RT_MM_PAGE_SIZE);
+ end_align = RT_ALIGN_DOWN((rt_uintptr_t)begin_addr + size, RT_MM_PAGE_SIZE);
if (begin_align >= end_align)
{
rt_kprintf("slab init errr. wrong address[0x%x - 0x%x]\n",
- (rt_ubase_t)begin_addr, (rt_ubase_t)begin_addr + size);
+ (rt_uintptr_t)begin_addr, (rt_uintptr_t)begin_addr + size);
return RT_NULL;
}
@@ -378,7 +378,7 @@ rt_slab_t rt_slab_init(const char *name, void *begin_addr, rt_size_t size)
slab->memusage = rt_slab_page_alloc((rt_slab_t)(&slab->parent), limsize / RT_MM_PAGE_SIZE);
LOG_D("slab->memusage 0x%x, size 0x%x",
- (rt_ubase_t)slab->memusage, limsize);
+ (rt_uintptr_t)slab->memusage, limsize);
return &slab->parent;
}
RTM_EXPORT(rt_slab_init);
@@ -411,7 +411,7 @@ RTM_EXPORT(rt_slab_detach);
rt_inline int zoneindex(rt_size_t *bytes)
{
/* unsigned for shift opt */
- rt_ubase_t n = (rt_ubase_t)(*bytes);
+ rt_uintptr_t n = (rt_uintptr_t)(*bytes);
if (n < 128)
{
@@ -519,7 +519,7 @@ void *rt_slab_alloc(rt_slab_t m, rt_size_t size)
LOG_D("alloc a large memory 0x%x, page cnt %d, kup %d",
size,
size >> RT_MM_PAGE_BITS,
- ((rt_ubase_t)chunk - slab->heap_start) >> RT_MM_PAGE_BITS);
+ ((rt_uintptr_t)chunk - slab->heap_start) >> RT_MM_PAGE_BITS);
/* mem stat */
slab->parent.used += size;
if (slab->parent.used > slab->parent.max)
@@ -605,7 +605,7 @@ void *rt_slab_alloc(rt_slab_t m, rt_size_t size)
}
LOG_D("alloc a new zone: 0x%x",
- (rt_ubase_t)z);
+ (rt_uintptr_t)z);
/* set message usage */
for (off = 0, kup = btokup(z); off < slab->zone_page_cnt; off ++)
@@ -686,7 +686,7 @@ void *rt_slab_realloc(rt_slab_t m, void *ptr, rt_size_t size)
* Get the original allocation's zone. If the new request winds up
* using the same chunk size we do not have to do anything.
*/
- kup = btokup((rt_ubase_t)ptr & ~RT_MM_PAGE_MASK);
+ kup = btokup((rt_uintptr_t)ptr & ~RT_MM_PAGE_MASK);
if (kup->type == PAGE_TYPE_LARGE)
{
rt_size_t osize;
@@ -701,7 +701,7 @@ void *rt_slab_realloc(rt_slab_t m, void *ptr, rt_size_t size)
}
else if (kup->type == PAGE_TYPE_SMALL)
{
- z = (struct rt_slab_zone *)(((rt_ubase_t)ptr & ~RT_MM_PAGE_MASK) -
+ z = (struct rt_slab_zone *)(((rt_uintptr_t)ptr & ~RT_MM_PAGE_MASK) -
kup->size * RT_MM_PAGE_SIZE);
RT_ASSERT(z->z_magic == ZALLOC_SLAB_MAGIC);
@@ -749,19 +749,19 @@ void rt_slab_free(rt_slab_t m, void *ptr)
/* get memory usage */
#if (DBG_LVL == DBG_LOG)
{
- rt_ubase_t addr = ((rt_ubase_t)ptr & ~RT_MM_PAGE_MASK);
+ rt_uintptr_t addr = ((rt_uintptr_t)ptr & ~RT_MM_PAGE_MASK);
LOG_D("free a memory 0x%x and align to 0x%x, kup index %d",
- (rt_ubase_t)ptr,
- (rt_ubase_t)addr,
- ((rt_ubase_t)(addr) - slab->heap_start) >> RT_MM_PAGE_BITS);
+ (rt_uintptr_t)ptr,
+ (rt_uintptr_t)addr,
+ ((rt_uintptr_t)(addr) - slab->heap_start) >> RT_MM_PAGE_BITS);
}
#endif /* DBG_LVL == DBG_LOG */
- kup = btokup((rt_ubase_t)ptr & ~RT_MM_PAGE_MASK);
+ kup = btokup((rt_uintptr_t)ptr & ~RT_MM_PAGE_MASK);
/* release large allocation */
if (kup->type == PAGE_TYPE_LARGE)
{
- rt_ubase_t size;
+ rt_uintptr_t size;
/* clear page counter */
size = kup->size;
@@ -770,7 +770,7 @@ void rt_slab_free(rt_slab_t m, void *ptr)
slab->parent.used -= size * RT_MM_PAGE_SIZE;
LOG_D("free large memory block 0x%x, page count %d",
- (rt_ubase_t)ptr, size);
+ (rt_uintptr_t)ptr, size);
/* free this page */
rt_slab_page_free(m, ptr, size);
@@ -779,7 +779,7 @@ void rt_slab_free(rt_slab_t m, void *ptr)
}
/* zone case. get out zone. */
- z = (struct rt_slab_zone *)(((rt_ubase_t)ptr & ~RT_MM_PAGE_MASK) -
+ z = (struct rt_slab_zone *)(((rt_uintptr_t)ptr & ~RT_MM_PAGE_MASK) -
kup->size * RT_MM_PAGE_SIZE);
RT_ASSERT(z->z_magic == ZALLOC_SLAB_MAGIC);
@@ -811,7 +811,7 @@ void rt_slab_free(rt_slab_t m, void *ptr)
struct rt_slab_zone **pz;
LOG_D("free zone %#x, zoneindex %d",
- (rt_ubase_t)z, z->z_zoneindex);
+ (rt_uintptr_t)z, z->z_zoneindex);
/* remove zone from zone array list */
for (pz = &slab->zone_array[z->z_zoneindex]; z != *pz; pz = &(*pz)->z_next)