mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-03 17:40:04 +00:00
IB/uverbs: Expose UAPI to query MR
Expose UAPI to query MR, this will let user space application that didn't allocate the MR but has access to by owning the matching command FD to retrieve its information. Link: https://lore.kernel.org/r/20200630093916.332097-8-leon@kernel.org Signed-off-by: Yishai Hadas <yishaih@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
05f71ef979
commit
6c01e6b218
2 changed files with 60 additions and 1 deletions
|
@ -148,6 +148,36 @@ static int UVERBS_HANDLER(UVERBS_METHOD_DM_MR_REG)(
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int UVERBS_HANDLER(UVERBS_METHOD_QUERY_MR)(
|
||||
struct uverbs_attr_bundle *attrs)
|
||||
{
|
||||
struct ib_mr *mr =
|
||||
uverbs_attr_get_obj(attrs, UVERBS_ATTR_QUERY_MR_HANDLE);
|
||||
int ret;
|
||||
|
||||
ret = uverbs_copy_to(attrs, UVERBS_ATTR_QUERY_MR_RESP_LKEY, &mr->lkey,
|
||||
sizeof(mr->lkey));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = uverbs_copy_to(attrs, UVERBS_ATTR_QUERY_MR_RESP_RKEY,
|
||||
&mr->rkey, sizeof(mr->rkey));
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = uverbs_copy_to(attrs, UVERBS_ATTR_QUERY_MR_RESP_LENGTH,
|
||||
&mr->length, sizeof(mr->length));
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = uverbs_copy_to(attrs, UVERBS_ATTR_QUERY_MR_RESP_IOVA,
|
||||
&mr->iova, sizeof(mr->iova));
|
||||
|
||||
return IS_UVERBS_COPY_ERR(ret) ? ret : 0;
|
||||
}
|
||||
|
||||
DECLARE_UVERBS_NAMED_METHOD(
|
||||
UVERBS_METHOD_ADVISE_MR,
|
||||
UVERBS_ATTR_IDR(UVERBS_ATTR_ADVISE_MR_PD_HANDLE,
|
||||
|
@ -165,6 +195,25 @@ DECLARE_UVERBS_NAMED_METHOD(
|
|||
UA_MANDATORY,
|
||||
UA_ALLOC_AND_COPY));
|
||||
|
||||
DECLARE_UVERBS_NAMED_METHOD(
|
||||
UVERBS_METHOD_QUERY_MR,
|
||||
UVERBS_ATTR_IDR(UVERBS_ATTR_QUERY_MR_HANDLE,
|
||||
UVERBS_OBJECT_MR,
|
||||
UVERBS_ACCESS_READ,
|
||||
UA_MANDATORY),
|
||||
UVERBS_ATTR_PTR_OUT(UVERBS_ATTR_QUERY_MR_RESP_RKEY,
|
||||
UVERBS_ATTR_TYPE(u32),
|
||||
UA_MANDATORY),
|
||||
UVERBS_ATTR_PTR_OUT(UVERBS_ATTR_QUERY_MR_RESP_LKEY,
|
||||
UVERBS_ATTR_TYPE(u32),
|
||||
UA_MANDATORY),
|
||||
UVERBS_ATTR_PTR_OUT(UVERBS_ATTR_QUERY_MR_RESP_LENGTH,
|
||||
UVERBS_ATTR_TYPE(u64),
|
||||
UA_MANDATORY),
|
||||
UVERBS_ATTR_PTR_OUT(UVERBS_ATTR_QUERY_MR_RESP_IOVA,
|
||||
UVERBS_ATTR_TYPE(u64),
|
||||
UA_OPTIONAL));
|
||||
|
||||
DECLARE_UVERBS_NAMED_METHOD(
|
||||
UVERBS_METHOD_DM_MR_REG,
|
||||
UVERBS_ATTR_IDR(UVERBS_ATTR_REG_DM_MR_HANDLE,
|
||||
|
@ -206,7 +255,8 @@ DECLARE_UVERBS_NAMED_OBJECT(
|
|||
UVERBS_TYPE_ALLOC_IDR(uverbs_free_mr),
|
||||
&UVERBS_METHOD(UVERBS_METHOD_DM_MR_REG),
|
||||
&UVERBS_METHOD(UVERBS_METHOD_MR_DESTROY),
|
||||
&UVERBS_METHOD(UVERBS_METHOD_ADVISE_MR));
|
||||
&UVERBS_METHOD(UVERBS_METHOD_ADVISE_MR),
|
||||
&UVERBS_METHOD(UVERBS_METHOD_QUERY_MR));
|
||||
|
||||
const struct uapi_definition uverbs_def_obj_mr[] = {
|
||||
UAPI_DEF_CHAIN_OBJ_TREE_NAMED(UVERBS_OBJECT_MR,
|
||||
|
|
|
@ -248,6 +248,7 @@ enum uverbs_methods_mr {
|
|||
UVERBS_METHOD_DM_MR_REG,
|
||||
UVERBS_METHOD_MR_DESTROY,
|
||||
UVERBS_METHOD_ADVISE_MR,
|
||||
UVERBS_METHOD_QUERY_MR,
|
||||
};
|
||||
|
||||
enum uverbs_attrs_mr_destroy_ids {
|
||||
|
@ -261,6 +262,14 @@ enum uverbs_attrs_advise_mr_cmd_attr_ids {
|
|||
UVERBS_ATTR_ADVISE_MR_SGE_LIST,
|
||||
};
|
||||
|
||||
enum uverbs_attrs_query_mr_cmd_attr_ids {
|
||||
UVERBS_ATTR_QUERY_MR_HANDLE,
|
||||
UVERBS_ATTR_QUERY_MR_RESP_LKEY,
|
||||
UVERBS_ATTR_QUERY_MR_RESP_RKEY,
|
||||
UVERBS_ATTR_QUERY_MR_RESP_LENGTH,
|
||||
UVERBS_ATTR_QUERY_MR_RESP_IOVA,
|
||||
};
|
||||
|
||||
enum uverbs_attrs_create_counters_cmd_attr_ids {
|
||||
UVERBS_ATTR_CREATE_COUNTERS_HANDLE,
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue