mm/mempool: add new api: xx_realloc and xx_alloc_size
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
This commit is contained in:
parent
4e179e8a85
commit
5828e5bb88
@ -258,6 +258,25 @@ int mempool_multiple_init(FAR struct mempool_multiple_s *mpool,
|
|||||||
FAR void *mempool_multiple_alloc(FAR struct mempool_multiple_s *mpool,
|
FAR void *mempool_multiple_alloc(FAR struct mempool_multiple_s *mpool,
|
||||||
size_t size);
|
size_t size);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: mempool_multiple_realloc
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Change the size of the block memory pointed to by oldblk to size bytes.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* mpool - The handle of multiple memory pool to be used.
|
||||||
|
* oldblk - The pointer to change the size of the block memory.
|
||||||
|
* size - The size of alloc blk.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* The pointer to the allocated block on success; NULL on any failure.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
FAR void *mempool_multiple_realloc(FAR struct mempool_multiple_s *mpool,
|
||||||
|
FAR void *oldblk, size_t size);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: mempool_multiple_free
|
* Name: mempool_multiple_free
|
||||||
*
|
*
|
||||||
@ -273,6 +292,22 @@ FAR void *mempool_multiple_alloc(FAR struct mempool_multiple_s *mpool,
|
|||||||
void mempool_multiple_free(FAR struct mempool_multiple_s *mpool,
|
void mempool_multiple_free(FAR struct mempool_multiple_s *mpool,
|
||||||
FAR void *blk);
|
FAR void *blk);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: mempool_multiple_alloc_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get size of memory block from multiple memory.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* blk - The pointer of memory block.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* The size of memory block.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
size_t mempool_multiple_alloc_size(FAR void *blk);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: mempool_multiple_fixed_alloc
|
* Name: mempool_multiple_fixed_alloc
|
||||||
*
|
*
|
||||||
@ -293,6 +328,28 @@ void mempool_multiple_free(FAR struct mempool_multiple_s *mpool,
|
|||||||
FAR void *mempool_multiple_fixed_alloc(FAR struct mempool_multiple_s *mpool,
|
FAR void *mempool_multiple_fixed_alloc(FAR struct mempool_multiple_s *mpool,
|
||||||
size_t size);
|
size_t size);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: mempool_multiple_fixed_realloc
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Change the size of the block memory pointed to by oldblk to size bytes.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* mpool - The handle of multiple memory pool to be used.
|
||||||
|
* oldblk - The pointer to change the size of the block memory.
|
||||||
|
* oldsize - The size of block memory to oldblk.
|
||||||
|
* size - The size of alloc blk.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* The pointer to the allocated block on success; NULL on any failure.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
FAR void *
|
||||||
|
mempool_multiple_fixed_realloc(FAR struct mempool_multiple_s *mpool,
|
||||||
|
FAR void *oldblk, size_t oldsize,
|
||||||
|
size_t size);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: mempool_multiple_fixed_free
|
* Name: mempool_multiple_fixed_free
|
||||||
*
|
*
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#define SIZEOF_HEAD sizeof(FAR struct mempool_s *)
|
#define SIZEOF_HEAD sizeof(FAR struct mempool_s *)
|
||||||
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||||
|
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Functions
|
* Private Functions
|
||||||
@ -150,6 +151,47 @@ FAR void *mempool_multiple_alloc(FAR struct mempool_multiple_s *mpool,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: mempool_multiple_realloc
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Change the size of the block memory pointed to by oldblk to size bytes.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* mpool - The handle of multiple memory pool to be used.
|
||||||
|
* oldblk - The pointer to change the size of the block memory.
|
||||||
|
* size - The size of alloc blk.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* The pointer to the allocated block on success; NULL on any failure.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
FAR void *mempool_multiple_realloc(FAR struct mempool_multiple_s *mpool,
|
||||||
|
FAR void *oldblk, size_t size)
|
||||||
|
{
|
||||||
|
FAR void *blk;
|
||||||
|
|
||||||
|
if (size < 1)
|
||||||
|
{
|
||||||
|
mempool_multiple_free(mpool, oldblk);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
blk = mempool_multiple_alloc(mpool, size);
|
||||||
|
if (blk != NULL && oldblk != NULL)
|
||||||
|
{
|
||||||
|
FAR struct mempool_s *oldpool;
|
||||||
|
|
||||||
|
oldpool = *(FAR struct mempool_s **)
|
||||||
|
((FAR char *)oldblk - SIZEOF_HEAD);
|
||||||
|
memcpy(blk, oldblk, MIN(oldpool->bsize, size));
|
||||||
|
mempool_multiple_free(mpool, oldblk);
|
||||||
|
}
|
||||||
|
|
||||||
|
return blk;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: mempool_multiple_free
|
* Name: mempool_multiple_free
|
||||||
*
|
*
|
||||||
@ -175,6 +217,32 @@ void mempool_multiple_free(FAR struct mempool_multiple_s *mpool,
|
|||||||
mempool_free(pool, mem);
|
mempool_free(pool, mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: mempool_multiple_alloc_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get size of memory block from multiple memory.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* blk - The pointer of memory block.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* The size of memory block.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
size_t mempool_multiple_alloc_size(FAR void *blk)
|
||||||
|
{
|
||||||
|
FAR struct mempool_s *pool;
|
||||||
|
FAR void *mem;
|
||||||
|
|
||||||
|
DEBUGASSERT(blk != NULL);
|
||||||
|
|
||||||
|
mem = (FAR char *)blk - SIZEOF_HEAD;
|
||||||
|
pool = *(FAR struct mempool_s **)mem;
|
||||||
|
return pool->bsize;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: mempool_multiple_fixed_alloc
|
* Name: mempool_multiple_fixed_alloc
|
||||||
*
|
*
|
||||||
@ -202,6 +270,45 @@ FAR void *mempool_multiple_fixed_alloc(FAR struct mempool_multiple_s *mpool,
|
|||||||
return mempool_alloc(pool);
|
return mempool_alloc(pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: mempool_multiple_fixed_realloc
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Change the size of the block memory pointed to by oldblk to size bytes.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* mpool - The handle of multiple memory pool to be used.
|
||||||
|
* oldblk - The pointer to change the size of the block memory.
|
||||||
|
* oldsize - The size of block memory to oldblk.
|
||||||
|
* size - The size of alloc blk.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* The pointer to the allocated block on success; NULL on any failure.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
FAR void *
|
||||||
|
mempool_multiple_fixed_realloc(FAR struct mempool_multiple_s *mpool,
|
||||||
|
FAR void *oldblk, size_t oldsize, size_t size)
|
||||||
|
{
|
||||||
|
FAR void *blk;
|
||||||
|
|
||||||
|
if (size < 1)
|
||||||
|
{
|
||||||
|
mempool_multiple_fixed_free(mpool, oldblk, oldsize);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
blk = mempool_multiple_fixed_alloc(mpool, size);
|
||||||
|
if (blk != NULL && oldblk != NULL)
|
||||||
|
{
|
||||||
|
memcpy(blk, oldblk, MIN(oldsize, size));
|
||||||
|
mempool_multiple_fixed_free(mpool, oldblk, oldsize);
|
||||||
|
}
|
||||||
|
|
||||||
|
return blk;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: mempool_multiple_fixed_free
|
* Name: mempool_multiple_fixed_free
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user