diff options
| author | Hans Petter Selasky <hselasky@FreeBSD.org> | 2021-06-16 13:02:00 +0000 |
|---|---|---|
| committer | Hans Petter Selasky <hselasky@FreeBSD.org> | 2021-07-28 11:28:29 +0000 |
| commit | b633e08c705fe43180567eae26923d6f6f98c8d9 (patch) | |
| tree | 93ab9ef5927af0b117fa672984d57e8bc4f6ce00 /sys/dev/qlnx | |
| parent | 273728b1257fa4f6c945bca592227e29763fc4a7 (diff) | |
Diffstat (limited to 'sys/dev/qlnx')
| -rw-r--r-- | sys/dev/qlnx/qlnxr/qlnxr_def.h | 1 | ||||
| -rw-r--r-- | sys/dev/qlnx/qlnxr/qlnxr_os.c | 7 | ||||
| -rw-r--r-- | sys/dev/qlnx/qlnxr/qlnxr_verbs.c | 243 | ||||
| -rw-r--r-- | sys/dev/qlnx/qlnxr/qlnxr_verbs.h | 62 |
4 files changed, 107 insertions, 206 deletions
diff --git a/sys/dev/qlnx/qlnxr/qlnxr_def.h b/sys/dev/qlnx/qlnxr/qlnxr_def.h index 9bc663e2a8d0..2b9b378a1468 100644 --- a/sys/dev/qlnx/qlnxr/qlnxr_def.h +++ b/sys/dev/qlnx/qlnxr/qlnxr_def.h @@ -65,6 +65,7 @@ #include <rdma/ib_umem.h> #include <rdma/ib_mad.h> #include <rdma/ib_sa.h> +#include <rdma/uverbs_ioctl.h> #if __FreeBSD_version < 1100000 #undef MODULE_VERSION diff --git a/sys/dev/qlnx/qlnxr/qlnxr_os.c b/sys/dev/qlnx/qlnxr/qlnxr_os.c index 62c0f2091d2f..6190a69e413f 100644 --- a/sys/dev/qlnx/qlnxr/qlnxr_os.c +++ b/sys/dev/qlnx/qlnxr/qlnxr_os.c @@ -156,6 +156,13 @@ qlnxr_register_device(qlnxr_dev_t *dev) ibdev = &dev->ibdev; +#define qlnxr_ib_ah qlnxr_ah +#define qlnxr_ib_cq qlnxr_cq +#define qlnxr_ib_pd qlnxr_pd +#define qlnxr_ib_qp qlnxr_qp +#define qlnxr_ib_srq qlnxr_srq +#define qlnxr_ib_ucontext qlnxr_ucontext + INIT_IB_DEVICE_OPS(&ibdev->ops, qlnxr, QLNXR); strlcpy(ibdev->name, "qlnxr%d", IB_DEVICE_NAME_MAX); memset(&ibdev->node_guid, 0, sizeof(ibdev->node_guid)); diff --git a/sys/dev/qlnx/qlnxr/qlnxr_verbs.c b/sys/dev/qlnx/qlnxr/qlnxr_verbs.c index c078df0365f9..d39f1946c641 100644 --- a/sys/dev/qlnx/qlnxr/qlnxr_verbs.c +++ b/sys/dev/qlnx/qlnxr/qlnxr_verbs.c @@ -71,8 +71,7 @@ __FBSDID("$FreeBSD$"); ((unsigned char *)&addr)[3] static int -qlnxr_check_srq_params(struct ib_pd *ibpd, - struct qlnxr_dev *dev, +qlnxr_check_srq_params(struct qlnxr_dev *dev, struct ib_srq_init_attr *attrs); static int @@ -159,9 +158,10 @@ qlnxr_query_gid(struct ib_device *ibdev, u8 port, int index, return 0; } -struct ib_srq * -qlnxr_create_srq(struct ib_pd *ibpd, struct ib_srq_init_attr *init_attr, - struct ib_udata *udata) +int +qlnxr_create_srq(struct ib_srq *ibsrq, + struct ib_srq_init_attr *init_attr, + struct ib_udata *udata) { struct qlnxr_dev *dev; qlnx_host_t *ha; @@ -169,36 +169,28 @@ qlnxr_create_srq(struct ib_pd *ibpd, struct ib_srq_init_attr *init_attr, struct ecore_rdma_create_srq_out_params out_params; struct ecore_rdma_create_srq_in_params in_params; u64 pbl_base_addr, phy_prod_pair_addr; - struct qlnxr_pd *pd = get_qlnxr_pd(ibpd); - struct ib_ucontext *ib_ctx = NULL; struct qlnxr_srq_hwq_info *hw_srq; - struct qlnxr_ucontext *ctx = NULL; + struct qlnxr_ucontext *ctx; struct qlnxr_create_srq_ureq ureq; u32 page_cnt, page_size; - struct qlnxr_srq *srq; + struct qlnxr_srq *srq = get_qlnxr_srq(ibsrq); int ret = 0; - dev = get_qlnxr_dev((ibpd->device)); + dev = get_qlnxr_dev(ibsrq->device); ha = dev->ha; QL_DPRINT12(ha, "enter\n"); - ret = qlnxr_check_srq_params(ibpd, dev, init_attr); - - srq = kzalloc(sizeof(*srq), GFP_KERNEL); - if (!srq) { - QL_DPRINT11(ha, "cannot allocate memory for srq\n"); - return NULL; //@@@ : TODO what to return here? - } + ret = qlnxr_check_srq_params(dev, init_attr); srq->dev = dev; hw_srq = &srq->hw_srq; spin_lock_init(&srq->lock); memset(&in_params, 0, sizeof(in_params)); - if (udata && ibpd->uobject && ibpd->uobject->context) { - ib_ctx = ibpd->uobject->context; - ctx = get_qlnxr_ucontext(ib_ctx); + if (udata) { + ctx = rdma_udata_to_drv_context( + udata, struct qlnxr_ucontext, ibucontext); memset(&ureq, 0, sizeof(ureq)); if (ib_copy_from_udata(&ureq, udata, min(sizeof(ureq), @@ -208,7 +200,7 @@ qlnxr_create_srq(struct ib_pd *ibpd, struct ib_srq_init_attr *init_attr, goto err0; } - ret = qlnxr_init_srq_user_params(ib_ctx, srq, &ureq, 0, 0); + ret = qlnxr_init_srq_user_params(&ctx->ibucontext, srq, &ureq, 0, 0); if (ret) goto err0; @@ -232,7 +224,7 @@ qlnxr_create_srq(struct ib_pd *ibpd, struct ib_srq_init_attr *init_attr, page_size = pbl->elem_per_page << 4; } - in_params.pd_id = pd->pd_id; + in_params.pd_id = get_qlnxr_pd(ibsrq->pd)->pd_id; in_params.pbl_base_addr = pbl_base_addr; in_params.prod_pair_addr = phy_prod_pair_addr; in_params.num_pages = page_cnt; @@ -251,7 +243,7 @@ qlnxr_create_srq(struct ib_pd *ibpd, struct ib_srq_init_attr *init_attr, } QL_DPRINT12(ha, "created srq with srq_id = 0x%0x\n", srq->srq_id); - return &srq->ibsrq; + return (0); err2: memset(&in_params, 0, sizeof(in_params)); destroy_in_params.srq_id = srq->srq_id; @@ -264,12 +256,11 @@ err1: qlnxr_free_srq_kernel_params(srq); err0: - kfree(srq); - return ERR_PTR(-EFAULT); + return (-EFAULT); } -int -qlnxr_destroy_srq(struct ib_srq *ibsrq) +void +qlnxr_destroy_srq(struct ib_srq *ibsrq, struct ib_udata *udata) { struct qlnxr_dev *dev; struct qlnxr_srq *srq; @@ -291,8 +282,6 @@ qlnxr_destroy_srq(struct ib_srq *ibsrq) qlnxr_free_srq_kernel_params(srq); QL_DPRINT12(ha, "destroyed srq_id=0x%0x\n", srq->srq_id); - kfree(srq); - return 0; } int @@ -718,11 +707,11 @@ qlnxr_link_layer(struct ib_device *ibdev, uint8_t port_num) return IB_LINK_LAYER_ETHERNET; } -struct ib_pd * -qlnxr_alloc_pd(struct ib_device *ibdev, struct ib_ucontext *context, - struct ib_udata *udata) +int +qlnxr_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata) { - struct qlnxr_pd *pd = NULL; + struct ib_device *ibdev = ibpd->device; + struct qlnxr_pd *pd = get_qlnxr_pd(ibpd); u16 pd_id; int rc; struct qlnxr_dev *dev; @@ -731,8 +720,7 @@ qlnxr_alloc_pd(struct ib_device *ibdev, struct ib_ucontext *context, dev = get_qlnxr_dev(ibdev); ha = dev->ha; - QL_DPRINT12(ha, "ibdev = %p context = %p" - " udata = %p enter\n", ibdev, context, udata); + QL_DPRINT12(ha, "ibdev = %p udata = %p enter\n", ibdev, udata); if (dev->rdma_ctx == NULL) { QL_DPRINT11(ha, "dev->rdma_ctx = NULL\n"); @@ -740,13 +728,6 @@ qlnxr_alloc_pd(struct ib_device *ibdev, struct ib_ucontext *context, goto err; } - pd = kzalloc(sizeof(*pd), GFP_KERNEL); - if (!pd) { - rc = -ENOMEM; - QL_DPRINT11(ha, "kzalloc(pd) = NULL\n"); - goto err; - } - rc = ecore_rdma_alloc_pd(dev->rdma_ctx, &pd_id); if (rc) { QL_DPRINT11(ha, "ecore_rdma_alloc_pd failed\n"); @@ -755,7 +736,7 @@ qlnxr_alloc_pd(struct ib_device *ibdev, struct ib_ucontext *context, pd->pd_id = pd_id; - if (udata && context) { + if (udata) { rc = ib_copy_to_udata(udata, &pd->pd_id, sizeof(pd->pd_id)); if (rc) { QL_DPRINT11(ha, "ib_copy_to_udata failed\n"); @@ -763,7 +744,8 @@ qlnxr_alloc_pd(struct ib_device *ibdev, struct ib_ucontext *context, goto err; } - pd->uctx = get_qlnxr_ucontext(context); + pd->uctx = rdma_udata_to_drv_context( + udata, struct qlnxr_ucontext, ibucontext); pd->uctx->pd = pd; } @@ -771,16 +753,15 @@ qlnxr_alloc_pd(struct ib_device *ibdev, struct ib_ucontext *context, QL_DPRINT12(ha, "exit [pd, pd_id, pd_count] = [%p, 0x%x, %d]\n", pd, pd_id, dev->pd_count); - return &pd->ibpd; + return (0); err: - kfree(pd); QL_DPRINT12(ha, "exit -1\n"); - return ERR_PTR(rc); + return (rc); } -int -qlnxr_dealloc_pd(struct ib_pd *ibpd) +void +qlnxr_dealloc_pd(struct ib_pd *ibpd, struct ib_udata *udata) { struct qlnxr_pd *pd; struct qlnxr_dev *dev; @@ -796,14 +777,12 @@ qlnxr_dealloc_pd(struct ib_pd *ibpd) QL_DPRINT11(ha, "pd = NULL\n"); } else { ecore_rdma_free_pd(dev->rdma_ctx, pd->pd_id); - kfree(pd); atomic_subtract_rel_32(&dev->pd_count, 1); QL_DPRINT12(ha, "exit [pd, pd_id, pd_count] = [%p, 0x%x, %d]\n", pd, pd->pd_id, dev->pd_count); } QL_DPRINT12(ha, "exit\n"); - return 0; } #define ROCE_WQE_ELEM_SIZE sizeof(struct rdma_sq_sge) @@ -977,24 +956,18 @@ qlnxr_search_mmap(struct qlnxr_ucontext *uctx, u64 phy_addr, unsigned long len) return found; } -struct -ib_ucontext *qlnxr_alloc_ucontext(struct ib_device *ibdev, - struct ib_udata *udata) +int +qlnxr_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata) { int rc; - struct qlnxr_ucontext *ctx; + struct qlnxr_ucontext *ctx = get_qlnxr_ucontext(uctx); struct qlnxr_alloc_ucontext_resp uresp; - struct qlnxr_dev *dev = get_qlnxr_dev(ibdev); + struct qlnxr_dev *dev = get_qlnxr_dev(uctx->device); qlnx_host_t *ha = dev->ha; struct ecore_rdma_add_user_out_params oparams; - if (!udata) { - return ERR_PTR(-EFAULT); - } - - ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); - if (!ctx) - return ERR_PTR(-ENOMEM); + if (!udata) + return -EFAULT; rc = ecore_rdma_add_user(dev->rdma_ctx, &oparams); if (rc) { @@ -1044,20 +1017,18 @@ ib_ucontext *qlnxr_alloc_ucontext(struct ib_device *ibdev, QL_DPRINT12(ha, "Allocated user context %p\n", &ctx->ibucontext); - return &ctx->ibucontext; + return (0); err: - kfree(ctx); - return ERR_PTR(rc); + return (rc); } -int +void qlnxr_dealloc_ucontext(struct ib_ucontext *ibctx) { struct qlnxr_ucontext *uctx = get_qlnxr_ucontext(ibctx); struct qlnxr_dev *dev = uctx->dev; qlnx_host_t *ha = dev->ha; struct qlnxr_mm *mm, *tmp; - int status = 0; QL_DPRINT12(ha, "Deallocating user context %p\n", uctx); @@ -1073,8 +1044,6 @@ qlnxr_dealloc_ucontext(struct ib_ucontext *ibctx) list_del(&mm->entry); kfree(mm); } - kfree(uctx); - return status; } int @@ -1662,7 +1631,7 @@ err0: } int -qlnxr_dereg_mr(struct ib_mr *ib_mr) +qlnxr_dereg_mr(struct ib_mr *ib_mr, struct ib_udata *udata) { struct qlnxr_mr *mr = get_qlnxr_mr(ib_mr); struct qlnxr_dev *dev = get_qlnxr_dev((ib_mr->device)); @@ -1822,35 +1791,10 @@ err: return rc; } -#if __FreeBSD_version >= 1102000 - -struct ib_cq * -qlnxr_create_cq(struct ib_device *ibdev, - const struct ib_cq_init_attr *attr, - struct ib_ucontext *ib_ctx, - struct ib_udata *udata) - -#else - -#if __FreeBSD_version >= 1100000 - -struct ib_cq * -qlnxr_create_cq(struct ib_device *ibdev, - struct ib_cq_init_attr *attr, - struct ib_ucontext *ib_ctx, - struct ib_udata *udata) - -#else - -struct ib_cq * -qlnxr_create_cq(struct ib_device *ibdev, - int entries, - int vector, - struct ib_ucontext *ib_ctx, - struct ib_udata *udata) -#endif /* #if __FreeBSD_version >= 1100000 */ - -#endif /* #if __FreeBSD_version >= 1102000 */ +int +qlnxr_create_cq(struct ib_cq *ibcq, + const struct ib_cq_init_attr *attr, + struct ib_udata *udata) { struct qlnxr_ucontext *ctx; struct ecore_rdma_destroy_cq_out_params destroy_oparams; @@ -1863,13 +1807,13 @@ qlnxr_create_cq(struct ib_device *ibdev, int vector = attr->comp_vector; int entries = attr->cqe; #endif - struct qlnxr_cq *cq; + struct qlnxr_cq *cq = get_qlnxr_cq(ibcq); int chain_entries, rc, page_cnt; u64 pbl_ptr; u16 icid; qlnx_host_t *ha; - dev = get_qlnxr_dev(ibdev); + dev = get_qlnxr_dev(ibcq->device); ha = dev->ha; QL_DPRINT12(ha, "called from %s. entries = %d, " @@ -1885,17 +1829,15 @@ qlnxr_create_cq(struct ib_device *ibdev, "the number of entries %d is too high. " "Must be equal or below %d.\n", entries, QLNXR_MAX_CQES); - return ERR_PTR(-EINVAL); + return -EINVAL; } chain_entries = qlnxr_align_cq_entries(entries); chain_entries = min_t(int, chain_entries, QLNXR_MAX_CQES); - cq = qlnx_zalloc((sizeof(struct qlnxr_cq))); - - if (!cq) - return ERR_PTR(-ENOMEM); - if (udata) { + ctx = rdma_udata_to_drv_context( + udata, struct qlnxr_ucontext, ibucontext); + memset(&ureq, 0, sizeof(ureq)); if (ib_copy_from_udata(&ureq, udata, @@ -1911,13 +1853,15 @@ qlnxr_create_cq(struct ib_device *ibdev, cq->cq_type = QLNXR_CQ_TYPE_USER; - qlnxr_init_user_queue(ib_ctx, dev, &cq->q, ureq.addr, ureq.len, + qlnxr_init_user_queue(&ctx->ibucontext, dev, &cq->q, ureq.addr, ureq.len, IB_ACCESS_LOCAL_WRITE, 1, 1); pbl_ptr = cq->q.pbl_tbl->pa; page_cnt = cq->q.pbl_info.num_pbes; cq->ibcq.cqe = chain_entries; } else { + ctx = NULL; + cq->cq_type = QLNXR_CQ_TYPE_KERNEL; rc = ecore_chain_alloc(&dev->ha->cdev, @@ -1944,8 +1888,7 @@ qlnxr_create_cq(struct ib_device *ibdev, params.pbl_ptr = pbl_ptr; params.pbl_two_level = 0; - if (ib_ctx != NULL) { - ctx = get_qlnxr_ucontext(ib_ctx); + if (udata) { params.dpi = ctx->dpi; } else { params.dpi = dev->dpi; @@ -1959,7 +1902,7 @@ qlnxr_create_cq(struct ib_device *ibdev, cq->sig = QLNXR_CQ_MAGIC_NUMBER; spin_lock_init(&cq->cq_lock); - if (ib_ctx) { + if (udata) { rc = qlnxr_copy_cq_uresp(dev, cq, udata); if (rc) goto err3; @@ -1990,7 +1933,7 @@ qlnxr_create_cq(struct ib_device *ibdev, " number of entries = 0x%x\n", cq->icid, cq, params.cq_size); QL_DPRINT12(ha,"cq_addr = %p\n", cq); - return &cq->ibcq; + return (0); err3: destroy_iparams.icid = cq->icid; @@ -2004,11 +1947,9 @@ err1: if (udata) ib_umem_release(cq->q.umem); err0: - kfree(cq); - QL_DPRINT12(ha, "exit error\n"); - return ERR_PTR(-EINVAL); + return (-EINVAL); } int qlnxr_resize_cq(struct ib_cq *ibcq, int new_cnt, struct ib_udata *udata) @@ -2024,8 +1965,8 @@ int qlnxr_resize_cq(struct ib_cq *ibcq, int new_cnt, struct ib_udata *udata) return status; } -int -qlnxr_destroy_cq(struct ib_cq *ibcq) +void +qlnxr_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata) { struct qlnxr_dev *dev = get_qlnxr_dev((ibcq->device)); struct ecore_rdma_destroy_cq_out_params oparams; @@ -2055,25 +1996,21 @@ qlnxr_destroy_cq(struct ib_cq *ibcq) if (rc) { QL_DPRINT12(ha, "ecore_rdma_destroy_cq failed cq_id = %d\n", cq->icid); - return rc; + return; } QL_DPRINT12(ha, "free cq->pbl cq_id = %d\n", cq->icid); ecore_chain_free(&dev->ha->cdev, &cq->pbl); } - if (ibcq->uobject && ibcq->uobject->context) { + if (udata) { qlnxr_free_pbl(dev, &cq->q.pbl_info, cq->q.pbl_tbl); ib_umem_release(cq->q.umem); } cq->sig = ~cq->sig; - kfree(cq); - QL_DPRINT12(ha, "exit cq_id = %d\n", cq->icid); - - return rc; } static int @@ -2393,8 +2330,7 @@ qlnxr_set_common_qp_params(struct qlnxr_dev *dev, } static int -qlnxr_check_srq_params(struct ib_pd *ibpd, - struct qlnxr_dev *dev, +qlnxr_check_srq_params(struct qlnxr_dev *dev, struct ib_srq_init_attr *attrs) { struct ecore_rdma_device *qattr; @@ -3281,8 +3217,6 @@ qlnxr_create_qp(struct ib_pd *ibpd, return &qp->ibqp; err: - kfree(qp); - QL_DPRINT12(ha, "failed exit\n"); return ERR_PTR(-EFAULT); } @@ -3987,9 +3921,9 @@ qlnxr_cleanup_kernel(struct qlnxr_dev *dev, struct qlnxr_qp *qp) return; } -int +static int qlnxr_free_qp_resources(struct qlnxr_dev *dev, - struct qlnxr_qp *qp) + struct qlnxr_qp *qp, struct ib_udata *udata) { int rc = 0; qlnx_host_t *ha; @@ -4007,13 +3941,13 @@ qlnxr_free_qp_resources(struct qlnxr_dev *dev, return rc; } - if (qp->ibqp.uobject && qp->ibqp.uobject->context) + if (udata) qlnxr_cleanup_user(dev, qp); else qlnxr_cleanup_kernel(dev, qp); #endif - if (qp->ibqp.uobject && qp->ibqp.uobject->context) + if (udata) qlnxr_cleanup_user(dev, qp); else qlnxr_cleanup_kernel(dev, qp); @@ -4030,7 +3964,7 @@ qlnxr_free_qp_resources(struct qlnxr_dev *dev, } int -qlnxr_destroy_qp(struct ib_qp *ibqp) +qlnxr_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata) { struct qlnxr_qp *qp = get_qlnxr_qp(ibqp); struct qlnxr_dev *dev = qp->dev; @@ -4060,12 +3994,11 @@ qlnxr_destroy_qp(struct ib_qp *ibqp) qp->sig = ~qp->sig; - qlnxr_free_qp_resources(dev, qp); + qlnxr_free_qp_resources(dev, qp, udata); if (atomic_dec_and_test(&qp->refcnt)) { /* TODO: only for iWARP? */ qlnxr_idr_remove(dev, qp->qp_id); - kfree(qp); } QL_DPRINT12(ha, "exit\n"); @@ -5837,7 +5770,8 @@ err0: #if __FreeBSD_version >= 1102000 struct ib_mr * -qlnxr_alloc_mr(struct ib_pd *ibpd, enum ib_mr_type mr_type, u32 max_num_sg) +qlnxr_alloc_mr(struct ib_pd *ibpd, enum ib_mr_type mr_type, + u32 max_num_sg, struct ib_udata *udata) { struct qlnxr_dev *dev; struct qlnxr_mr *mr; @@ -6266,48 +6200,28 @@ err0: #endif /* #if __FreeBSD_version >= 1102000 */ -struct ib_ah * -#if __FreeBSD_version >= 1102000 -qlnxr_create_ah(struct ib_pd *ibpd, struct ib_ah_attr *attr, +int +qlnxr_create_ah(struct ib_ah *ibah, + struct ib_ah_attr *attr, u32 flags, struct ib_udata *udata) -#else -qlnxr_create_ah(struct ib_pd *ibpd, struct ib_ah_attr *attr) -#endif /* #if __FreeBSD_version >= 1102000 */ { struct qlnxr_dev *dev; qlnx_host_t *ha; - struct qlnxr_ah *ah; + struct qlnxr_ah *ah = get_qlnxr_ah(ibah); - dev = get_qlnxr_dev((ibpd->device)); + dev = get_qlnxr_dev(ibah->device); ha = dev->ha; QL_DPRINT12(ha, "in create_ah\n"); - ah = kzalloc(sizeof(*ah), GFP_ATOMIC); - if (!ah) { - QL_DPRINT12(ha, "no address handle can be allocated\n"); - return ERR_PTR(-ENOMEM); - } - ah->attr = *attr; - return &ah->ibah; + return (0); } -int -qlnxr_destroy_ah(struct ib_ah *ibah) +void +qlnxr_destroy_ah(struct ib_ah *ibah, u32 flags) { - struct qlnxr_dev *dev; - qlnx_host_t *ha; - struct qlnxr_ah *ah = get_qlnxr_ah(ibah); - - dev = get_qlnxr_dev((ibah->device)); - ha = dev->ha; - - QL_DPRINT12(ha, "in destroy_ah\n"); - - kfree(ah); - return 0; } int @@ -7187,7 +7101,6 @@ qlnxr_iw_qp_rem_ref(struct ib_qp *ibqp) if (atomic_dec_and_test(&qp->refcnt)) { qlnxr_idr_remove(qp->dev, qp->qp_id); - kfree(qp); } QL_DPRINT12(ha, "exit \n"); diff --git a/sys/dev/qlnx/qlnxr/qlnxr_verbs.h b/sys/dev/qlnx/qlnxr/qlnxr_verbs.h index 985587dbd9ed..8e5b313ea47e 100644 --- a/sys/dev/qlnx/qlnxr/qlnxr_verbs.h +++ b/sys/dev/qlnx/qlnxr/qlnxr_verbs.h @@ -40,11 +40,12 @@ extern int qlnxr_query_gid(struct ib_device *, int index, union ib_gid *gid); -extern struct ib_srq *qlnxr_create_srq(struct ib_pd *, +extern int qlnxr_create_srq(struct ib_srq *ibsrq, struct ib_srq_init_attr *, struct ib_udata *); -extern int qlnxr_destroy_srq(struct ib_srq *); +extern void qlnxr_destroy_srq(struct ib_srq *, + struct ib_udata *); extern int qlnxr_modify_srq(struct ib_srq *, struct ib_srq_attr *, @@ -79,33 +80,15 @@ extern int qlnxr_modify_port(struct ib_device *, extern enum rdma_link_layer qlnxr_link_layer(struct ib_device *device, uint8_t port_num); -struct ib_pd *qlnxr_alloc_pd(struct ib_device *, - struct ib_ucontext *, - struct ib_udata *); +extern int qlnxr_alloc_pd(struct ib_pd *ibpd, struct ib_udata *); -extern int qlnxr_dealloc_pd(struct ib_pd *pd); +extern void qlnxr_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata); -#if __FreeBSD_version >= 1102000 -extern struct ib_cq *qlnxr_create_cq(struct ib_device *ibdev, - const struct ib_cq_init_attr *attr, - struct ib_ucontext *ib_ctx, - struct ib_udata *udata); -#else -#if __FreeBSD_version >= 1100000 -extern struct ib_cq *qlnxr_create_cq(struct ib_device *ibdev, - struct ib_cq_init_attr *attr, - struct ib_ucontext *ib_ctx, - struct ib_udata *udata); -#else -extern struct ib_cq *qlnxr_create_cq(struct ib_device *ibdev, - int cqe, - int comp_vector, - struct ib_ucontext *ib_ctx, - struct ib_udata *udata); -#endif -#endif /* #if __FreeBSD_version >= 1102000 */ +extern int qlnxr_create_cq(struct ib_cq *ibcq, + const struct ib_cq_init_attr *attr, + struct ib_udata *udata); -extern int qlnxr_destroy_cq(struct ib_cq *); +extern void qlnxr_destroy_cq(struct ib_cq *, struct ib_udata *); extern int qlnxr_resize_cq(struct ib_cq *, int cqe, @@ -129,22 +112,17 @@ extern int qlnxr_query_qp(struct ib_qp *, int qp_attr_mask, struct ib_qp_init_attr *); -extern int qlnxr_destroy_qp(struct ib_qp *); +extern int qlnxr_destroy_qp(struct ib_qp *, struct ib_udata *); extern int qlnxr_query_pkey(struct ib_device *, u8 port, u16 index, u16 *pkey); -#if __FreeBSD_version >= 1102000 -extern struct ib_ah *qlnxr_create_ah(struct ib_pd *ibpd, - struct ib_ah_attr *attr, struct ib_udata *udata); -#else -extern struct ib_ah *qlnxr_create_ah(struct ib_pd *ibpd, - struct ib_ah_attr *attr); -#endif /* #if __FreeBSD_version >= 1102000 */ - -extern int qlnxr_destroy_ah(struct ib_ah *ibah); +extern int qlnxr_create_ah(struct ib_ah *ibah, + struct ib_ah_attr *attr, u32 flags, + struct ib_udata *udata); +extern void qlnxr_destroy_ah(struct ib_ah *ibah, u32 flags); extern int qlnxr_query_ah(struct ib_ah *ibah, struct ib_ah_attr *attr); @@ -195,7 +173,7 @@ extern struct ib_mr *qlnxr_reg_kernel_mr(struct ib_pd *, u64 *iova_start); #endif /* #if __FreeBSD_version < 1102000 */ -extern int qlnxr_dereg_mr(struct ib_mr *); +extern int qlnxr_dereg_mr(struct ib_mr *, struct ib_udata *); #if __FreeBSD_version >= 1102000 extern struct ib_mr *qlnxr_reg_user_mr(struct ib_pd *, @@ -217,7 +195,9 @@ extern struct ib_mr *qlnxr_reg_user_mr(struct ib_pd *, #if __FreeBSD_version >= 1102000 extern struct ib_mr *qlnxr_alloc_mr(struct ib_pd *pd, - enum ib_mr_type mr_type, u32 max_num_sg); + enum ib_mr_type mr_type, u32 max_num_sg, + struct ib_udata *udata); + extern int qlnxr_map_mr_sg(struct ib_mr *mr, struct scatterlist *sg, int sg_nents, unsigned int *sg_offset); #else @@ -233,10 +213,10 @@ extern void qlnxr_free_frmr_page_list(struct ib_fast_reg_page_list *page_list); #endif /* #if __FreeBSD_version >= 1102000 */ -extern struct ib_ucontext *qlnxr_alloc_ucontext(struct ib_device *ibdev, - struct ib_udata *udata); +extern int qlnxr_alloc_ucontext(struct ib_ucontext *uctx, + struct ib_udata *udata); -extern int qlnxr_dealloc_ucontext(struct ib_ucontext *ibctx); +extern void qlnxr_dealloc_ucontext(struct ib_ucontext *ibctx); extern int qlnxr_mmap(struct ib_ucontext *, struct vm_area_struct *vma); |
