Commit b51caeb2 authored by Jason Gunthorpe's avatar Jason Gunthorpe
Browse files

RDMA/core: Add rdma_udata_to_dev()

Get an ib_device out of a udata so it can be used for debug prints.

Link: https://patch.msgid.link/r/2-v3-bd56dd443069+49-bnxt_re_uapi_jgg@nvidia.com


Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent 38a6e557
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -389,3 +389,30 @@ int rdma_user_mmap_entry_insert(struct ib_ucontext *ucontext,
						 U32_MAX);
}
EXPORT_SYMBOL(rdma_user_mmap_entry_insert);

/**
 * rdma_udata_to_dev - Get a ib_device from a udata
 * @udata: The system calls ib_udata struct
 *
 * The struct ib_device that is handling the uverbs call. Must not be called if
 * udata is NULL. The result can be NULL.
 */
struct ib_device *rdma_udata_to_dev(struct ib_udata *udata)
{
	struct uverbs_attr_bundle *bundle =
		rdma_udata_to_uverbs_attr_bundle(udata);

	lockdep_assert_held(&bundle->ufile->device->disassociate_srcu);

	if (bundle->context)
		return bundle->context->device;

	/*
	 * If the context hasn't been created yet use the ufile's dev, but it
	 * might be NULL if we are racing with disassociate.
	 */
	return srcu_dereference(bundle->ufile->device->ib_dev,
				&bundle->ufile->device->disassociate_srcu);
}
EXPORT_SYMBOL(rdma_udata_to_dev);
+2 −0
Original line number Diff line number Diff line
@@ -667,6 +667,8 @@ rdma_udata_to_uverbs_attr_bundle(struct ib_udata *udata)
	(udata ? container_of(rdma_udata_to_uverbs_attr_bundle(udata)->context, \
			      drv_dev_struct, member) : (drv_dev_struct *)NULL)

struct ib_device *rdma_udata_to_dev(struct ib_udata *udata);

#define IS_UVERBS_COPY_ERR(_ret)		((_ret) && (_ret) != -ENOENT)

static inline const struct uverbs_attr *uverbs_attr_get(const struct uverbs_attr_bundle *attrs_bundle,