public inbox for linux-rdma@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH for-next 1/2] RDMA/bnxt_re: Initialize mutex dbq_lock
@ 2023-08-14 17:00 Selvin Xavier
  2023-08-14 17:00 ` [PATCH for-next 2/2] RDMA/bnxt_re: Protect the PD table bitmap Selvin Xavier
  0 siblings, 1 reply; 6+ messages in thread
From: Selvin Xavier @ 2023-08-14 17:00 UTC (permalink / raw)
  To: jgg, leon; +Cc: linux-rdma, andrew.gospodarek, Kashyap Desai, Selvin Xavier

[-- Attachment #1: Type: text/plain, Size: 954 bytes --]

From: Kashyap Desai <kashyap.desai@broadcom.com>

Fix the missing dbq_lock mutex initialization

Fixes: 2ad4e6303a6d ("RDMA/bnxt_re: Implement doorbell pacing algorithm")
Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
---
 drivers/infiniband/hw/bnxt_re/main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c
index f34ce49..061a89b 100644
--- a/drivers/infiniband/hw/bnxt_re/main.c
+++ b/drivers/infiniband/hw/bnxt_re/main.c
@@ -920,6 +920,7 @@ static struct bnxt_re_dev *bnxt_re_dev_add(struct bnxt_aux_priv *aux_priv,
 	rdev->id = rdev->en_dev->pdev->devfn;
 	INIT_LIST_HEAD(&rdev->qp_list);
 	mutex_init(&rdev->qp_lock);
+	mutex_init(&rdev->pacing.dbq_lock);
 	atomic_set(&rdev->stats.res.qp_count, 0);
 	atomic_set(&rdev->stats.res.cq_count, 0);
 	atomic_set(&rdev->stats.res.srq_count, 0);
-- 
2.5.5


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4224 bytes --]

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH for-next 2/2] RDMA/bnxt_re: Protect the PD table bitmap
  2023-08-14 17:00 [PATCH for-next 1/2] RDMA/bnxt_re: Initialize mutex dbq_lock Selvin Xavier
@ 2023-08-14 17:00 ` Selvin Xavier
  2023-08-18 16:20   ` Jason Gunthorpe
  0 siblings, 1 reply; 6+ messages in thread
From: Selvin Xavier @ 2023-08-14 17:00 UTC (permalink / raw)
  To: jgg, leon; +Cc: linux-rdma, andrew.gospodarek, Selvin Xavier, Kashyap Desai

[-- Attachment #1: Type: text/plain, Size: 3683 bytes --]

Syncrhonization is required to avoid simultaneous allocation
of the PD. Add a new mutex lock to handle allocation from
the PD table.

Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
---
 drivers/infiniband/hw/bnxt_re/ib_verbs.c  |  2 +-
 drivers/infiniband/hw/bnxt_re/qplib_res.c | 26 ++++++++++++++++++++------
 drivers/infiniband/hw/bnxt_re/qplib_res.h |  4 +++-
 3 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
index c0a7181..b19334c 100644
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
@@ -619,7 +619,7 @@ int bnxt_re_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
 	int rc = 0;
 
 	pd->rdev = rdev;
-	if (bnxt_qplib_alloc_pd(&rdev->qplib_res.pd_tbl, &pd->qplib_pd)) {
+	if (bnxt_qplib_alloc_pd(&rdev->qplib_res, &pd->qplib_pd)) {
 		ibdev_err(&rdev->ibdev, "Failed to allocate HW PD");
 		rc = -ENOMEM;
 		goto fail;
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.c b/drivers/infiniband/hw/bnxt_re/qplib_res.c
index 6f1e8b7..79c43c2 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_res.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_res.c
@@ -642,31 +642,44 @@ static void bnxt_qplib_init_sgid_tbl(struct bnxt_qplib_sgid_tbl *sgid_tbl,
 }
 
 /* PDs */
-int bnxt_qplib_alloc_pd(struct bnxt_qplib_pd_tbl *pdt, struct bnxt_qplib_pd *pd)
+int bnxt_qplib_alloc_pd(struct bnxt_qplib_res  *res, struct bnxt_qplib_pd *pd)
 {
+	struct bnxt_qplib_pd_tbl *pdt = &res->pd_tbl;
 	u32 bit_num;
+	int rc = 0;
 
+	mutex_lock(&res->pd_tbl_lock);
 	bit_num = find_first_bit(pdt->tbl, pdt->max);
-	if (bit_num == pdt->max)
-		return -ENOMEM;
+	if (bit_num == pdt->max) {
+		rc = -ENOMEM;
+		goto exit;
+	}
 
 	/* Found unused PD */
 	clear_bit(bit_num, pdt->tbl);
 	pd->id = bit_num;
-	return 0;
+exit:
+	mutex_unlock(&res->pd_tbl_lock);
+	return rc;
 }
 
 int bnxt_qplib_dealloc_pd(struct bnxt_qplib_res *res,
 			  struct bnxt_qplib_pd_tbl *pdt,
 			  struct bnxt_qplib_pd *pd)
 {
+	int rc = 0;
+
+	mutex_lock(&res->pd_tbl_lock);
 	if (test_and_set_bit(pd->id, pdt->tbl)) {
 		dev_warn(&res->pdev->dev, "Freeing an unused PD? pdn = %d\n",
 			 pd->id);
-		return -EINVAL;
+		rc = -EINVAL;
+		goto exit;
 	}
 	pd->id = 0;
-	return 0;
+exit:
+	mutex_unlock(&res->pd_tbl_lock);
+	return rc;
 }
 
 static void bnxt_qplib_free_pd_tbl(struct bnxt_qplib_pd_tbl *pdt)
@@ -691,6 +704,7 @@ static int bnxt_qplib_alloc_pd_tbl(struct bnxt_qplib_res *res,
 
 	pdt->max = max;
 	memset((u8 *)pdt->tbl, 0xFF, bytes);
+	mutex_init(&res->pd_tbl_lock);
 
 	return 0;
 }
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.h b/drivers/infiniband/hw/bnxt_re/qplib_res.h
index 57161d3..5949f00 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_res.h
+++ b/drivers/infiniband/hw/bnxt_re/qplib_res.h
@@ -277,6 +277,8 @@ struct bnxt_qplib_res {
 	struct net_device		*netdev;
 	struct bnxt_qplib_rcfw		*rcfw;
 	struct bnxt_qplib_pd_tbl	pd_tbl;
+	/* To protect the pd table bit map */
+	struct mutex			pd_tbl_lock;
 	struct bnxt_qplib_sgid_tbl	sgid_tbl;
 	struct bnxt_qplib_dpi_tbl	dpi_tbl;
 	/* To protect the dpi table bit map */
@@ -368,7 +370,7 @@ void bnxt_qplib_free_hwq(struct bnxt_qplib_res *res,
 			 struct bnxt_qplib_hwq *hwq);
 int bnxt_qplib_alloc_init_hwq(struct bnxt_qplib_hwq *hwq,
 			      struct bnxt_qplib_hwq_attr *hwq_attr);
-int bnxt_qplib_alloc_pd(struct bnxt_qplib_pd_tbl *pd_tbl,
+int bnxt_qplib_alloc_pd(struct bnxt_qplib_res *res,
 			struct bnxt_qplib_pd *pd);
 int bnxt_qplib_dealloc_pd(struct bnxt_qplib_res *res,
 			  struct bnxt_qplib_pd_tbl *pd_tbl,
-- 
2.5.5


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4224 bytes --]

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH for-next 2/2] RDMA/bnxt_re: Protect the PD table bitmap
  2023-08-14 17:00 ` [PATCH for-next 2/2] RDMA/bnxt_re: Protect the PD table bitmap Selvin Xavier
@ 2023-08-18 16:20   ` Jason Gunthorpe
  2023-08-19 20:04     ` Selvin Xavier
  0 siblings, 1 reply; 6+ messages in thread
From: Jason Gunthorpe @ 2023-08-18 16:20 UTC (permalink / raw)
  To: Selvin Xavier; +Cc: leon, linux-rdma, andrew.gospodarek, Kashyap Desai

On Mon, Aug 14, 2023 at 10:00:19AM -0700, Selvin Xavier wrote:
> Syncrhonization is required to avoid simultaneous allocation
> of the PD. Add a new mutex lock to handle allocation from
> the PD table.
> 
> Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
> Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
> ---
>  drivers/infiniband/hw/bnxt_re/ib_verbs.c  |  2 +-
>  drivers/infiniband/hw/bnxt_re/qplib_res.c | 26 ++++++++++++++++++++------
>  drivers/infiniband/hw/bnxt_re/qplib_res.h |  4 +++-
>  3 files changed, 24 insertions(+), 8 deletions(-)

This needs a fixes line, it seems like a serious bug??

> diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.c b/drivers/infiniband/hw/bnxt_re/qplib_res.c
> index 6f1e8b7..79c43c2 100644
> --- a/drivers/infiniband/hw/bnxt_re/qplib_res.c
> +++ b/drivers/infiniband/hw/bnxt_re/qplib_res.c
> @@ -642,31 +642,44 @@ static void bnxt_qplib_init_sgid_tbl(struct bnxt_qplib_sgid_tbl *sgid_tbl,
>  }
>  
>  /* PDs */
> -int bnxt_qplib_alloc_pd(struct bnxt_qplib_pd_tbl *pdt, struct bnxt_qplib_pd *pd)
> +int bnxt_qplib_alloc_pd(struct bnxt_qplib_res  *res, struct bnxt_qplib_pd *pd)
>  {
> +	struct bnxt_qplib_pd_tbl *pdt = &res->pd_tbl;
>  	u32 bit_num;
> +	int rc = 0;
>  
> +	mutex_lock(&res->pd_tbl_lock);
>  	bit_num = find_first_bit(pdt->tbl, pdt->max);

Please make a followup patch to change this into an IDA unless the pd
max is really small. Don't opencode IDAs in drivers..

Jason

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH for-next 2/2] RDMA/bnxt_re: Protect the PD table bitmap
  2023-08-18 16:20   ` Jason Gunthorpe
@ 2023-08-19 20:04     ` Selvin Xavier
  2023-08-20  9:32       ` Leon Romanovsky
  0 siblings, 1 reply; 6+ messages in thread
From: Selvin Xavier @ 2023-08-19 20:04 UTC (permalink / raw)
  To: Jason Gunthorpe; +Cc: leon, linux-rdma, andrew.gospodarek, Kashyap Desai

[-- Attachment #1: Type: text/plain, Size: 1776 bytes --]

On Fri, Aug 18, 2023 at 9:50 PM Jason Gunthorpe <jgg@nvidia.com> wrote:
>
> On Mon, Aug 14, 2023 at 10:00:19AM -0700, Selvin Xavier wrote:
> > Syncrhonization is required to avoid simultaneous allocation
> > of the PD. Add a new mutex lock to handle allocation from
> > the PD table.
> >
> > Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
> > Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
> > ---
> >  drivers/infiniband/hw/bnxt_re/ib_verbs.c  |  2 +-
> >  drivers/infiniband/hw/bnxt_re/qplib_res.c | 26 ++++++++++++++++++++------
> >  drivers/infiniband/hw/bnxt_re/qplib_res.h |  4 +++-
> >  3 files changed, 24 insertions(+), 8 deletions(-)
>
> This needs a fixes line, it seems like a serious bug??
Yes. It is a critical fix. Will add fixes line and post a v2.
>
> > diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.c b/drivers/infiniband/hw/bnxt_re/qplib_res.c
> > index 6f1e8b7..79c43c2 100644
> > --- a/drivers/infiniband/hw/bnxt_re/qplib_res.c
> > +++ b/drivers/infiniband/hw/bnxt_re/qplib_res.c
> > @@ -642,31 +642,44 @@ static void bnxt_qplib_init_sgid_tbl(struct bnxt_qplib_sgid_tbl *sgid_tbl,
> >  }
> >
> >  /* PDs */
> > -int bnxt_qplib_alloc_pd(struct bnxt_qplib_pd_tbl *pdt, struct bnxt_qplib_pd *pd)
> > +int bnxt_qplib_alloc_pd(struct bnxt_qplib_res  *res, struct bnxt_qplib_pd *pd)
> >  {
> > +     struct bnxt_qplib_pd_tbl *pdt = &res->pd_tbl;
> >       u32 bit_num;
> > +     int rc = 0;
> >
> > +     mutex_lock(&res->pd_tbl_lock);
> >       bit_num = find_first_bit(pdt->tbl, pdt->max);
>
> Please make a followup patch to change this into an IDA unless the pd
> max is really small. Don't opencode IDAs in drivers..
pd max is 64k. We will create a followup patch . Thanks.
>
> Jason

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4224 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH for-next 2/2] RDMA/bnxt_re: Protect the PD table bitmap
  2023-08-19 20:04     ` Selvin Xavier
@ 2023-08-20  9:32       ` Leon Romanovsky
  2023-08-21 12:37         ` Selvin Xavier
  0 siblings, 1 reply; 6+ messages in thread
From: Leon Romanovsky @ 2023-08-20  9:32 UTC (permalink / raw)
  To: Selvin Xavier
  Cc: Jason Gunthorpe, linux-rdma, andrew.gospodarek, Kashyap Desai

On Sun, Aug 20, 2023 at 01:34:17AM +0530, Selvin Xavier wrote:
> On Fri, Aug 18, 2023 at 9:50 PM Jason Gunthorpe <jgg@nvidia.com> wrote:
> >
> > On Mon, Aug 14, 2023 at 10:00:19AM -0700, Selvin Xavier wrote:
> > > Syncrhonization is required to avoid simultaneous allocation
> > > of the PD. Add a new mutex lock to handle allocation from
> > > the PD table.
> > >
> > > Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
> > > Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
> > > ---
> > >  drivers/infiniband/hw/bnxt_re/ib_verbs.c  |  2 +-
> > >  drivers/infiniband/hw/bnxt_re/qplib_res.c | 26 ++++++++++++++++++++------
> > >  drivers/infiniband/hw/bnxt_re/qplib_res.h |  4 +++-
> > >  3 files changed, 24 insertions(+), 8 deletions(-)
> >
> > This needs a fixes line, it seems like a serious bug??
> Yes. It is a critical fix. Will add fixes line and post a v2.

We already applied v1 and tagged for-next with it. Unless Jason wants to
rebase that branch, it is too late for v2.

Thanks

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH for-next 2/2] RDMA/bnxt_re: Protect the PD table bitmap
  2023-08-20  9:32       ` Leon Romanovsky
@ 2023-08-21 12:37         ` Selvin Xavier
  0 siblings, 0 replies; 6+ messages in thread
From: Selvin Xavier @ 2023-08-21 12:37 UTC (permalink / raw)
  To: Leon Romanovsky
  Cc: Jason Gunthorpe, linux-rdma, andrew.gospodarek, Kashyap Desai

[-- Attachment #1: Type: text/plain, Size: 1219 bytes --]

On Sun, Aug 20, 2023 at 3:02 PM Leon Romanovsky <leon@kernel.org> wrote:
>
> On Sun, Aug 20, 2023 at 01:34:17AM +0530, Selvin Xavier wrote:
> > On Fri, Aug 18, 2023 at 9:50 PM Jason Gunthorpe <jgg@nvidia.com> wrote:
> > >
> > > On Mon, Aug 14, 2023 at 10:00:19AM -0700, Selvin Xavier wrote:
> > > > Syncrhonization is required to avoid simultaneous allocation
> > > > of the PD. Add a new mutex lock to handle allocation from
> > > > the PD table.
> > > >
> > > > Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
> > > > Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
> > > > ---
> > > >  drivers/infiniband/hw/bnxt_re/ib_verbs.c  |  2 +-
> > > >  drivers/infiniband/hw/bnxt_re/qplib_res.c | 26 ++++++++++++++++++++------
> > > >  drivers/infiniband/hw/bnxt_re/qplib_res.h |  4 +++-
> > > >  3 files changed, 24 insertions(+), 8 deletions(-)
> > >
> > > This needs a fixes line, it seems like a serious bug??
> > Yes. It is a critical fix. Will add fixes line and post a v2.
>
> We already applied v1 and tagged for-next with it. Unless Jason wants to
> rebase that branch, it is too late for v2.
ok. I added only the fixes tag as per Jason's comment in v2.
>
> Thanks

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4224 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-08-21 12:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-14 17:00 [PATCH for-next 1/2] RDMA/bnxt_re: Initialize mutex dbq_lock Selvin Xavier
2023-08-14 17:00 ` [PATCH for-next 2/2] RDMA/bnxt_re: Protect the PD table bitmap Selvin Xavier
2023-08-18 16:20   ` Jason Gunthorpe
2023-08-19 20:04     ` Selvin Xavier
2023-08-20  9:32       ` Leon Romanovsky
2023-08-21 12:37         ` Selvin Xavier

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox