mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 02:01:18 -04:00
RDMA/core: Add FRMR pools statistics
Count for each pool the number of FRMR handles popped and held by user MRs. Also keep track of the max value of this counter. Next patches will expose the statistics through netlink. Signed-off-by: Michael Guralnik <michaelgur@nvidia.com> Reviewed-by: Yishai Hadas <yishaih@nvidia.com> Signed-off-by: Edward Srouji <edwards@nvidia.com> Link: https://patch.msgid.link/20260226-frmr_pools-v4-4-95360b54f15e@nvidia.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
committed by
Leon Romanovsky
parent
84cb1dd06f
commit
304725adec
@@ -310,19 +310,24 @@ static int get_frmr_from_pool(struct ib_device *device,
|
||||
if (pool->inactive_queue.ci > 0) {
|
||||
handle = pop_handle_from_queue_locked(
|
||||
&pool->inactive_queue);
|
||||
spin_unlock(&pool->lock);
|
||||
} else {
|
||||
spin_unlock(&pool->lock);
|
||||
err = pools->pool_ops->create_frmrs(device, &pool->key,
|
||||
&handle, 1);
|
||||
if (err)
|
||||
return err;
|
||||
spin_lock(&pool->lock);
|
||||
}
|
||||
} else {
|
||||
handle = pop_handle_from_queue_locked(&pool->queue);
|
||||
spin_unlock(&pool->lock);
|
||||
}
|
||||
|
||||
pool->in_use++;
|
||||
if (pool->in_use > pool->max_in_use)
|
||||
pool->max_in_use = pool->in_use;
|
||||
|
||||
spin_unlock(&pool->lock);
|
||||
|
||||
mr->frmr.pool = pool;
|
||||
mr->frmr.handle = handle;
|
||||
|
||||
@@ -374,6 +379,9 @@ int ib_frmr_pool_push(struct ib_device *device, struct ib_mr *mr)
|
||||
if (pool->queue.ci == 0)
|
||||
schedule_aging = true;
|
||||
ret = push_handle_to_queue_locked(&pool->queue, mr->frmr.handle);
|
||||
if (ret == 0)
|
||||
pool->in_use--;
|
||||
|
||||
spin_unlock(&pool->lock);
|
||||
|
||||
if (ret == 0 && schedule_aging)
|
||||
|
||||
@@ -42,6 +42,9 @@ struct ib_frmr_pool {
|
||||
|
||||
struct delayed_work aging_work;
|
||||
struct ib_device *device;
|
||||
|
||||
u32 max_in_use;
|
||||
u32 in_use;
|
||||
};
|
||||
|
||||
struct ib_frmr_pools {
|
||||
|
||||
Reference in New Issue
Block a user