Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bdeacabd authored by Shamir Rabinovitch's avatar Shamir Rabinovitch Committed by Jason Gunthorpe
Browse files

IB: Remove 'uobject->context' dependency in object destroy APIs



Now that we have the udata passed to all the ib_xxx object destroy APIs
and the additional macro 'rdma_udata_to_drv_context' to get the
ib_ucontext from ib_udata stored in uverbs_attr_bundle, we can finally
start to remove the dependency of the drivers in the
ib_xxx->uobject->context.

Signed-off-by: default avatarShamir Rabinovitch <shamir.rabinovitch@oracle.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent c4367a26
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -240,7 +240,8 @@ void ib_uverbs_srq_event_handler(struct ib_event *event, void *context_ptr);
void ib_uverbs_event_handler(struct ib_event_handler *handler,
			     struct ib_event *event);
int ib_uverbs_dealloc_xrcd(struct ib_uobject *uobject, struct ib_xrcd *xrcd,
			   enum rdma_remove_reason why, struct ib_udata *udata);
			   enum rdma_remove_reason why,
			   struct uverbs_attr_bundle *attrs);

int uverbs_dealloc_mw(struct ib_mw *mw);
void ib_uverbs_detach_umcast(struct ib_qp *qp,
+4 −3
Original line number Diff line number Diff line
@@ -670,17 +670,18 @@ static int ib_uverbs_close_xrcd(struct uverbs_attr_bundle *attrs)
}

int ib_uverbs_dealloc_xrcd(struct ib_uobject *uobject, struct ib_xrcd *xrcd,
			   enum rdma_remove_reason why, struct ib_udata *udata)
			   enum rdma_remove_reason why,
			   struct uverbs_attr_bundle *attrs)
{
	struct inode *inode;
	int ret;
	struct ib_uverbs_device *dev = uobject->context->ufile->device;
	struct ib_uverbs_device *dev = attrs->ufile->device;

	inode = xrcd->inode;
	if (inode && !atomic_dec_and_test(&xrcd->usecnt))
		return 0;

	ret = ib_dealloc_xrcd(xrcd, udata);
	ret = ib_dealloc_xrcd(xrcd, &attrs->driver_udata);

	if (ib_is_destroy_retryable(ret, why, uobject)) {
		atomic_inc(&xrcd->usecnt);
+6 −6
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ static int uverbs_free_qp(struct ib_uobject *uobject,
	if (uqp->uxrcd)
		atomic_dec(&uqp->uxrcd->refcnt);

	ib_uverbs_release_uevent(uobject->context->ufile, &uqp->uevent);
	ib_uverbs_release_uevent(attrs->ufile, &uqp->uevent);
	return ret;
}

@@ -138,7 +138,7 @@ static int uverbs_free_wq(struct ib_uobject *uobject,
	if (ib_is_destroy_retryable(ret, why, uobject))
		return ret;

	ib_uverbs_release_uevent(uobject->context->ufile, &uwq->uevent);
	ib_uverbs_release_uevent(attrs->ufile, &uwq->uevent);
	return ret;
}

@@ -163,7 +163,7 @@ static int uverbs_free_srq(struct ib_uobject *uobject,
		atomic_dec(&us->uxrcd->refcnt);
	}

	ib_uverbs_release_uevent(uobject->context->ufile, uevent);
	ib_uverbs_release_uevent(attrs->ufile, uevent);
	return ret;
}

@@ -180,9 +180,9 @@ static int uverbs_free_xrcd(struct ib_uobject *uobject,
	if (ret)
		return ret;

	mutex_lock(&uobject->context->ufile->device->xrcd_tree_mutex);
	ret = ib_uverbs_dealloc_xrcd(uobject, xrcd, why, &attrs->driver_udata);
	mutex_unlock(&uobject->context->ufile->device->xrcd_tree_mutex);
	mutex_lock(&attrs->ufile->device->xrcd_tree_mutex);
	ret = ib_uverbs_dealloc_xrcd(uobject, xrcd, why, attrs);
	mutex_unlock(&attrs->ufile->device->xrcd_tree_mutex);

	return ret;
}
+1 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ static int uverbs_free_cq(struct ib_uobject *uobject,
		return ret;

	ib_uverbs_release_ucq(
		uobject->context->ufile,
		attrs->ufile,
		ev_queue ? container_of(ev_queue,
					struct ib_uverbs_completion_event_file,
					ev_queue) :
+2 −2
Original line number Diff line number Diff line
@@ -760,8 +760,8 @@ static int iwch_destroy_qp(struct ib_qp *ib_qp, struct ib_udata *udata)
	atomic_dec(&qhp->refcnt);
	wait_event(qhp->wait, !atomic_read(&qhp->refcnt));

	ucontext = ib_qp->uobject ? to_iwch_ucontext(ib_qp->uobject->context)
				  : NULL;
	ucontext = rdma_udata_to_drv_context(udata, struct iwch_ucontext,
					     ibucontext);
	cxio_destroy_qp(&rhp->rdev, &qhp->wq,
			ucontext ? &ucontext->uctx : &rhp->rdev.uctx);

Loading