Commit dc6be441 authored by Patrisious Haddad's avatar Patrisious Haddad Committed by Leon Romanovsky
Browse files

RDMA/core: Add device ufile cleanup operation



Add a driver operation to allow preemptive cleanup of ufile HW resources
before the standard ufile cleanup flow begins. Thus, expediting the
final cleanup phase which leads to fast teardown overall.

This allows the use of driver specific clean up procedures to make the
cleanup process more efficient.

Signed-off-by: default avatarPatrisious Haddad <phaddad@nvidia.com>
Link: https://patch.msgid.link/cabe00d75132b5732cb515944e3c500a01fb0b4a.1730373303.git.leon@kernel.org


Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent 0bd2c61d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2759,6 +2759,7 @@ void ib_set_device_ops(struct ib_device *dev, const struct ib_device_ops *ops)
	SET_DEVICE_OP(dev_ops, resize_cq);
	SET_DEVICE_OP(dev_ops, set_vf_guid);
	SET_DEVICE_OP(dev_ops, set_vf_link_state);
	SET_DEVICE_OP(dev_ops, ufile_hw_cleanup);

	SET_OBJ_SIZE(dev_ops, ib_ah);
	SET_OBJ_SIZE(dev_ops, ib_counters);
+6 −1
Original line number Diff line number Diff line
@@ -880,9 +880,14 @@ static void ufile_destroy_ucontext(struct ib_uverbs_file *ufile,
static int __uverbs_cleanup_ufile(struct ib_uverbs_file *ufile,
				  enum rdma_remove_reason reason)
{
	struct uverbs_attr_bundle attrs = { .ufile = ufile };
	struct ib_ucontext *ucontext = ufile->ucontext;
	struct ib_device *ib_dev = ucontext->device;
	struct ib_uobject *obj, *next_obj;
	int ret = -EINVAL;
	struct uverbs_attr_bundle attrs = { .ufile = ufile };

	if (ib_dev->ops.ufile_hw_cleanup)
		ib_dev->ops.ufile_hw_cleanup(ufile);

	/*
	 * This shouldn't run while executing other commands on this
+6 −0
Original line number Diff line number Diff line
@@ -2675,6 +2675,12 @@ struct ib_device_ops {
	 */
	void (*del_sub_dev)(struct ib_device *sub_dev);

	/**
	 * ufile_cleanup - Attempt to cleanup ubojects HW resources inside
	 * the ufile.
	 */
	void (*ufile_hw_cleanup)(struct ib_uverbs_file *ufile);

	DECLARE_RDMA_OBJ_SIZE(ib_ah);
	DECLARE_RDMA_OBJ_SIZE(ib_counters);
	DECLARE_RDMA_OBJ_SIZE(ib_cq);