* [PATCH for-next] RDMA/bnxt_re: Remove pkey table
@ 2021-11-25 3:36 Kamal Heib
2021-11-25 12:35 ` Devesh Sharma
2021-11-25 17:37 ` Jason Gunthorpe
0 siblings, 2 replies; 3+ messages in thread
From: Kamal Heib @ 2021-11-25 3:36 UTC (permalink / raw)
To: linux-rdma; +Cc: Selvin Xavier, Jason Gunthorpe, Kamal Heib
The RoCE spec requires RoCE devices to support only the default pkey.
However the bnxt_re driver maintains 0xFFFF entries pkey table and uses
only the first entry. Remove the pkey table and hard code a table of
length one hard wired with the default pkey.
Signed-off-by: Kamal Heib <kamalheib1@gmail.com>
---
drivers/infiniband/hw/bnxt_re/ib_verbs.c | 9 +--
drivers/infiniband/hw/bnxt_re/qplib_fp.c | 11 ++-
drivers/infiniband/hw/bnxt_re/qplib_res.c | 50 ------------
drivers/infiniband/hw/bnxt_re/qplib_res.h | 7 --
drivers/infiniband/hw/bnxt_re/qplib_sp.c | 99 +----------------------
drivers/infiniband/hw/bnxt_re/qplib_sp.h | 9 ---
6 files changed, 10 insertions(+), 175 deletions(-)
diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
index 29cc0d14399a..3224f18a66e5 100644
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
@@ -262,13 +262,12 @@ void bnxt_re_query_fw_str(struct ib_device *ibdev, char *str)
int bnxt_re_query_pkey(struct ib_device *ibdev, u32 port_num,
u16 index, u16 *pkey)
{
- struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev);
+ if (index > 0)
+ return -EINVAL;
- /* Ignore port_num */
+ *pkey = IB_DEFAULT_PKEY_FULL;
- memset(pkey, 0, sizeof(*pkey));
- return bnxt_qplib_get_pkey(&rdev->qplib_res,
- &rdev->qplib_res.pkey_tbl, index, pkey);
+ return 0;
}
int bnxt_re_query_gid(struct ib_device *ibdev, u32 port_num,
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
index ca88849559bf..f6472cca9ec7 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
@@ -46,6 +46,7 @@
#include <linux/delay.h>
#include <linux/prefetch.h>
#include <linux/if_ether.h>
+#include <rdma/ib_mad.h>
#include "roce_hsi.h"
@@ -1232,7 +1233,7 @@ int bnxt_qplib_modify_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
struct bnxt_qplib_rcfw *rcfw = res->rcfw;
struct cmdq_modify_qp req;
struct creq_modify_qp_resp resp;
- u16 cmd_flags = 0, pkey;
+ u16 cmd_flags = 0;
u32 temp32[4];
u32 bmask;
int rc;
@@ -1255,11 +1256,9 @@ int bnxt_qplib_modify_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_ACCESS)
req.access = qp->access;
- if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_PKEY) {
- if (!bnxt_qplib_get_pkey(res, &res->pkey_tbl,
- qp->pkey_index, &pkey))
- req.pkey = cpu_to_le16(pkey);
- }
+ if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_PKEY)
+ req.pkey = IB_DEFAULT_PKEY_FULL;
+
if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_QKEY)
req.qkey = cpu_to_le32(qp->qkey);
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.c b/drivers/infiniband/hw/bnxt_re/qplib_res.c
index bc1ba4b51ba4..126d4f26f75a 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_res.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_res.c
@@ -649,31 +649,6 @@ static void bnxt_qplib_init_sgid_tbl(struct bnxt_qplib_sgid_tbl *sgid_tbl,
memset(sgid_tbl->hw_id, -1, sizeof(u16) * sgid_tbl->max);
}
-static void bnxt_qplib_free_pkey_tbl(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl)
-{
- if (!pkey_tbl->tbl)
- dev_dbg(&res->pdev->dev, "PKEY tbl not present\n");
- else
- kfree(pkey_tbl->tbl);
-
- pkey_tbl->tbl = NULL;
- pkey_tbl->max = 0;
- pkey_tbl->active = 0;
-}
-
-static int bnxt_qplib_alloc_pkey_tbl(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl,
- u16 max)
-{
- pkey_tbl->tbl = kcalloc(max, sizeof(u16), GFP_KERNEL);
- if (!pkey_tbl->tbl)
- return -ENOMEM;
-
- pkey_tbl->max = max;
- return 0;
-};
-
/* PDs */
int bnxt_qplib_alloc_pd(struct bnxt_qplib_pd_tbl *pdt, struct bnxt_qplib_pd *pd)
{
@@ -843,24 +818,6 @@ static int bnxt_qplib_alloc_dpi_tbl(struct bnxt_qplib_res *res,
return -ENOMEM;
}
-/* PKEYs */
-static void bnxt_qplib_cleanup_pkey_tbl(struct bnxt_qplib_pkey_tbl *pkey_tbl)
-{
- memset(pkey_tbl->tbl, 0, sizeof(u16) * pkey_tbl->max);
- pkey_tbl->active = 0;
-}
-
-static void bnxt_qplib_init_pkey_tbl(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl)
-{
- u16 pkey = 0xFFFF;
-
- memset(pkey_tbl->tbl, 0, sizeof(u16) * pkey_tbl->max);
-
- /* pkey default = 0xFFFF */
- bnxt_qplib_add_pkey(res, pkey_tbl, &pkey, false);
-}
-
/* Stats */
static void bnxt_qplib_free_stats_ctx(struct pci_dev *pdev,
struct bnxt_qplib_stats *stats)
@@ -891,21 +848,18 @@ static int bnxt_qplib_alloc_stats_ctx(struct pci_dev *pdev,
void bnxt_qplib_cleanup_res(struct bnxt_qplib_res *res)
{
- bnxt_qplib_cleanup_pkey_tbl(&res->pkey_tbl);
bnxt_qplib_cleanup_sgid_tbl(res, &res->sgid_tbl);
}
int bnxt_qplib_init_res(struct bnxt_qplib_res *res)
{
bnxt_qplib_init_sgid_tbl(&res->sgid_tbl, res->netdev);
- bnxt_qplib_init_pkey_tbl(res, &res->pkey_tbl);
return 0;
}
void bnxt_qplib_free_res(struct bnxt_qplib_res *res)
{
- bnxt_qplib_free_pkey_tbl(res, &res->pkey_tbl);
bnxt_qplib_free_sgid_tbl(res, &res->sgid_tbl);
bnxt_qplib_free_pd_tbl(&res->pd_tbl);
bnxt_qplib_free_dpi_tbl(res, &res->dpi_tbl);
@@ -924,10 +878,6 @@ int bnxt_qplib_alloc_res(struct bnxt_qplib_res *res, struct pci_dev *pdev,
if (rc)
goto fail;
- rc = bnxt_qplib_alloc_pkey_tbl(res, &res->pkey_tbl, dev_attr->max_pkey);
- if (rc)
- goto fail;
-
rc = bnxt_qplib_alloc_pd_tbl(res, &res->pd_tbl, dev_attr->max_pd);
if (rc)
goto fail;
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.h b/drivers/infiniband/hw/bnxt_re/qplib_res.h
index e1411a2352a7..982e2c96dac2 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_res.h
+++ b/drivers/infiniband/hw/bnxt_re/qplib_res.h
@@ -185,12 +185,6 @@ struct bnxt_qplib_sgid_tbl {
u8 *vlan;
};
-struct bnxt_qplib_pkey_tbl {
- u16 *tbl;
- u16 max;
- u16 active;
-};
-
struct bnxt_qplib_dpi {
u32 dpi;
void __iomem *dbr;
@@ -258,7 +252,6 @@ struct bnxt_qplib_res {
struct bnxt_qplib_rcfw *rcfw;
struct bnxt_qplib_pd_tbl pd_tbl;
struct bnxt_qplib_sgid_tbl sgid_tbl;
- struct bnxt_qplib_pkey_tbl pkey_tbl;
struct bnxt_qplib_dpi_tbl dpi_tbl;
bool prio;
bool is_vf;
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_sp.c b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
index 379e715ebd30..b802981b7171 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_sp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
@@ -146,17 +146,7 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
attr->max_srq = le16_to_cpu(sb->max_srq);
attr->max_srq_wqes = le32_to_cpu(sb->max_srq_wr) - 1;
attr->max_srq_sges = sb->max_srq_sge;
- attr->max_pkey = le32_to_cpu(sb->max_pkeys);
- /*
- * Some versions of FW reports more than 0xFFFF.
- * Restrict it for now to 0xFFFF to avoid
- * reporting trucated value
- */
- if (attr->max_pkey > 0xFFFF) {
- /* ib_port_attr::pkey_tbl_len is u16 */
- attr->max_pkey = 0xFFFF;
- }
-
+ attr->max_pkey = 1;
attr->max_inline_data = le32_to_cpu(sb->max_inline_data);
attr->l2_db_size = (sb->l2_db_space_size + 1) *
(0x01 << RCFW_DBR_BASE_PAGE_SHIFT);
@@ -414,93 +404,6 @@ int bnxt_qplib_update_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
return rc;
}
-/* pkeys */
-int bnxt_qplib_get_pkey(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 index,
- u16 *pkey)
-{
- if (index == 0xFFFF) {
- *pkey = 0xFFFF;
- return 0;
- }
- if (index >= pkey_tbl->max) {
- dev_err(&res->pdev->dev,
- "Index %d exceeded PKEY table max (%d)\n",
- index, pkey_tbl->max);
- return -EINVAL;
- }
- memcpy(pkey, &pkey_tbl->tbl[index], sizeof(*pkey));
- return 0;
-}
-
-int bnxt_qplib_del_pkey(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
- bool update)
-{
- int i, rc = 0;
-
- if (!pkey_tbl) {
- dev_err(&res->pdev->dev, "PKEY table not allocated\n");
- return -EINVAL;
- }
-
- /* Do we need a pkey_lock here? */
- if (!pkey_tbl->active) {
- dev_err(&res->pdev->dev, "PKEY table has no active entries\n");
- return -ENOMEM;
- }
- for (i = 0; i < pkey_tbl->max; i++) {
- if (!memcmp(&pkey_tbl->tbl[i], pkey, sizeof(*pkey)))
- break;
- }
- if (i == pkey_tbl->max) {
- dev_err(&res->pdev->dev,
- "PKEY 0x%04x not found in the pkey table\n", *pkey);
- return -ENOMEM;
- }
- memset(&pkey_tbl->tbl[i], 0, sizeof(*pkey));
- pkey_tbl->active--;
-
- /* unlock */
- return rc;
-}
-
-int bnxt_qplib_add_pkey(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
- bool update)
-{
- int i, free_idx, rc = 0;
-
- if (!pkey_tbl) {
- dev_err(&res->pdev->dev, "PKEY table not allocated\n");
- return -EINVAL;
- }
-
- /* Do we need a pkey_lock here? */
- if (pkey_tbl->active == pkey_tbl->max) {
- dev_err(&res->pdev->dev, "PKEY table is full\n");
- return -ENOMEM;
- }
- free_idx = pkey_tbl->max;
- for (i = 0; i < pkey_tbl->max; i++) {
- if (!memcmp(&pkey_tbl->tbl[i], pkey, sizeof(*pkey)))
- return -EALREADY;
- else if (!pkey_tbl->tbl[i] && free_idx == pkey_tbl->max)
- free_idx = i;
- }
- if (free_idx == pkey_tbl->max) {
- dev_err(&res->pdev->dev,
- "PKEY table is FULL but count is not MAX??\n");
- return -ENOMEM;
- }
- /* Add PKEY to the pkey_tbl */
- memcpy(&pkey_tbl->tbl[free_idx], pkey, sizeof(*pkey));
- pkey_tbl->active++;
-
- /* unlock */
- return rc;
-}
-
/* AH */
int bnxt_qplib_create_ah(struct bnxt_qplib_res *res, struct bnxt_qplib_ah *ah,
bool block)
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_sp.h b/drivers/infiniband/hw/bnxt_re/qplib_sp.h
index a18f568cb23e..5939e8fc8353 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_sp.h
+++ b/drivers/infiniband/hw/bnxt_re/qplib_sp.h
@@ -255,15 +255,6 @@ int bnxt_qplib_add_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
int bnxt_qplib_update_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
struct bnxt_qplib_gid *gid, u16 gid_idx,
const u8 *smac);
-int bnxt_qplib_get_pkey(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 index,
- u16 *pkey);
-int bnxt_qplib_del_pkey(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
- bool update);
-int bnxt_qplib_add_pkey(struct bnxt_qplib_res *res,
- struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
- bool update);
int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
struct bnxt_qplib_dev_attr *attr, bool vf);
int bnxt_qplib_set_func_resources(struct bnxt_qplib_res *res,
--
2.31.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: [PATCH for-next] RDMA/bnxt_re: Remove pkey table
2021-11-25 3:36 [PATCH for-next] RDMA/bnxt_re: Remove pkey table Kamal Heib
@ 2021-11-25 12:35 ` Devesh Sharma
2021-11-25 17:37 ` Jason Gunthorpe
1 sibling, 0 replies; 3+ messages in thread
From: Devesh Sharma @ 2021-11-25 12:35 UTC (permalink / raw)
To: Kamal Heib, linux-rdma; +Cc: Selvin Xavier, Jason Gunthorpe
> -----Original Message-----
> From: Kamal Heib <kamalheib1@gmail.com>
> Sent: Thursday, November 25, 2021 9:06 AM
> To: linux-rdma@vger.kernel.org
> Cc: Selvin Xavier <selvin.xavier@broadcom.com>; Jason Gunthorpe
> <jgg@ziepe.ca>; Kamal Heib <kamalheib1@gmail.com>
> Subject: [PATCH for-next] RDMA/bnxt_re: Remove pkey table
>
> The RoCE spec requires RoCE devices to support only the default pkey.
> However the bnxt_re driver maintains 0xFFFF entries pkey table and uses
> only the first entry. Remove the pkey table and hard code a table of length
> one hard wired with the default pkey.
>
> Signed-off-by: Kamal Heib <kamalheib1@gmail.com>
> ---
> drivers/infiniband/hw/bnxt_re/ib_verbs.c | 9 +--
> drivers/infiniband/hw/bnxt_re/qplib_fp.c | 11 ++-
> drivers/infiniband/hw/bnxt_re/qplib_res.c | 50 ------------
> drivers/infiniband/hw/bnxt_re/qplib_res.h | 7 --
> drivers/infiniband/hw/bnxt_re/qplib_sp.c | 99 +----------------------
> drivers/infiniband/hw/bnxt_re/qplib_sp.h | 9 ---
> 6 files changed, 10 insertions(+), 175 deletions(-)
>
> diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
> b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
> index 29cc0d14399a..3224f18a66e5 100644
> --- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
> +++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
> @@ -262,13 +262,12 @@ void bnxt_re_query_fw_str(struct ib_device
> *ibdev, char *str) int bnxt_re_query_pkey(struct ib_device *ibdev, u32
> port_num,
> u16 index, u16 *pkey)
> {
> - struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev);
> + if (index > 0)
> + return -EINVAL;
>
> - /* Ignore port_num */
> + *pkey = IB_DEFAULT_PKEY_FULL;
>
> - memset(pkey, 0, sizeof(*pkey));
> - return bnxt_qplib_get_pkey(&rdev->qplib_res,
> - &rdev->qplib_res.pkey_tbl, index, pkey);
> + return 0;
> }
>
> int bnxt_re_query_gid(struct ib_device *ibdev, u32 port_num, diff --git
> a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
> b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
> index ca88849559bf..f6472cca9ec7 100644
> --- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
> +++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
> @@ -46,6 +46,7 @@
> #include <linux/delay.h>
> #include <linux/prefetch.h>
> #include <linux/if_ether.h>
> +#include <rdma/ib_mad.h>
>
> #include "roce_hsi.h"
>
> @@ -1232,7 +1233,7 @@ int bnxt_qplib_modify_qp(struct bnxt_qplib_res
> *res, struct bnxt_qplib_qp *qp)
> struct bnxt_qplib_rcfw *rcfw = res->rcfw;
> struct cmdq_modify_qp req;
> struct creq_modify_qp_resp resp;
> - u16 cmd_flags = 0, pkey;
> + u16 cmd_flags = 0;
> u32 temp32[4];
> u32 bmask;
> int rc;
> @@ -1255,11 +1256,9 @@ int bnxt_qplib_modify_qp(struct bnxt_qplib_res
> *res, struct bnxt_qplib_qp *qp)
> if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_ACCESS)
> req.access = qp->access;
>
> - if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_PKEY) {
> - if (!bnxt_qplib_get_pkey(res, &res->pkey_tbl,
> - qp->pkey_index, &pkey))
> - req.pkey = cpu_to_le16(pkey);
> - }
> + if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_PKEY)
> + req.pkey = IB_DEFAULT_PKEY_FULL;
> +
> if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_QKEY)
> req.qkey = cpu_to_le32(qp->qkey);
>
> diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.c
> b/drivers/infiniband/hw/bnxt_re/qplib_res.c
> index bc1ba4b51ba4..126d4f26f75a 100644
> --- a/drivers/infiniband/hw/bnxt_re/qplib_res.c
> +++ b/drivers/infiniband/hw/bnxt_re/qplib_res.c
> @@ -649,31 +649,6 @@ static void bnxt_qplib_init_sgid_tbl(struct
> bnxt_qplib_sgid_tbl *sgid_tbl,
> memset(sgid_tbl->hw_id, -1, sizeof(u16) * sgid_tbl->max); }
>
> -static void bnxt_qplib_free_pkey_tbl(struct bnxt_qplib_res *res,
> - struct bnxt_qplib_pkey_tbl *pkey_tbl)
> -{
> - if (!pkey_tbl->tbl)
> - dev_dbg(&res->pdev->dev, "PKEY tbl not present\n");
> - else
> - kfree(pkey_tbl->tbl);
> -
> - pkey_tbl->tbl = NULL;
> - pkey_tbl->max = 0;
> - pkey_tbl->active = 0;
> -}
> -
> -static int bnxt_qplib_alloc_pkey_tbl(struct bnxt_qplib_res *res,
> - struct bnxt_qplib_pkey_tbl *pkey_tbl,
> - u16 max)
> -{
> - pkey_tbl->tbl = kcalloc(max, sizeof(u16), GFP_KERNEL);
> - if (!pkey_tbl->tbl)
> - return -ENOMEM;
> -
> - pkey_tbl->max = max;
> - return 0;
> -};
> -
> /* PDs */
> int bnxt_qplib_alloc_pd(struct bnxt_qplib_pd_tbl *pdt, struct
> bnxt_qplib_pd *pd) {
> @@ -843,24 +818,6 @@ static int bnxt_qplib_alloc_dpi_tbl(struct
> bnxt_qplib_res *res,
> return -ENOMEM;
> }
>
> -/* PKEYs */
> -static void bnxt_qplib_cleanup_pkey_tbl(struct bnxt_qplib_pkey_tbl
> *pkey_tbl) -{
> - memset(pkey_tbl->tbl, 0, sizeof(u16) * pkey_tbl->max);
> - pkey_tbl->active = 0;
> -}
> -
> -static void bnxt_qplib_init_pkey_tbl(struct bnxt_qplib_res *res,
> - struct bnxt_qplib_pkey_tbl *pkey_tbl)
> -{
> - u16 pkey = 0xFFFF;
> -
> - memset(pkey_tbl->tbl, 0, sizeof(u16) * pkey_tbl->max);
> -
> - /* pkey default = 0xFFFF */
> - bnxt_qplib_add_pkey(res, pkey_tbl, &pkey, false);
> -}
> -
> /* Stats */
> static void bnxt_qplib_free_stats_ctx(struct pci_dev *pdev,
> struct bnxt_qplib_stats *stats) @@ -
> 891,21 +848,18 @@ static int bnxt_qplib_alloc_stats_ctx(struct pci_dev
> *pdev,
>
> void bnxt_qplib_cleanup_res(struct bnxt_qplib_res *res) {
> - bnxt_qplib_cleanup_pkey_tbl(&res->pkey_tbl);
> bnxt_qplib_cleanup_sgid_tbl(res, &res->sgid_tbl); }
>
> int bnxt_qplib_init_res(struct bnxt_qplib_res *res) {
> bnxt_qplib_init_sgid_tbl(&res->sgid_tbl, res->netdev);
> - bnxt_qplib_init_pkey_tbl(res, &res->pkey_tbl);
>
> return 0;
> }
>
> void bnxt_qplib_free_res(struct bnxt_qplib_res *res) {
> - bnxt_qplib_free_pkey_tbl(res, &res->pkey_tbl);
> bnxt_qplib_free_sgid_tbl(res, &res->sgid_tbl);
> bnxt_qplib_free_pd_tbl(&res->pd_tbl);
> bnxt_qplib_free_dpi_tbl(res, &res->dpi_tbl); @@ -924,10 +878,6
> @@ int bnxt_qplib_alloc_res(struct bnxt_qplib_res *res, struct pci_dev
> *pdev,
> if (rc)
> goto fail;
>
> - rc = bnxt_qplib_alloc_pkey_tbl(res, &res->pkey_tbl, dev_attr-
> >max_pkey);
> - if (rc)
> - goto fail;
> -
> rc = bnxt_qplib_alloc_pd_tbl(res, &res->pd_tbl, dev_attr->max_pd);
> if (rc)
> goto fail;
> diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.h
> b/drivers/infiniband/hw/bnxt_re/qplib_res.h
> index e1411a2352a7..982e2c96dac2 100644
> --- a/drivers/infiniband/hw/bnxt_re/qplib_res.h
> +++ b/drivers/infiniband/hw/bnxt_re/qplib_res.h
> @@ -185,12 +185,6 @@ struct bnxt_qplib_sgid_tbl {
> u8 *vlan;
> };
>
> -struct bnxt_qplib_pkey_tbl {
> - u16 *tbl;
> - u16 max;
> - u16 active;
> -};
> -
> struct bnxt_qplib_dpi {
> u32 dpi;
> void __iomem *dbr;
> @@ -258,7 +252,6 @@ struct bnxt_qplib_res {
> struct bnxt_qplib_rcfw *rcfw;
> struct bnxt_qplib_pd_tbl pd_tbl;
> struct bnxt_qplib_sgid_tbl sgid_tbl;
> - struct bnxt_qplib_pkey_tbl pkey_tbl;
> struct bnxt_qplib_dpi_tbl dpi_tbl;
> bool prio;
> bool is_vf;
> diff --git a/drivers/infiniband/hw/bnxt_re/qplib_sp.c
> b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
> index 379e715ebd30..b802981b7171 100644
> --- a/drivers/infiniband/hw/bnxt_re/qplib_sp.c
> +++ b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
> @@ -146,17 +146,7 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw
> *rcfw,
> attr->max_srq = le16_to_cpu(sb->max_srq);
> attr->max_srq_wqes = le32_to_cpu(sb->max_srq_wr) - 1;
> attr->max_srq_sges = sb->max_srq_sge;
> - attr->max_pkey = le32_to_cpu(sb->max_pkeys);
> - /*
> - * Some versions of FW reports more than 0xFFFF.
> - * Restrict it for now to 0xFFFF to avoid
> - * reporting trucated value
> - */
> - if (attr->max_pkey > 0xFFFF) {
> - /* ib_port_attr::pkey_tbl_len is u16 */
> - attr->max_pkey = 0xFFFF;
> - }
> -
> + attr->max_pkey = 1;
> attr->max_inline_data = le32_to_cpu(sb->max_inline_data);
> attr->l2_db_size = (sb->l2_db_space_size + 1) *
> (0x01 << RCFW_DBR_BASE_PAGE_SHIFT); @@ -
> 414,93 +404,6 @@ int bnxt_qplib_update_sgid(struct bnxt_qplib_sgid_tbl
> *sgid_tbl,
> return rc;
> }
>
> -/* pkeys */
> -int bnxt_qplib_get_pkey(struct bnxt_qplib_res *res,
> - struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 index,
> - u16 *pkey)
> -{
> - if (index == 0xFFFF) {
> - *pkey = 0xFFFF;
> - return 0;
> - }
> - if (index >= pkey_tbl->max) {
> - dev_err(&res->pdev->dev,
> - "Index %d exceeded PKEY table max (%d)\n",
> - index, pkey_tbl->max);
> - return -EINVAL;
> - }
> - memcpy(pkey, &pkey_tbl->tbl[index], sizeof(*pkey));
> - return 0;
> -}
> -
> -int bnxt_qplib_del_pkey(struct bnxt_qplib_res *res,
> - struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
> - bool update)
> -{
> - int i, rc = 0;
> -
> - if (!pkey_tbl) {
> - dev_err(&res->pdev->dev, "PKEY table not allocated\n");
> - return -EINVAL;
> - }
> -
> - /* Do we need a pkey_lock here? */
> - if (!pkey_tbl->active) {
> - dev_err(&res->pdev->dev, "PKEY table has no active
> entries\n");
> - return -ENOMEM;
> - }
> - for (i = 0; i < pkey_tbl->max; i++) {
> - if (!memcmp(&pkey_tbl->tbl[i], pkey, sizeof(*pkey)))
> - break;
> - }
> - if (i == pkey_tbl->max) {
> - dev_err(&res->pdev->dev,
> - "PKEY 0x%04x not found in the pkey table\n",
> *pkey);
> - return -ENOMEM;
> - }
> - memset(&pkey_tbl->tbl[i], 0, sizeof(*pkey));
> - pkey_tbl->active--;
> -
> - /* unlock */
> - return rc;
> -}
> -
> -int bnxt_qplib_add_pkey(struct bnxt_qplib_res *res,
> - struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
> - bool update)
> -{
> - int i, free_idx, rc = 0;
> -
> - if (!pkey_tbl) {
> - dev_err(&res->pdev->dev, "PKEY table not allocated\n");
> - return -EINVAL;
> - }
> -
> - /* Do we need a pkey_lock here? */
> - if (pkey_tbl->active == pkey_tbl->max) {
> - dev_err(&res->pdev->dev, "PKEY table is full\n");
> - return -ENOMEM;
> - }
> - free_idx = pkey_tbl->max;
> - for (i = 0; i < pkey_tbl->max; i++) {
> - if (!memcmp(&pkey_tbl->tbl[i], pkey, sizeof(*pkey)))
> - return -EALREADY;
> - else if (!pkey_tbl->tbl[i] && free_idx == pkey_tbl->max)
> - free_idx = i;
> - }
> - if (free_idx == pkey_tbl->max) {
> - dev_err(&res->pdev->dev,
> - "PKEY table is FULL but count is not MAX??\n");
> - return -ENOMEM;
> - }
> - /* Add PKEY to the pkey_tbl */
> - memcpy(&pkey_tbl->tbl[free_idx], pkey, sizeof(*pkey));
> - pkey_tbl->active++;
> -
> - /* unlock */
> - return rc;
> -}
> -
> /* AH */
> int bnxt_qplib_create_ah(struct bnxt_qplib_res *res, struct bnxt_qplib_ah
> *ah,
> bool block)
> diff --git a/drivers/infiniband/hw/bnxt_re/qplib_sp.h
> b/drivers/infiniband/hw/bnxt_re/qplib_sp.h
> index a18f568cb23e..5939e8fc8353 100644
> --- a/drivers/infiniband/hw/bnxt_re/qplib_sp.h
> +++ b/drivers/infiniband/hw/bnxt_re/qplib_sp.h
> @@ -255,15 +255,6 @@ int bnxt_qplib_add_sgid(struct bnxt_qplib_sgid_tbl
> *sgid_tbl, int bnxt_qplib_update_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
> struct bnxt_qplib_gid *gid, u16 gid_idx,
> const u8 *smac);
> -int bnxt_qplib_get_pkey(struct bnxt_qplib_res *res,
> - struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 index,
> - u16 *pkey);
> -int bnxt_qplib_del_pkey(struct bnxt_qplib_res *res,
> - struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
> - bool update);
> -int bnxt_qplib_add_pkey(struct bnxt_qplib_res *res,
> - struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
> - bool update);
> int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
> struct bnxt_qplib_dev_attr *attr, bool vf); int
> bnxt_qplib_set_func_resources(struct bnxt_qplib_res *res,
Looks good to me.
Reviewed-By: Devesh Sharma <devesh.s.sharma@oracle.com>
> --
> 2.31.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH for-next] RDMA/bnxt_re: Remove pkey table
2021-11-25 3:36 [PATCH for-next] RDMA/bnxt_re: Remove pkey table Kamal Heib
2021-11-25 12:35 ` Devesh Sharma
@ 2021-11-25 17:37 ` Jason Gunthorpe
1 sibling, 0 replies; 3+ messages in thread
From: Jason Gunthorpe @ 2021-11-25 17:37 UTC (permalink / raw)
To: Kamal Heib; +Cc: linux-rdma, Selvin Xavier
On Thu, Nov 25, 2021 at 05:36:15AM +0200, Kamal Heib wrote:
> The RoCE spec requires RoCE devices to support only the default pkey.
> However the bnxt_re driver maintains 0xFFFF entries pkey table and uses
> only the first entry. Remove the pkey table and hard code a table of
> length one hard wired with the default pkey.
>
> Signed-off-by: Kamal Heib <kamalheib1@gmail.com>
> Reviewed-By: Devesh Sharma <devesh.s.sharma@oracle.com>
> ---
> drivers/infiniband/hw/bnxt_re/ib_verbs.c | 9 +--
> drivers/infiniband/hw/bnxt_re/qplib_fp.c | 11 ++-
> drivers/infiniband/hw/bnxt_re/qplib_res.c | 50 ------------
> drivers/infiniband/hw/bnxt_re/qplib_res.h | 7 --
> drivers/infiniband/hw/bnxt_re/qplib_sp.c | 99 +----------------------
> drivers/infiniband/hw/bnxt_re/qplib_sp.h | 9 ---
> 6 files changed, 10 insertions(+), 175 deletions(-)
Applied to for-next, thanks
Jason
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-11-25 17:41 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-25 3:36 [PATCH for-next] RDMA/bnxt_re: Remove pkey table Kamal Heib
2021-11-25 12:35 ` Devesh Sharma
2021-11-25 17:37 ` Jason Gunthorpe
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.