mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 08:36:24 +08:00
mempool/multiple_mempool: add private member delta in multiple-mempool
This delta describes the relationship between the block size of each mempool in multiple mempool by user initialized. It is automatically detected by the mempool_multiple_init function. If the delta is not equal to 0, the block size of the pool in the multiple mempool is an arithmetic progressions, otherwise it is an increasing progressions. Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
This commit is contained in:
@@ -44,6 +44,13 @@ mempool_multiple_find(FAR struct mempool_multiple_s *mpool, size_t size)
|
||||
size_t left = 0;
|
||||
size_t mid;
|
||||
|
||||
if (mpool->delta != 0)
|
||||
{
|
||||
left = mpool->pools[0].blocksize;
|
||||
mid = (size - left + mpool->delta - 1) / mpool->delta;
|
||||
return mid < right ? &mpool->pools[mid] : NULL;
|
||||
}
|
||||
|
||||
while (left < right)
|
||||
{
|
||||
mid = (left + right) >> 1;
|
||||
@@ -79,6 +86,9 @@ mempool_multiple_find(FAR struct mempool_multiple_s *mpool, size_t size)
|
||||
* interruptsize, wait. These mempool will be initialized by mempool_init.
|
||||
* The name of all mempool are "name".
|
||||
*
|
||||
* This function will initialize the member delta by detecting the
|
||||
* relationship between the each block size of mempool in multiple mempool.
|
||||
*
|
||||
* Input Parameters:
|
||||
* name - The name of memory pool.
|
||||
* mpool - The handle of the multiple memory pool to be used.
|
||||
@@ -95,6 +105,20 @@ int mempool_multiple_init(FAR struct mempool_multiple_s *mpool,
|
||||
|
||||
DEBUGASSERT(mpool != NULL && mpool->pools != NULL);
|
||||
|
||||
mpool->delta = 0;
|
||||
for (i = 1; i < mpool->npools; i++)
|
||||
{
|
||||
size_t delta = mpool->pools[i].blocksize -
|
||||
mpool->pools[i - 1].blocksize;
|
||||
if (mpool->delta != 0 && delta != mpool->delta)
|
||||
{
|
||||
mpool->delta = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
mpool->delta = delta;
|
||||
}
|
||||
|
||||
for (i = 0; i < mpool->npools; i++)
|
||||
{
|
||||
int ret = mempool_init(mpool->pools + i, name);
|
||||
|
||||
Reference in New Issue
Block a user