* [PATCHv3 for-next 1/4] RDMA/irdma: Split MEM handler into irdma_reg_user_mr_type_mem
2023-01-16 19:34 [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function Zhu Yanjun
@ 2023-01-16 19:34 ` Zhu Yanjun
2023-01-16 19:35 ` [PATCHv3 for-next 2/4] RDMA/irdma: Split mr alloc and free into new functions Zhu Yanjun
` (4 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Zhu Yanjun @ 2023-01-16 19:34 UTC (permalink / raw)
To: mustafa.ismail, shiraz.saleem, jgg, leon, linux-rdma; +Cc: Zhu Yanjun
From: Zhu Yanjun <yanjun.zhu@linux.dev>
The source codes related with IRDMA_MEMREG_TYPE_MEM are split
into a new function irdma_reg_user_mr_type_mem.
Reviewed-by: Shiraz Saleem <shiraz.saleem@intel.com>
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
---
drivers/infiniband/hw/irdma/verbs.c | 82 ++++++++++++++++++-----------
1 file changed, 50 insertions(+), 32 deletions(-)
diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c
index f4674ecf9c8c..45eb2d339802 100644
--- a/drivers/infiniband/hw/irdma/verbs.c
+++ b/drivers/infiniband/hw/irdma/verbs.c
@@ -2745,6 +2745,54 @@ static int irdma_hwreg_mr(struct irdma_device *iwdev, struct irdma_mr *iwmr,
return ret;
}
+static int irdma_reg_user_mr_type_mem(struct irdma_mr *iwmr, int access)
+{
+ struct irdma_device *iwdev = to_iwdev(iwmr->ibmr.device);
+ struct irdma_pbl *iwpbl = &iwmr->iwpbl;
+ bool use_pbles;
+ u32 stag;
+ int err;
+
+ use_pbles = iwmr->page_cnt != 1;
+
+ err = irdma_setup_pbles(iwdev->rf, iwmr, use_pbles, false);
+ if (err)
+ return err;
+
+ if (use_pbles) {
+ err = irdma_check_mr_contiguous(&iwpbl->pble_alloc,
+ iwmr->page_size);
+ if (err) {
+ irdma_free_pble(iwdev->rf->pble_rsrc, &iwpbl->pble_alloc);
+ iwpbl->pbl_allocated = false;
+ }
+ }
+
+ stag = irdma_create_stag(iwdev);
+ if (!stag) {
+ err = -ENOMEM;
+ goto free_pble;
+ }
+
+ iwmr->stag = stag;
+ iwmr->ibmr.rkey = stag;
+ iwmr->ibmr.lkey = stag;
+ err = irdma_hwreg_mr(iwdev, iwmr, access);
+ if (err)
+ goto err_hwreg;
+
+ return 0;
+
+err_hwreg:
+ irdma_free_stag(iwdev, stag);
+
+free_pble:
+ if (iwpbl->pble_alloc.level != PBLE_LEVEL_0 && iwpbl->pbl_allocated)
+ irdma_free_pble(iwdev->rf->pble_rsrc, &iwpbl->pble_alloc);
+
+ return err;
+}
+
/**
* irdma_reg_user_mr - Register a user memory region
* @pd: ptr of pd
@@ -2761,12 +2809,11 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
#define IRDMA_MEM_REG_MIN_REQ_LEN offsetofend(struct irdma_mem_reg_req, sq_pages)
struct irdma_device *iwdev = to_iwdev(pd->device);
struct irdma_ucontext *ucontext;
- struct irdma_pble_alloc *palloc;
struct irdma_pbl *iwpbl;
struct irdma_mr *iwmr;
struct ib_umem *region;
struct irdma_mem_reg_req req;
- u32 total, stag = 0;
+ u32 total;
u8 shadow_pgcnt = 1;
bool use_pbles = false;
unsigned long flags;
@@ -2817,7 +2864,6 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
}
iwmr->len = region->length;
iwpbl->user_base = virt;
- palloc = &iwpbl->pble_alloc;
iwmr->type = req.reg_type;
iwmr->page_cnt = ib_umem_num_dma_blocks(region, iwmr->page_size);
@@ -2863,36 +2909,10 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
spin_unlock_irqrestore(&ucontext->cq_reg_mem_list_lock, flags);
break;
case IRDMA_MEMREG_TYPE_MEM:
- use_pbles = (iwmr->page_cnt != 1);
-
- err = irdma_setup_pbles(iwdev->rf, iwmr, use_pbles, false);
+ err = irdma_reg_user_mr_type_mem(iwmr, access);
if (err)
goto error;
- if (use_pbles) {
- err = irdma_check_mr_contiguous(palloc,
- iwmr->page_size);
- if (err) {
- irdma_free_pble(iwdev->rf->pble_rsrc, palloc);
- iwpbl->pbl_allocated = false;
- }
- }
-
- stag = irdma_create_stag(iwdev);
- if (!stag) {
- err = -ENOMEM;
- goto error;
- }
-
- iwmr->stag = stag;
- iwmr->ibmr.rkey = stag;
- iwmr->ibmr.lkey = stag;
- err = irdma_hwreg_mr(iwdev, iwmr, access);
- if (err) {
- irdma_free_stag(iwdev, stag);
- goto error;
- }
-
break;
default:
goto error;
@@ -2903,8 +2923,6 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
return &iwmr->ibmr;
error:
- if (palloc->level != PBLE_LEVEL_0 && iwpbl->pbl_allocated)
- irdma_free_pble(iwdev->rf->pble_rsrc, palloc);
ib_umem_release(region);
kfree(iwmr);
--
2.27.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCHv3 for-next 2/4] RDMA/irdma: Split mr alloc and free into new functions
2023-01-16 19:34 [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function Zhu Yanjun
2023-01-16 19:34 ` [PATCHv3 for-next 1/4] RDMA/irdma: Split MEM handler into irdma_reg_user_mr_type_mem Zhu Yanjun
@ 2023-01-16 19:35 ` Zhu Yanjun
2023-01-16 19:35 ` [PATCHv3 for-next 3/4] RDMA/irdma: Split QP handler into irdma_reg_user_mr_type_qp Zhu Yanjun
` (3 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Zhu Yanjun @ 2023-01-16 19:35 UTC (permalink / raw)
To: mustafa.ismail, shiraz.saleem, jgg, leon, linux-rdma; +Cc: Zhu Yanjun
From: Zhu Yanjun <yanjun.zhu@linux.dev>
In the function irdma_reg_user_mr, the mr allocation and free
will be used by other functions. As such, the source codes related
with mr allocation and free are split into the new functions.
Reviewed-by: Shiraz Saleem <shiraz.saleem@intel.com>
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
---
drivers/infiniband/hw/irdma/verbs.c | 74 ++++++++++++++++++-----------
1 file changed, 46 insertions(+), 28 deletions(-)
diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c
index 45eb2d339802..1fc9761beef4 100644
--- a/drivers/infiniband/hw/irdma/verbs.c
+++ b/drivers/infiniband/hw/irdma/verbs.c
@@ -2793,6 +2793,48 @@ static int irdma_reg_user_mr_type_mem(struct irdma_mr *iwmr, int access)
return err;
}
+static struct irdma_mr *irdma_alloc_iwmr(struct ib_umem *region,
+ struct ib_pd *pd, u64 virt,
+ enum irdma_memreg_type reg_type)
+{
+ struct irdma_device *iwdev = to_iwdev(pd->device);
+ struct irdma_pbl *iwpbl = NULL;
+ struct irdma_mr *iwmr = NULL;
+ unsigned long pgsz_bitmap;
+
+ iwmr = kzalloc(sizeof(*iwmr), GFP_KERNEL);
+ if (!iwmr)
+ return ERR_PTR(-ENOMEM);
+
+ iwpbl = &iwmr->iwpbl;
+ iwpbl->iwmr = iwmr;
+ iwmr->region = region;
+ iwmr->ibmr.pd = pd;
+ iwmr->ibmr.device = pd->device;
+ iwmr->ibmr.iova = virt;
+ iwmr->type = reg_type;
+
+ pgsz_bitmap = (reg_type == IRDMA_MEMREG_TYPE_MEM) ?
+ iwdev->rf->sc_dev.hw_attrs.page_size_cap : PAGE_SIZE;
+
+ iwmr->page_size = ib_umem_find_best_pgsz(region, pgsz_bitmap, virt);
+ if (unlikely(!iwmr->page_size)) {
+ kfree(iwmr);
+ return ERR_PTR(-EOPNOTSUPP);
+ }
+
+ iwmr->len = region->length;
+ iwpbl->user_base = virt;
+ iwmr->page_cnt = ib_umem_num_dma_blocks(region, iwmr->page_size);
+
+ return iwmr;
+}
+
+static void irdma_free_iwmr(struct irdma_mr *iwmr)
+{
+ kfree(iwmr);
+}
+
/**
* irdma_reg_user_mr - Register a user memory region
* @pd: ptr of pd
@@ -2838,34 +2880,13 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
return ERR_PTR(-EFAULT);
}
- iwmr = kzalloc(sizeof(*iwmr), GFP_KERNEL);
- if (!iwmr) {
+ iwmr = irdma_alloc_iwmr(region, pd, virt, req.reg_type);
+ if (IS_ERR(iwmr)) {
ib_umem_release(region);
- return ERR_PTR(-ENOMEM);
+ return (struct ib_mr *)iwmr;
}
iwpbl = &iwmr->iwpbl;
- iwpbl->iwmr = iwmr;
- iwmr->region = region;
- iwmr->ibmr.pd = pd;
- iwmr->ibmr.device = pd->device;
- iwmr->ibmr.iova = virt;
- iwmr->page_size = PAGE_SIZE;
-
- if (req.reg_type == IRDMA_MEMREG_TYPE_MEM) {
- iwmr->page_size = ib_umem_find_best_pgsz(region,
- iwdev->rf->sc_dev.hw_attrs.page_size_cap,
- virt);
- if (unlikely(!iwmr->page_size)) {
- kfree(iwmr);
- ib_umem_release(region);
- return ERR_PTR(-EOPNOTSUPP);
- }
- }
- iwmr->len = region->length;
- iwpbl->user_base = virt;
- iwmr->type = req.reg_type;
- iwmr->page_cnt = ib_umem_num_dma_blocks(region, iwmr->page_size);
switch (req.reg_type) {
case IRDMA_MEMREG_TYPE_QP:
@@ -2918,13 +2939,10 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
goto error;
}
- iwmr->type = req.reg_type;
-
return &iwmr->ibmr;
-
error:
ib_umem_release(region);
- kfree(iwmr);
+ irdma_free_iwmr(iwmr);
return ERR_PTR(err);
}
--
2.27.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCHv3 for-next 3/4] RDMA/irdma: Split QP handler into irdma_reg_user_mr_type_qp
2023-01-16 19:34 [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function Zhu Yanjun
2023-01-16 19:34 ` [PATCHv3 for-next 1/4] RDMA/irdma: Split MEM handler into irdma_reg_user_mr_type_mem Zhu Yanjun
2023-01-16 19:35 ` [PATCHv3 for-next 2/4] RDMA/irdma: Split mr alloc and free into new functions Zhu Yanjun
@ 2023-01-16 19:35 ` Zhu Yanjun
2023-01-16 19:35 ` [PATCHv3 for-next 4/4] RDMA/irdma: Split CQ handler into irdma_reg_user_mr_type_cq Zhu Yanjun
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Zhu Yanjun @ 2023-01-16 19:35 UTC (permalink / raw)
To: mustafa.ismail, shiraz.saleem, jgg, leon, linux-rdma; +Cc: Zhu Yanjun
From: Zhu Yanjun <yanjun.zhu@linux.dev>
Split the source codes related with QP handling into a new function.
Reviewed-by: Shiraz Saleem <shiraz.saleem@intel.com>
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
---
drivers/infiniband/hw/irdma/verbs.c | 47 ++++++++++++++++++++---------
1 file changed, 33 insertions(+), 14 deletions(-)
diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c
index 1fc9761beef4..93a8997d6267 100644
--- a/drivers/infiniband/hw/irdma/verbs.c
+++ b/drivers/infiniband/hw/irdma/verbs.c
@@ -2835,6 +2835,38 @@ static void irdma_free_iwmr(struct irdma_mr *iwmr)
kfree(iwmr);
}
+static int irdma_reg_user_mr_type_qp(struct irdma_mem_reg_req req,
+ struct ib_udata *udata,
+ struct irdma_mr *iwmr)
+{
+ struct irdma_device *iwdev = to_iwdev(iwmr->ibmr.device);
+ struct irdma_pbl *iwpbl = &iwmr->iwpbl;
+ struct irdma_ucontext *ucontext = NULL;
+ unsigned long flags;
+ bool use_pbles;
+ u32 total;
+ int err;
+
+ total = req.sq_pages + req.rq_pages + 1;
+ if (total > iwmr->page_cnt)
+ return -EINVAL;
+
+ total = req.sq_pages + req.rq_pages;
+ use_pbles = total > 2;
+ err = irdma_handle_q_mem(iwdev, &req, iwpbl, use_pbles);
+ if (err)
+ return err;
+
+ ucontext = rdma_udata_to_drv_context(udata, struct irdma_ucontext,
+ ibucontext);
+ spin_lock_irqsave(&ucontext->qp_reg_mem_list_lock, flags);
+ list_add_tail(&iwpbl->list, &ucontext->qp_reg_mem_list);
+ iwpbl->on_list = true;
+ spin_unlock_irqrestore(&ucontext->qp_reg_mem_list_lock, flags);
+
+ return 0;
+}
+
/**
* irdma_reg_user_mr - Register a user memory region
* @pd: ptr of pd
@@ -2890,23 +2922,10 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
switch (req.reg_type) {
case IRDMA_MEMREG_TYPE_QP:
- total = req.sq_pages + req.rq_pages + shadow_pgcnt;
- if (total > iwmr->page_cnt) {
- err = -EINVAL;
- goto error;
- }
- total = req.sq_pages + req.rq_pages;
- use_pbles = (total > 2);
- err = irdma_handle_q_mem(iwdev, &req, iwpbl, use_pbles);
+ err = irdma_reg_user_mr_type_qp(req, udata, iwmr);
if (err)
goto error;
- ucontext = rdma_udata_to_drv_context(udata, struct irdma_ucontext,
- ibucontext);
- spin_lock_irqsave(&ucontext->qp_reg_mem_list_lock, flags);
- list_add_tail(&iwpbl->list, &ucontext->qp_reg_mem_list);
- iwpbl->on_list = true;
- spin_unlock_irqrestore(&ucontext->qp_reg_mem_list_lock, flags);
break;
case IRDMA_MEMREG_TYPE_CQ:
if (iwdev->rf->sc_dev.hw_attrs.uk_attrs.feature_flags & IRDMA_FEATURE_CQ_RESIZE)
--
2.27.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCHv3 for-next 4/4] RDMA/irdma: Split CQ handler into irdma_reg_user_mr_type_cq
2023-01-16 19:34 [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function Zhu Yanjun
` (2 preceding siblings ...)
2023-01-16 19:35 ` [PATCHv3 for-next 3/4] RDMA/irdma: Split QP handler into irdma_reg_user_mr_type_qp Zhu Yanjun
@ 2023-01-16 19:35 ` Zhu Yanjun
2023-01-26 1:16 ` [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function Zhu Yanjun
2023-01-26 10:59 ` Leon Romanovsky
5 siblings, 0 replies; 9+ messages in thread
From: Zhu Yanjun @ 2023-01-16 19:35 UTC (permalink / raw)
To: mustafa.ismail, shiraz.saleem, jgg, leon, linux-rdma; +Cc: Zhu Yanjun
From: Zhu Yanjun <yanjun.zhu@linux.dev>
Split the source codes related with CQ handling into a new function.
Reviewed-by: Shiraz Saleem <shiraz.saleem@intel.com>
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
---
drivers/infiniband/hw/irdma/verbs.c | 69 +++++++++++++++++------------
1 file changed, 40 insertions(+), 29 deletions(-)
diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c
index 93a8997d6267..6982f38596c8 100644
--- a/drivers/infiniband/hw/irdma/verbs.c
+++ b/drivers/infiniband/hw/irdma/verbs.c
@@ -2867,6 +2867,40 @@ static int irdma_reg_user_mr_type_qp(struct irdma_mem_reg_req req,
return 0;
}
+static int irdma_reg_user_mr_type_cq(struct irdma_mem_reg_req req,
+ struct ib_udata *udata,
+ struct irdma_mr *iwmr)
+{
+ struct irdma_device *iwdev = to_iwdev(iwmr->ibmr.device);
+ struct irdma_pbl *iwpbl = &iwmr->iwpbl;
+ struct irdma_ucontext *ucontext = NULL;
+ u8 shadow_pgcnt = 1;
+ unsigned long flags;
+ bool use_pbles;
+ u32 total;
+ int err;
+
+ if (iwdev->rf->sc_dev.hw_attrs.uk_attrs.feature_flags & IRDMA_FEATURE_CQ_RESIZE)
+ shadow_pgcnt = 0;
+ total = req.cq_pages + shadow_pgcnt;
+ if (total > iwmr->page_cnt)
+ return -EINVAL;
+
+ use_pbles = req.cq_pages > 1;
+ err = irdma_handle_q_mem(iwdev, &req, iwpbl, use_pbles);
+ if (err)
+ return err;
+
+ ucontext = rdma_udata_to_drv_context(udata, struct irdma_ucontext,
+ ibucontext);
+ spin_lock_irqsave(&ucontext->cq_reg_mem_list_lock, flags);
+ list_add_tail(&iwpbl->list, &ucontext->cq_reg_mem_list);
+ iwpbl->on_list = true;
+ spin_unlock_irqrestore(&ucontext->cq_reg_mem_list_lock, flags);
+
+ return 0;
+}
+
/**
* irdma_reg_user_mr - Register a user memory region
* @pd: ptr of pd
@@ -2882,16 +2916,10 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
{
#define IRDMA_MEM_REG_MIN_REQ_LEN offsetofend(struct irdma_mem_reg_req, sq_pages)
struct irdma_device *iwdev = to_iwdev(pd->device);
- struct irdma_ucontext *ucontext;
- struct irdma_pbl *iwpbl;
- struct irdma_mr *iwmr;
- struct ib_umem *region;
- struct irdma_mem_reg_req req;
- u32 total;
- u8 shadow_pgcnt = 1;
- bool use_pbles = false;
- unsigned long flags;
- int err = -EINVAL;
+ struct irdma_mem_reg_req req = {};
+ struct ib_umem *region = NULL;
+ struct irdma_mr *iwmr = NULL;
+ int err;
if (len > iwdev->rf->sc_dev.hw_attrs.max_mr_size)
return ERR_PTR(-EINVAL);
@@ -2918,8 +2946,6 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
return (struct ib_mr *)iwmr;
}
- iwpbl = &iwmr->iwpbl;
-
switch (req.reg_type) {
case IRDMA_MEMREG_TYPE_QP:
err = irdma_reg_user_mr_type_qp(req, udata, iwmr);
@@ -2928,25 +2954,9 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
break;
case IRDMA_MEMREG_TYPE_CQ:
- if (iwdev->rf->sc_dev.hw_attrs.uk_attrs.feature_flags & IRDMA_FEATURE_CQ_RESIZE)
- shadow_pgcnt = 0;
- total = req.cq_pages + shadow_pgcnt;
- if (total > iwmr->page_cnt) {
- err = -EINVAL;
- goto error;
- }
-
- use_pbles = (req.cq_pages > 1);
- err = irdma_handle_q_mem(iwdev, &req, iwpbl, use_pbles);
+ err = irdma_reg_user_mr_type_cq(req, udata, iwmr);
if (err)
goto error;
-
- ucontext = rdma_udata_to_drv_context(udata, struct irdma_ucontext,
- ibucontext);
- spin_lock_irqsave(&ucontext->cq_reg_mem_list_lock, flags);
- list_add_tail(&iwpbl->list, &ucontext->cq_reg_mem_list);
- iwpbl->on_list = true;
- spin_unlock_irqrestore(&ucontext->cq_reg_mem_list_lock, flags);
break;
case IRDMA_MEMREG_TYPE_MEM:
err = irdma_reg_user_mr_type_mem(iwmr, access);
@@ -2955,6 +2965,7 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
break;
default:
+ err = -EINVAL;
goto error;
}
--
2.27.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function
2023-01-16 19:34 [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function Zhu Yanjun
` (3 preceding siblings ...)
2023-01-16 19:35 ` [PATCHv3 for-next 4/4] RDMA/irdma: Split CQ handler into irdma_reg_user_mr_type_cq Zhu Yanjun
@ 2023-01-26 1:16 ` Zhu Yanjun
2023-01-26 10:59 ` Leon Romanovsky
2023-01-26 10:59 ` Leon Romanovsky
5 siblings, 1 reply; 9+ messages in thread
From: Zhu Yanjun @ 2023-01-26 1:16 UTC (permalink / raw)
To: Zhu Yanjun, mustafa.ismail, shiraz.saleem, jgg, leon, linux-rdma
在 2023/1/17 3:34, Zhu Yanjun 写道:
> V2->V3: 1) Use netdev reverse Christmas tree rule;
> 2) Return 0 instead of err;
> 3) Remove unnecessary brackets;
> 4) Add an error label in error handler;
> 5) Initialize the structured variables;
Hi, Leon
Follow your advice, I made this patches.
Please check it.
Zhu Yanjun
>
> V1->V2: Thanks Saleem, Shiraz.
> 1) Remove the unnecessary variable initializations;
> 2) Get iwdev by to_iwdev;
> 3) Use the label free_pble to handle errors;
> 4) Validate the page size before rdma_umem_for_each_dma_block
>
> Split the shared source codes into several new functions for future use.
> No bug fix and new feature in this commit series.
>
> The new functions are as below:
>
> irdma_reg_user_mr_type_mem
> irdma_alloc_iwmr
> irdma_free_iwmr
> irdma_reg_user_mr_type_qp
> irdma_reg_user_mr_type_cq
>
> These functions will be used in the dmabuf feature.
>
> Zhu Yanjun (4):
> RDMA/irdma: Split MEM handler into irdma_reg_user_mr_type_mem
> RDMA/irdma: Split mr alloc and free into new functions
> RDMA/irdma: Split QP handler into irdma_reg_user_mr_type_qp
> RDMA/irdma: Split CQ handler into irdma_reg_user_mr_type_cq
>
> drivers/infiniband/hw/irdma/verbs.c | 270 +++++++++++++++++-----------
> 1 file changed, 168 insertions(+), 102 deletions(-)
>
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function
2023-01-26 1:16 ` [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function Zhu Yanjun
@ 2023-01-26 10:59 ` Leon Romanovsky
2023-01-26 13:40 ` Zhu Yanjun
0 siblings, 1 reply; 9+ messages in thread
From: Leon Romanovsky @ 2023-01-26 10:59 UTC (permalink / raw)
To: Zhu Yanjun; +Cc: Zhu Yanjun, mustafa.ismail, shiraz.saleem, jgg, linux-rdma
On Thu, Jan 26, 2023 at 09:16:05AM +0800, Zhu Yanjun wrote:
> 在 2023/1/17 3:34, Zhu Yanjun 写道:
> > V2->V3: 1) Use netdev reverse Christmas tree rule;
> > 2) Return 0 instead of err;
> > 3) Remove unnecessary brackets;
> > 4) Add an error label in error handler;
> > 5) Initialize the structured variables;
>
> Hi, Leon
>
> Follow your advice, I made this patches.
> Please check it.
Everything is applied, sorry for the delay.
Thanks
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function
2023-01-26 10:59 ` Leon Romanovsky
@ 2023-01-26 13:40 ` Zhu Yanjun
0 siblings, 0 replies; 9+ messages in thread
From: Zhu Yanjun @ 2023-01-26 13:40 UTC (permalink / raw)
To: Leon Romanovsky
Cc: Zhu Yanjun, mustafa.ismail, shiraz.saleem, jgg, linux-rdma
在 2023/1/26 18:59, Leon Romanovsky 写道:
> On Thu, Jan 26, 2023 at 09:16:05AM +0800, Zhu Yanjun wrote:
>> 在 2023/1/17 3:34, Zhu Yanjun 写道:
>>> V2->V3: 1) Use netdev reverse Christmas tree rule;
>>> 2) Return 0 instead of err;
>>> 3) Remove unnecessary brackets;
>>> 4) Add an error label in error handler;
>>> 5) Initialize the structured variables;
>> Hi, Leon
>>
>> Follow your advice, I made this patches.
>> Please check it.
> Everything is applied, sorry for the delay.
Thanks a lot.
Zhu Yanjun
>
> Thanks
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function
2023-01-16 19:34 [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function Zhu Yanjun
` (4 preceding siblings ...)
2023-01-26 1:16 ` [PATCHv3 for-next 0/4] RDMA/irdma: Refactor irdma_reg_user_mr function Zhu Yanjun
@ 2023-01-26 10:59 ` Leon Romanovsky
5 siblings, 0 replies; 9+ messages in thread
From: Leon Romanovsky @ 2023-01-26 10:59 UTC (permalink / raw)
To: mustafa.ismail, shiraz.saleem, jgg, linux-rdma, Zhu Yanjun
On Mon, 16 Jan 2023 14:34:58 -0500, Zhu Yanjun wrote:
> V2->V3: 1) Use netdev reverse Christmas tree rule;
> 2) Return 0 instead of err;
> 3) Remove unnecessary brackets;
> 4) Add an error label in error handler;
> 5) Initialize the structured variables;
>
> V1->V2: Thanks Saleem, Shiraz.
> 1) Remove the unnecessary variable initializations;
> 2) Get iwdev by to_iwdev;
> 3) Use the label free_pble to handle errors;
> 4) Validate the page size before rdma_umem_for_each_dma_block
>
> [...]
Applied, thanks!
[1/4] RDMA/irdma: Split MEM handler into irdma_reg_user_mr_type_mem
https://git.kernel.org/rdma/rdma/c/01798df19878e8
[2/4] RDMA/irdma: Split mr alloc and free into new functions
https://git.kernel.org/rdma/rdma/c/693a5386eff0ba
[3/4] RDMA/irdma: Split QP handler into irdma_reg_user_mr_type_qp
https://git.kernel.org/rdma/rdma/c/e965ef0e7b2ce2
[4/4] RDMA/irdma: Split CQ handler into irdma_reg_user_mr_type_cq
https://git.kernel.org/rdma/rdma/c/2f25e3bab00e97
Best regards,
--
Leon Romanovsky <leon@kernel.org>
^ permalink raw reply [flat|nested] 9+ messages in thread