Hi Leon, > -----Original Message----- > From: Leon Romanovsky <leon@xxxxxxxxxx> > Sent: Friday, November 30, 2018 5:17 AM > To: Doug Ledford <dledford@xxxxxxxxxx>; Jason Gunthorpe > <jgg@xxxxxxxxxxxx> > Cc: Leon Romanovsky <leonro@xxxxxxxxxxxx>; RDMA mailing list <linux- > rdma@xxxxxxxxxxxxxxx>; Parav Pandit <parav@xxxxxxxxxxxx> > Subject: [PATCH rdma-next 2/2] RDMA/uverbs: Add an ioctl method to > destroy an object > > From: Parav Pandit <parav@xxxxxxxxxxxx> > > Add an ioctl method to destroy following objects by its handle which doesn't > require any output response during destruction. > Objects: PD, MR, MW, AH, flow, RWQ indirection table and XRCD. > > Signed-off-by: Parav Pandit <parav@xxxxxxxxxxxx> > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> > --- > drivers/infiniband/core/uverbs_std_types.c | 60 +++++++++++++++++-- > drivers/infiniband/core/uverbs_std_types_mr.c | 10 +++- > include/uapi/rdma/ib_user_ioctl_cmds.h | 52 ++++++++++++++++ > 3 files changed, 115 insertions(+), 7 deletions(-) > > diff --git a/drivers/infiniband/core/uverbs_std_types.c > b/drivers/infiniband/core/uverbs_std_types.c > index 8db5d23ca087..f6e132405112 100644 > --- a/drivers/infiniband/core/uverbs_std_types.c > +++ b/drivers/infiniband/core/uverbs_std_types.c > @@ -228,36 +228,84 @@ DECLARE_UVERBS_NAMED_OBJECT( > UVERBS_OBJECT_QP, > UVERBS_TYPE_ALLOC_IDR_SZ(sizeof(struct ib_uqp_object), > uverbs_free_qp)); > > +DECLARE_UVERBS_NAMED_METHOD_DESTROY( > + UVERBS_METHOD_MW_DESTROY, > + UVERBS_ATTR_IDR(UVERBS_ATTR_DESTROY_MW_HANDLE, > + UVERBS_OBJECT_MW, > + UVERBS_ACCESS_DESTROY, > + UA_MANDATORY)); > + > DECLARE_UVERBS_NAMED_OBJECT(UVERBS_OBJECT_MW, > - UVERBS_TYPE_ALLOC_IDR(uverbs_free_mw)); > + UVERBS_TYPE_ALLOC_IDR(uverbs_free_mw), > + > &UVERBS_METHOD(UVERBS_METHOD_MW_DESTROY)); > > DECLARE_UVERBS_NAMED_OBJECT( > UVERBS_OBJECT_SRQ, > UVERBS_TYPE_ALLOC_IDR_SZ(sizeof(struct ib_usrq_object), > uverbs_free_srq)); > > +DECLARE_UVERBS_NAMED_METHOD_DESTROY( > + UVERBS_METHOD_AH_DESTROY, > + UVERBS_ATTR_IDR(UVERBS_ATTR_DESTROY_AH_HANDLE, > + UVERBS_OBJECT_AH, > + UVERBS_ACCESS_DESTROY, > + UA_MANDATORY)); > + > DECLARE_UVERBS_NAMED_OBJECT(UVERBS_OBJECT_AH, > - UVERBS_TYPE_ALLOC_IDR(uverbs_free_ah)); > + UVERBS_TYPE_ALLOC_IDR(uverbs_free_ah), > + > &UVERBS_METHOD(UVERBS_METHOD_AH_DESTROY)); > + > +DECLARE_UVERBS_NAMED_METHOD_DESTROY( > + UVERBS_METHOD_FLOW_DESTROY, > + UVERBS_ATTR_IDR(UVERBS_ATTR_DESTROY_FLOW_HANDLE, > + UVERBS_OBJECT_FLOW, > + UVERBS_ACCESS_DESTROY, > + UA_MANDATORY)); > > DECLARE_UVERBS_NAMED_OBJECT( > UVERBS_OBJECT_FLOW, > UVERBS_TYPE_ALLOC_IDR_SZ(sizeof(struct ib_uflow_object), > - uverbs_free_flow)); > + uverbs_free_flow), > + > &UVERBS_METHOD(UVERBS_METHOD_FLOW_DESTROY)); > > DECLARE_UVERBS_NAMED_OBJECT( > UVERBS_OBJECT_WQ, > UVERBS_TYPE_ALLOC_IDR_SZ(sizeof(struct ib_uwq_object), > uverbs_free_wq)); > > +DECLARE_UVERBS_NAMED_METHOD_DESTROY( > + UVERBS_METHOD_RWQ_IND_TBL_DESTROY, > + UVERBS_ATTR_IDR(UVERBS_ATTR_DESTROY_RWQ_IND_TBL_HANDLE, > + UVERBS_OBJECT_RWQ_IND_TBL, > + UVERBS_ACCESS_DESTROY, > + UA_MANDATORY)); > + > DECLARE_UVERBS_NAMED_OBJECT(UVERBS_OBJECT_RWQ_IND_TBL, > - > UVERBS_TYPE_ALLOC_IDR(uverbs_free_rwq_ind_tbl)); > + > UVERBS_TYPE_ALLOC_IDR(uverbs_free_rwq_ind_tbl), > + > &UVERBS_METHOD(UVERBS_METHOD_RWQ_IND_TBL_DESTROY)); > + > +DECLARE_UVERBS_NAMED_METHOD_DESTROY( > + UVERBS_METHOD_XRCD_DESTROY, > + UVERBS_ATTR_IDR(UVERBS_ATTR_DESTROY_XRCD_HANDLE, > + UVERBS_OBJECT_XRCD, > + UVERBS_ACCESS_DESTROY, > + UA_MANDATORY)); > > DECLARE_UVERBS_NAMED_OBJECT( > UVERBS_OBJECT_XRCD, > UVERBS_TYPE_ALLOC_IDR_SZ(sizeof(struct ib_uxrcd_object), > - uverbs_free_xrcd)); > + uverbs_free_xrcd), > + > &UVERBS_METHOD(UVERBS_METHOD_XRCD_DESTROY)); > + > +DECLARE_UVERBS_NAMED_METHOD_DESTROY( > + UVERBS_METHOD_PD_DESTROY, > + UVERBS_ATTR_IDR(UVERBS_ATTR_DESTROY_PD_HANDLE, > + UVERBS_OBJECT_PD, > + UVERBS_ACCESS_DESTROY, > + UA_MANDATORY)); > > DECLARE_UVERBS_NAMED_OBJECT(UVERBS_OBJECT_PD, > - UVERBS_TYPE_ALLOC_IDR(uverbs_free_pd)); > + UVERBS_TYPE_ALLOC_IDR(uverbs_free_pd), > + > &UVERBS_METHOD(UVERBS_METHOD_PD_DESTROY)); > > const struct uapi_definition uverbs_def_obj_intf[] = { > UAPI_DEF_CHAIN_OBJ_TREE_NAMED(UVERBS_OBJECT_PD, > diff --git a/drivers/infiniband/core/uverbs_std_types_mr.c > b/drivers/infiniband/core/uverbs_std_types_mr.c > index 0057ac3b507d..4c7aa87d3cb8 100644 > --- a/drivers/infiniband/core/uverbs_std_types_mr.c > +++ b/drivers/infiniband/core/uverbs_std_types_mr.c > @@ -197,11 +197,19 @@ DECLARE_UVERBS_NAMED_METHOD( > UVERBS_ATTR_TYPE(u32), > UA_MANDATORY)); > > +DECLARE_UVERBS_NAMED_METHOD_DESTROY( > + UVERBS_METHOD_MR_DESTROY, > + UVERBS_ATTR_IDR(UVERBS_ATTR_DESTROY_MR_HANDLE, > + UVERBS_OBJECT_MR, > + UVERBS_ACCESS_DESTROY, > + UA_MANDATORY)); > + > DECLARE_UVERBS_NAMED_OBJECT( > UVERBS_OBJECT_MR, > UVERBS_TYPE_ALLOC_IDR(uverbs_free_mr), > &UVERBS_METHOD(UVERBS_METHOD_ADVISE_MR), > - &UVERBS_METHOD(UVERBS_METHOD_DM_MR_REG)); > + &UVERBS_METHOD(UVERBS_METHOD_DM_MR_REG), > + &UVERBS_METHOD(UVERBS_METHOD_MR_DESTROY)); > > const struct uapi_definition uverbs_def_obj_mr[] = { > UAPI_DEF_CHAIN_OBJ_TREE_NAMED(UVERBS_OBJECT_MR, > diff --git a/include/uapi/rdma/ib_user_ioctl_cmds.h > b/include/uapi/rdma/ib_user_ioctl_cmds.h > index d83de187c112..5e5d962aa17d 100644 > --- a/include/uapi/rdma/ib_user_ioctl_cmds.h > +++ b/include/uapi/rdma/ib_user_ioctl_cmds.h > @@ -154,6 +154,11 @@ enum uverbs_attrs_advise_mr_cmd_attr_ids { > enum uverbs_methods_mr { > UVERBS_METHOD_DM_MR_REG, > UVERBS_METHOD_ADVISE_MR, > + UVERBS_METHOD_MR_DESTROY, > +}; You posted my patches first. In tree Moni's patches were present before me. So these patches needs to apply in same order or Jason need to resolve merge conflicts.