Commit 304725ad authored by Michael Guralnik's avatar Michael Guralnik Committed by Leon Romanovsky
Browse files

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: default avatarMichael Guralnik <michaelgur@nvidia.com>
Reviewed-by: default avatarYishai Hadas <yishaih@nvidia.com>
Signed-off-by: default avatarEdward Srouji <edwards@nvidia.com>
Link: https://patch.msgid.link/20260226-frmr_pools-v4-4-95360b54f15e@nvidia.com


Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent 84cb1dd0
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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)
+3 −0
Original line number Diff line number Diff line
@@ -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 {