RE: [PATCH] RDMA/qedr: Use zeroing memory allocator than allocator/memset

2017-12-31 Thread Amrani, Ram
> Use dma_zalloc_coherent for allocating zeroed
> memory and remove unnecessary memset function.
> 
> Done using Coccinelle.
> Generated-by: scripts/coccinelle/api/alloc/kzalloc-simple.cocci
> 0-day tested with no failures.
> 
> Suggested-by: Luis R. Rodriguez 
> Signed-off-by: Himanshu Jha 
> ---
>  drivers/infiniband/hw/qedr/verbs.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/verbs.c 
> b/drivers/infiniband/hw/qedr/verbs.c
> index b26aa88..3b9c898 100644
> --- a/drivers/infiniband/hw/qedr/verbs.c
> +++ b/drivers/infiniband/hw/qedr/verbs.c
> @@ -604,12 +604,11 @@ static struct qedr_pbl *qedr_alloc_pbl_tbl(struct 
> qedr_dev *dev,
>   return ERR_PTR(-ENOMEM);
> 
>   for (i = 0; i < pbl_info->num_pbls; i++) {
> - va = dma_alloc_coherent(>dev, pbl_info->pbl_size,
> - , flags);
> + va = dma_zalloc_coherent(>dev, pbl_info->pbl_size,
> +  , flags);
>   if (!va)
>   goto err;
> 
> - memset(va, 0, pbl_info->pbl_size);
>   pbl_table[i].va = va;
>   pbl_table[i].pa = pa;
>   }
> --
> 2.7.4

Acked-by: Ram Amrani 

Thanks,
Ram



RE: [PATCH] RDMA/qedr: Use zeroing memory allocator than allocator/memset

2017-12-31 Thread Amrani, Ram
> Use dma_zalloc_coherent for allocating zeroed
> memory and remove unnecessary memset function.
> 
> Done using Coccinelle.
> Generated-by: scripts/coccinelle/api/alloc/kzalloc-simple.cocci
> 0-day tested with no failures.
> 
> Suggested-by: Luis R. Rodriguez 
> Signed-off-by: Himanshu Jha 
> ---
>  drivers/infiniband/hw/qedr/verbs.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/verbs.c 
> b/drivers/infiniband/hw/qedr/verbs.c
> index b26aa88..3b9c898 100644
> --- a/drivers/infiniband/hw/qedr/verbs.c
> +++ b/drivers/infiniband/hw/qedr/verbs.c
> @@ -604,12 +604,11 @@ static struct qedr_pbl *qedr_alloc_pbl_tbl(struct 
> qedr_dev *dev,
>   return ERR_PTR(-ENOMEM);
> 
>   for (i = 0; i < pbl_info->num_pbls; i++) {
> - va = dma_alloc_coherent(>dev, pbl_info->pbl_size,
> - , flags);
> + va = dma_zalloc_coherent(>dev, pbl_info->pbl_size,
> +  , flags);
>   if (!va)
>   goto err;
> 
> - memset(va, 0, pbl_info->pbl_size);
>   pbl_table[i].va = va;
>   pbl_table[i].pa = pa;
>   }
> --
> 2.7.4

Acked-by: Ram Amrani 

Thanks,
Ram



RE: [PATCH AUTOSEL for 4.9 37/54] RDMA/qedr: Fix RDMA CM loopback

2017-11-22 Thread Amrani, Ram
> From: Ram Amrani 
> 
> [ Upstream commit af2b14b8b8ae21b0047a52c767ac8b44f435a280 ]
> 
> The loopback logic in RDMA CM packets compares Ethernet addresses and
> was accidently inverse.
> 
> Signed-off-by: Ram Amrani 
> Signed-off-by: Ariel Elior 
> Signed-off-by: Doug Ledford 
> Signed-off-by: Sasha Levin 
> ---
>  drivers/infiniband/hw/qedr/qedr_cm.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/qedr_cm.c 
> b/drivers/infiniband/hw/qedr/qedr_cm.c
> index 63890ebb72bd..eccf7039aaca 100644
> --- a/drivers/infiniband/hw/qedr/qedr_cm.c
> +++ b/drivers/infiniband/hw/qedr/qedr_cm.c
> @@ -404,9 +404,9 @@ static inline int qedr_gsi_build_packet(struct qedr_dev 
> *dev,
>   }
> 
>   if (ether_addr_equal(udh.eth.smac_h, udh.eth.dmac_h))
> - packet->tx_dest = QED_ROCE_LL2_TX_DEST_NW;
> - else
>   packet->tx_dest = QED_ROCE_LL2_TX_DEST_LB;
> + else
> + packet->tx_dest = QED_ROCE_LL2_TX_DEST_NW;
> 
>   packet->roce_mode = roce_mode;
>   memcpy(packet->header.vaddr, ud_header_buffer, header_size);
> --
> 2.11.0


Thanks!

Acked-by: Ram Amrani 



RE: [PATCH AUTOSEL for 4.9 37/54] RDMA/qedr: Fix RDMA CM loopback

2017-11-22 Thread Amrani, Ram
> From: Ram Amrani 
> 
> [ Upstream commit af2b14b8b8ae21b0047a52c767ac8b44f435a280 ]
> 
> The loopback logic in RDMA CM packets compares Ethernet addresses and
> was accidently inverse.
> 
> Signed-off-by: Ram Amrani 
> Signed-off-by: Ariel Elior 
> Signed-off-by: Doug Ledford 
> Signed-off-by: Sasha Levin 
> ---
>  drivers/infiniband/hw/qedr/qedr_cm.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/qedr_cm.c 
> b/drivers/infiniband/hw/qedr/qedr_cm.c
> index 63890ebb72bd..eccf7039aaca 100644
> --- a/drivers/infiniband/hw/qedr/qedr_cm.c
> +++ b/drivers/infiniband/hw/qedr/qedr_cm.c
> @@ -404,9 +404,9 @@ static inline int qedr_gsi_build_packet(struct qedr_dev 
> *dev,
>   }
> 
>   if (ether_addr_equal(udh.eth.smac_h, udh.eth.dmac_h))
> - packet->tx_dest = QED_ROCE_LL2_TX_DEST_NW;
> - else
>   packet->tx_dest = QED_ROCE_LL2_TX_DEST_LB;
> + else
> + packet->tx_dest = QED_ROCE_LL2_TX_DEST_NW;
> 
>   packet->roce_mode = roce_mode;
>   memcpy(packet->header.vaddr, ud_header_buffer, header_size);
> --
> 2.11.0


Thanks!

Acked-by: Ram Amrani 



RE: [PATCH] rdma: Add Jason as a co-maintainer

2017-11-19 Thread Amrani, Ram
> Hello Doug and Jason,
> 
> Thanks Doug for having added a co-maintainer. Jason, thank you for willing
> to be a co-maintainer.
> 



> Best regards,
> 
> Bart.N


I echo that, thank you both!
Ram



RE: [PATCH] rdma: Add Jason as a co-maintainer

2017-11-19 Thread Amrani, Ram
> Hello Doug and Jason,
> 
> Thanks Doug for having added a co-maintainer. Jason, thank you for willing
> to be a co-maintainer.
> 



> Best regards,
> 
> Bart.N


I echo that, thank you both!
Ram



RE: [PATCH] RDMA/qedr: fix spelling mistake: "invlaid" -> "invalid"

2017-08-24 Thread Amrani, Ram
> From: Colin Ian King 
> 
> Trivial fix to spelling mistake in DP_ERR error message
> 
> Signed-off-by: Colin Ian King 
> ---
>  drivers/infiniband/hw/qedr/verbs.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/verbs.c 
> b/drivers/infiniband/hw/qedr/verbs.c
> index 4e14a558734b..9612aaa9fbbb 100644
> --- a/drivers/infiniband/hw/qedr/verbs.c
> +++ b/drivers/infiniband/hw/qedr/verbs.c
> @@ -510,7 +510,7 @@ struct ib_pd *qedr_alloc_pd(struct ib_device *ibdev,
>(udata && context) ? "User Lib" : "Kernel");
> 
>   if (!dev->rdma_ctx) {
> - DP_ERR(dev, "invlaid RDMA context\n");
> + DP_ERR(dev, "invalid RDMA context\n");
>   return ERR_PTR(-EINVAL);
>   }
> 
> --
> 2.14.1


Thanks,

Reviewed-by: Ram Amrani 


RE: [PATCH] RDMA/qedr: fix spelling mistake: "invlaid" -> "invalid"

2017-08-24 Thread Amrani, Ram
> From: Colin Ian King 
> 
> Trivial fix to spelling mistake in DP_ERR error message
> 
> Signed-off-by: Colin Ian King 
> ---
>  drivers/infiniband/hw/qedr/verbs.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/verbs.c 
> b/drivers/infiniband/hw/qedr/verbs.c
> index 4e14a558734b..9612aaa9fbbb 100644
> --- a/drivers/infiniband/hw/qedr/verbs.c
> +++ b/drivers/infiniband/hw/qedr/verbs.c
> @@ -510,7 +510,7 @@ struct ib_pd *qedr_alloc_pd(struct ib_device *ibdev,
>(udata && context) ? "User Lib" : "Kernel");
> 
>   if (!dev->rdma_ctx) {
> - DP_ERR(dev, "invlaid RDMA context\n");
> + DP_ERR(dev, "invalid RDMA context\n");
>   return ERR_PTR(-EINVAL);
>   }
> 
> --
> 2.14.1


Thanks,

Reviewed-by: Ram Amrani 


RE: [PATCH V2] rxe: Fix a sleep-in-atomic bug in post_one_send

2017-06-01 Thread Amrani, Ram
> The driver may sleep under a spin lock, and the function call path is:
> post_one_send (acquire the lock by spin_lock_irqsave)
>   init_send_wqe
> copy_from_user --> may sleep
> 
> To fix it, the lock is released before copy_from_user, and the lock is
> acquired again after this function. The parameter "flags" is used to
> restore and save the irq status.
> Thank Leon for good advice.
> 

...

>   init_send_wr(qp, >wr, ibwr);
> @@ -742,7 +742,12 @@ static int init_send_wqe(struct rxe_qp *qp, struct 
> ib_send_wr *ibwr,
>   for (i = 0; i < num_sge; i++, sge++) {
>   if (qp->is_user && copy_from_user(p, (__user void *)
>   (uintptr_t)sge->addr, sge->length))
> - return -EFAULT;
> + spin_unlock_irqrestore(>sq.sq_lock, *flags);
> + err = copy_from_user(p, (__user void *)
> + (uintptr_t)sge->addr, sge->length);
> + spin_lock_irqsave(>sq.sq_lock, *flags);
> + if (qp->is_user && err)
> + return -EFAULT;
> 
>   else if (!qp->is_user)
>   memcpy(p, (void *)(uintptr_t)sge->addr,

This isn't my area of expertise. Still something seems weird.
You are still calling 'copy_from_user' unprotected in the 'if'.
Also, did you mean to use curly brackets on the indented part after the first 
if?!

Ram



RE: [PATCH V2] rxe: Fix a sleep-in-atomic bug in post_one_send

2017-06-01 Thread Amrani, Ram
> The driver may sleep under a spin lock, and the function call path is:
> post_one_send (acquire the lock by spin_lock_irqsave)
>   init_send_wqe
> copy_from_user --> may sleep
> 
> To fix it, the lock is released before copy_from_user, and the lock is
> acquired again after this function. The parameter "flags" is used to
> restore and save the irq status.
> Thank Leon for good advice.
> 

...

>   init_send_wr(qp, >wr, ibwr);
> @@ -742,7 +742,12 @@ static int init_send_wqe(struct rxe_qp *qp, struct 
> ib_send_wr *ibwr,
>   for (i = 0; i < num_sge; i++, sge++) {
>   if (qp->is_user && copy_from_user(p, (__user void *)
>   (uintptr_t)sge->addr, sge->length))
> - return -EFAULT;
> + spin_unlock_irqrestore(>sq.sq_lock, *flags);
> + err = copy_from_user(p, (__user void *)
> + (uintptr_t)sge->addr, sge->length);
> + spin_lock_irqsave(>sq.sq_lock, *flags);
> + if (qp->is_user && err)
> + return -EFAULT;
> 
>   else if (!qp->is_user)
>   memcpy(p, (void *)(uintptr_t)sge->addr,

This isn't my area of expertise. Still something seems weird.
You are still calling 'copy_from_user' unprotected in the 'if'.
Also, did you mean to use curly brackets on the indented part after the first 
if?!

Ram



RE: [PATCH] infiniband: hw: qedr: add null check before pointer dereference

2017-05-23 Thread Amrani, Ram
> Add null check before dereferencing pointer sgid_attr.ndev
> inside function rdma_vlan_dev_vlan_id().
> 
> Addresses-Coverity-ID: 1373979
> Signed-off-by: Gustavo A. R. Silva 
> ---
>  drivers/infiniband/hw/qedr/qedr_cm.c | 10 ++
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/qedr_cm.c 
> b/drivers/infiniband/hw/qedr/qedr_cm.c
> index 3d7705c..d86dbe8 100644
> --- a/drivers/infiniband/hw/qedr/qedr_cm.c
> +++ b/drivers/infiniband/hw/qedr/qedr_cm.c
> @@ -270,11 +270,13 @@ static inline int qedr_gsi_build_header(struct qedr_dev 
> *dev,
>   return rc;
>   }
> 
> - vlan_id = rdma_vlan_dev_vlan_id(sgid_attr.ndev);
> - if (vlan_id < VLAN_CFI_MASK)
> - has_vlan = true;
> - if (sgid_attr.ndev)
> + if (sgid_attr.ndev) {
> + vlan_id = rdma_vlan_dev_vlan_id(sgid_attr.ndev);
> + if (vlan_id < VLAN_CFI_MASK)
> + has_vlan = true;
> +
>   dev_put(sgid_attr.ndev);
> + }
> 
>   if (!memcmp(, , sizeof(sgid))) {
>   DP_ERR(dev, "gsi post send: GID not found GID index %d\n",
> --
> 2.5.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Thanks.

Acked-by: Ram Amrani 



RE: [PATCH] infiniband: hw: qedr: add null check before pointer dereference

2017-05-23 Thread Amrani, Ram
> Add null check before dereferencing pointer sgid_attr.ndev
> inside function rdma_vlan_dev_vlan_id().
> 
> Addresses-Coverity-ID: 1373979
> Signed-off-by: Gustavo A. R. Silva 
> ---
>  drivers/infiniband/hw/qedr/qedr_cm.c | 10 ++
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/qedr_cm.c 
> b/drivers/infiniband/hw/qedr/qedr_cm.c
> index 3d7705c..d86dbe8 100644
> --- a/drivers/infiniband/hw/qedr/qedr_cm.c
> +++ b/drivers/infiniband/hw/qedr/qedr_cm.c
> @@ -270,11 +270,13 @@ static inline int qedr_gsi_build_header(struct qedr_dev 
> *dev,
>   return rc;
>   }
> 
> - vlan_id = rdma_vlan_dev_vlan_id(sgid_attr.ndev);
> - if (vlan_id < VLAN_CFI_MASK)
> - has_vlan = true;
> - if (sgid_attr.ndev)
> + if (sgid_attr.ndev) {
> + vlan_id = rdma_vlan_dev_vlan_id(sgid_attr.ndev);
> + if (vlan_id < VLAN_CFI_MASK)
> + has_vlan = true;
> +
>   dev_put(sgid_attr.ndev);
> + }
> 
>   if (!memcmp(, , sizeof(sgid))) {
>   DP_ERR(dev, "gsi post send: GID not found GID index %d\n",
> --
> 2.5.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Thanks.

Acked-by: Ram Amrani 



RE: [PATCH] infiniband: hw: qedr: add null check before pointer dereference

2017-05-23 Thread Amrani, Ram
> + Ram,
> 
> Ram, IB part of qedr driver doesn't exist in MAINTAINERS file.
> 

Weird. I'll fix it.
Thanks,
Ram




RE: [PATCH] infiniband: hw: qedr: add null check before pointer dereference

2017-05-23 Thread Amrani, Ram
> + Ram,
> 
> Ram, IB part of qedr driver doesn't exist in MAINTAINERS file.
> 

Weird. I'll fix it.
Thanks,
Ram




RE: [PATCH] RDMA/qedr: Fix some error handling

2017-02-19 Thread Amrani, Ram
> 'qedr_alloc_pbl_tbl()' can not return NULL.
> 
> In qedr_init_user_queue():
>  - simplify the test for the return value, no need to test for NULL
>  - propagate the error pointer if needed, otherwise 0 (success) is returned.
>This is spurious.
> 
> In init_mr_info():
>  - test the return value with IS_ERR
>  - propagate the error pointer if needed instead of an exlictit -ENOMEM.
>This is a no-op as the only error pointer that we can have here is
>already -ENOMEM
> 
> Signed-off-by: Christophe JAILLET 
> ---
>  drivers/infiniband/hw/qedr/verbs.c | 10 ++
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/verbs.c 
> b/drivers/infiniband/hw/qedr/verbs.c
> index ef83a3f322d6..0c51657af151 100644
> --- a/drivers/infiniband/hw/qedr/verbs.c
> +++ b/drivers/infiniband/hw/qedr/verbs.c
> @@ -771,8 +771,10 @@ static inline int qedr_init_user_queue(struct 
> ib_ucontext *ib_ctx,
>   goto err0;
> 
>   q->pbl_tbl = qedr_alloc_pbl_tbl(dev, >pbl_info, GFP_KERNEL);
> - if (IS_ERR_OR_NULL(q->pbl_tbl))
> + if (IS_ERR(q->pbl_tbl)) {
> + rc = PTR_ERR(q->pbl_tbl);
>   goto err0;
> + }
> 
>   qedr_populate_pbls(dev, q->umem, q->pbl_tbl, >pbl_info);
> 
> @@ -2105,8 +2107,8 @@ static int init_mr_info(struct qedr_dev *dev, struct 
> mr_info *info,
>   goto done;
> 
>   info->pbl_table = qedr_alloc_pbl_tbl(dev, >pbl_info, GFP_KERNEL);
> - if (!info->pbl_table) {
> - rc = -ENOMEM;
> + if (IS_ERR(info->pbl_table)) {
> + rc = PTR_ERR(info->pbl_table);
>   goto done;
>   }
> 
> @@ -2117,7 +2119,7 @@ static int init_mr_info(struct qedr_dev *dev, struct 
> mr_info *info,
>* list and allocating another one
>*/
>   tmp = qedr_alloc_pbl_tbl(dev, >pbl_info, GFP_KERNEL);
> - if (!tmp) {
> + if (IS_ERR(tmp)) {
>   DP_DEBUG(dev, QEDR_MSG_MR, "Extra PBL is not allocated\n");
>   goto done;
>   }
> --
> 2.9.3


Acked-by: Ram Amrani 

Merci



RE: [PATCH] RDMA/qedr: Fix some error handling

2017-02-19 Thread Amrani, Ram
> 'qedr_alloc_pbl_tbl()' can not return NULL.
> 
> In qedr_init_user_queue():
>  - simplify the test for the return value, no need to test for NULL
>  - propagate the error pointer if needed, otherwise 0 (success) is returned.
>This is spurious.
> 
> In init_mr_info():
>  - test the return value with IS_ERR
>  - propagate the error pointer if needed instead of an exlictit -ENOMEM.
>This is a no-op as the only error pointer that we can have here is
>already -ENOMEM
> 
> Signed-off-by: Christophe JAILLET 
> ---
>  drivers/infiniband/hw/qedr/verbs.c | 10 ++
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/verbs.c 
> b/drivers/infiniband/hw/qedr/verbs.c
> index ef83a3f322d6..0c51657af151 100644
> --- a/drivers/infiniband/hw/qedr/verbs.c
> +++ b/drivers/infiniband/hw/qedr/verbs.c
> @@ -771,8 +771,10 @@ static inline int qedr_init_user_queue(struct 
> ib_ucontext *ib_ctx,
>   goto err0;
> 
>   q->pbl_tbl = qedr_alloc_pbl_tbl(dev, >pbl_info, GFP_KERNEL);
> - if (IS_ERR_OR_NULL(q->pbl_tbl))
> + if (IS_ERR(q->pbl_tbl)) {
> + rc = PTR_ERR(q->pbl_tbl);
>   goto err0;
> + }
> 
>   qedr_populate_pbls(dev, q->umem, q->pbl_tbl, >pbl_info);
> 
> @@ -2105,8 +2107,8 @@ static int init_mr_info(struct qedr_dev *dev, struct 
> mr_info *info,
>   goto done;
> 
>   info->pbl_table = qedr_alloc_pbl_tbl(dev, >pbl_info, GFP_KERNEL);
> - if (!info->pbl_table) {
> - rc = -ENOMEM;
> + if (IS_ERR(info->pbl_table)) {
> + rc = PTR_ERR(info->pbl_table);
>   goto done;
>   }
> 
> @@ -2117,7 +2119,7 @@ static int init_mr_info(struct qedr_dev *dev, struct 
> mr_info *info,
>* list and allocating another one
>*/
>   tmp = qedr_alloc_pbl_tbl(dev, >pbl_info, GFP_KERNEL);
> - if (!tmp) {
> + if (IS_ERR(tmp)) {
>   DP_DEBUG(dev, QEDR_MSG_MR, "Extra PBL is not allocated\n");
>   goto done;
>   }
> --
> 2.9.3


Acked-by: Ram Amrani 

Merci



RE: [PATCH] qedr: return -EINVAL if pd is null and avoid null ptr dereference

2016-10-20 Thread Amrani, Ram
>  drivers/infiniband/hw/qedr/verbs.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/verbs.c
> b/drivers/infiniband/hw/qedr/verbs.c
> index a615142..b2a0eb8 100644
> --- a/drivers/infiniband/hw/qedr/verbs.c
> +++ b/drivers/infiniband/hw/qedr/verbs.c
> @@ -511,8 +511,10 @@ int qedr_dealloc_pd(struct ib_pd *ibpd)
>   struct qedr_dev *dev = get_qedr_dev(ibpd->device);
>   struct qedr_pd *pd = get_qedr_pd(ibpd);
> 
> - if (!pd)
> + if (!pd) {
>   pr_err("Invalid PD received in dealloc_pd\n");
> + return -EINVAL;
> + }
> 
>   DP_DEBUG(dev, QEDR_MSG_INIT, "Deallocating PD %d\n", pd->pd_id);
>   dev->ops->rdma_dealloc_pd(dev->rdma_ctx, pd->pd_id);
> --
> 2.9.3

Thanks Colin.

Acked-by: Ram Amrani 



RE: [PATCH] qedr: return -EINVAL if pd is null and avoid null ptr dereference

2016-10-20 Thread Amrani, Ram
>  drivers/infiniband/hw/qedr/verbs.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/infiniband/hw/qedr/verbs.c
> b/drivers/infiniband/hw/qedr/verbs.c
> index a615142..b2a0eb8 100644
> --- a/drivers/infiniband/hw/qedr/verbs.c
> +++ b/drivers/infiniband/hw/qedr/verbs.c
> @@ -511,8 +511,10 @@ int qedr_dealloc_pd(struct ib_pd *ibpd)
>   struct qedr_dev *dev = get_qedr_dev(ibpd->device);
>   struct qedr_pd *pd = get_qedr_pd(ibpd);
> 
> - if (!pd)
> + if (!pd) {
>   pr_err("Invalid PD received in dealloc_pd\n");
> + return -EINVAL;
> + }
> 
>   DP_DEBUG(dev, QEDR_MSG_INIT, "Deallocating PD %d\n", pd->pd_id);
>   dev->ops->rdma_dealloc_pd(dev->rdma_ctx, pd->pd_id);
> --
> 2.9.3

Thanks Colin.

Acked-by: Ram Amrani