@@ -81,6 +81,7 @@ static const struct verbs_context_ops hns_common_ops = {
.create_srq = hns_roce_u_create_srq,
.modify_srq = hns_roce_u_modify_srq,
.query_srq = hns_roce_u_query_srq,
+ .destroy_srq = hns_roce_u_destroy_srq,
};
static struct verbs_context *hns_roce_alloc_context(struct ibv_device *ibdev,
@@ -306,6 +306,7 @@ struct ibv_srq *hns_roce_u_create_srq(struct ibv_pd *pd,
int hns_roce_u_modify_srq(struct ibv_srq *srq, struct ibv_srq_attr *srq_attr,
int srq_attr_mask);
int hns_roce_u_query_srq(struct ibv_srq *srq, struct ibv_srq_attr *srq_attr);
+int hns_roce_u_destroy_srq(struct ibv_srq *srq);
struct ibv_qp *hns_roce_u_create_qp(struct ibv_pd *pd,
struct ibv_qp_init_attr *attr);
@@ -596,6 +596,25 @@ int hns_roce_u_query_srq(struct ibv_srq *srq, struct ibv_srq_attr *srq_attr)
return ibv_cmd_query_srq(srq, srq_attr, &cmd, sizeof(cmd));
}
+int hns_roce_u_destroy_srq(struct ibv_srq *srq)
+{
+ int ret;
+
+ ret = ibv_cmd_destroy_srq(srq);
+ if (ret)
+ return ret;
+
+ hns_roce_free_db(to_hr_ctx(srq->context), to_hr_srq(srq)->db,
+ HNS_ROCE_QP_TYPE_DB);
+ hns_roce_free_buf(&to_hr_srq(srq)->buf);
+ free(to_hr_srq(srq)->wrid);
+ hns_roce_free_buf(&to_hr_srq(srq)->idx_que.buf);
+ free(to_hr_srq(srq)->idx_que.bitmap);
+ free(to_hr_srq(srq));
+
+ return 0;
+}
+
static int hns_roce_verify_qp(struct ibv_qp_init_attr *attr,
struct hns_roce_context *context)
{
This patch mainly implement the verbs of destroying srq for hip08 userspace library. Signed-off-by: Lijun Ou <oulijun@huawei.com> --- providers/hns/hns_roce_u.c | 1 + providers/hns/hns_roce_u.h | 1 + providers/hns/hns_roce_u_verbs.c | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+)