Skip to content

Commit e965ef0

Browse files
zhuyjrleon
authored andcommitted
RDMA/irdma: Split QP handler into irdma_reg_user_mr_type_qp
Split the source codes related with QP handling into a new function. Reviewed-by: Shiraz Saleem <[email protected]> Signed-off-by: Zhu Yanjun <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Leon Romanovsky <[email protected]>
1 parent 693a538 commit e965ef0

File tree

1 file changed

+33
-14
lines changed

1 file changed

+33
-14
lines changed

drivers/infiniband/hw/irdma/verbs.c

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2835,6 +2835,38 @@ static void irdma_free_iwmr(struct irdma_mr *iwmr)
28352835
kfree(iwmr);
28362836
}
28372837

2838+
static int irdma_reg_user_mr_type_qp(struct irdma_mem_reg_req req,
2839+
struct ib_udata *udata,
2840+
struct irdma_mr *iwmr)
2841+
{
2842+
struct irdma_device *iwdev = to_iwdev(iwmr->ibmr.device);
2843+
struct irdma_pbl *iwpbl = &iwmr->iwpbl;
2844+
struct irdma_ucontext *ucontext = NULL;
2845+
unsigned long flags;
2846+
bool use_pbles;
2847+
u32 total;
2848+
int err;
2849+
2850+
total = req.sq_pages + req.rq_pages + 1;
2851+
if (total > iwmr->page_cnt)
2852+
return -EINVAL;
2853+
2854+
total = req.sq_pages + req.rq_pages;
2855+
use_pbles = total > 2;
2856+
err = irdma_handle_q_mem(iwdev, &req, iwpbl, use_pbles);
2857+
if (err)
2858+
return err;
2859+
2860+
ucontext = rdma_udata_to_drv_context(udata, struct irdma_ucontext,
2861+
ibucontext);
2862+
spin_lock_irqsave(&ucontext->qp_reg_mem_list_lock, flags);
2863+
list_add_tail(&iwpbl->list, &ucontext->qp_reg_mem_list);
2864+
iwpbl->on_list = true;
2865+
spin_unlock_irqrestore(&ucontext->qp_reg_mem_list_lock, flags);
2866+
2867+
return 0;
2868+
}
2869+
28382870
/**
28392871
* irdma_reg_user_mr - Register a user memory region
28402872
* @pd: ptr of pd
@@ -2890,23 +2922,10 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
28902922

28912923
switch (req.reg_type) {
28922924
case IRDMA_MEMREG_TYPE_QP:
2893-
total = req.sq_pages + req.rq_pages + shadow_pgcnt;
2894-
if (total > iwmr->page_cnt) {
2895-
err = -EINVAL;
2896-
goto error;
2897-
}
2898-
total = req.sq_pages + req.rq_pages;
2899-
use_pbles = (total > 2);
2900-
err = irdma_handle_q_mem(iwdev, &req, iwpbl, use_pbles);
2925+
err = irdma_reg_user_mr_type_qp(req, udata, iwmr);
29012926
if (err)
29022927
goto error;
29032928

2904-
ucontext = rdma_udata_to_drv_context(udata, struct irdma_ucontext,
2905-
ibucontext);
2906-
spin_lock_irqsave(&ucontext->qp_reg_mem_list_lock, flags);
2907-
list_add_tail(&iwpbl->list, &ucontext->qp_reg_mem_list);
2908-
iwpbl->on_list = true;
2909-
spin_unlock_irqrestore(&ucontext->qp_reg_mem_list_lock, flags);
29102929
break;
29112930
case IRDMA_MEMREG_TYPE_CQ:
29122931
if (iwdev->rf->sc_dev.hw_attrs.uk_attrs.feature_flags & IRDMA_FEATURE_CQ_RESIZE)

0 commit comments

Comments
 (0)