All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH for-next v4 0/2]  Retrieve HW GID context from ib_gid_attr
@ 2020-02-19 10:19 Selvin Xavier
  2020-02-19 10:19 ` [PATCH for-next v4 1/2] RDMA/core: Add helper function to retrieve driver gid context from gid attr Selvin Xavier
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Selvin Xavier @ 2020-02-19 10:19 UTC (permalink / raw)
  To: dledford, jgg; +Cc: linux-rdma, Selvin Xavier

Provide an option for vendor drivers to get the HW GID context
from the ib_gid_attr during modify_qp and create_ah. Required
for drivers/HW that maintains HW gid index different than the
host sgid_index.

Please review and merge

Thanks,
Selvin Xavier

v3 -> v4:
 Addressed Jason's comments. Removed unnecessary validation and locking
 as the reference to the GID table entry should be taken before invoking
 the new symbol.

v2 -> v3:
 Added a new symbol to retrieve the hw context.

v1 -> v2:
 Addressed review comments from Parav


Selvin Xavier (2):
  RDMA/core: Add helper function to retrieve driver gid context from gid
    attr
  RDMA/bnxt_re: Use rdma_read_gid_hw_context to retrieve HW gid index

 drivers/infiniband/core/cache.c          | 20 ++++++++++++++++++++
 drivers/infiniband/hw/bnxt_re/ib_verbs.c | 23 ++++++++++++-----------
 include/rdma/ib_cache.h                  |  1 +
 3 files changed, 33 insertions(+), 11 deletions(-)

-- 
2.5.5


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

* [PATCH for-next v4 1/2] RDMA/core: Add helper function to retrieve driver gid context from gid attr
  2020-02-19 10:19 [PATCH for-next v4 0/2] Retrieve HW GID context from ib_gid_attr Selvin Xavier
@ 2020-02-19 10:19 ` Selvin Xavier
  2020-02-19 10:19 ` [PATCH for-next v4 2/2] RDMA/bnxt_re: Use rdma_read_gid_hw_context to retrieve HW gid index Selvin Xavier
  2020-02-19 20:50 ` [PATCH for-next v4 0/2] Retrieve HW GID context from ib_gid_attr Jason Gunthorpe
  2 siblings, 0 replies; 4+ messages in thread
From: Selvin Xavier @ 2020-02-19 10:19 UTC (permalink / raw)
  To: dledford, jgg; +Cc: linux-rdma, Selvin Xavier

Adding a helper function to retrieve the driver gid context
from the gid attr.

Suggested-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
---
 drivers/infiniband/core/cache.c | 20 ++++++++++++++++++++
 include/rdma/ib_cache.h         |  1 +
 2 files changed, 21 insertions(+)

diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
index 17bfedd..2ebf322 100644
--- a/drivers/infiniband/core/cache.c
+++ b/drivers/infiniband/core/cache.c
@@ -973,6 +973,26 @@ int rdma_query_gid(struct ib_device *device, u8 port_num,
 EXPORT_SYMBOL(rdma_query_gid);
 
 /**
+ * rdma_read_gid_hw_context - Read the HW GID context from GID attribute
+ * @attr:		Potinter to the GID attribute
+ *
+ * rdma_read_gid_hw_context() reads the vendor drivers GID HW
+ * context corresponding to SGID attr. Callers are required to already
+ * be holding the reference to existing GID entry.
+ *
+ * Returns HW GID context
+ *
+ */
+void *rdma_read_gid_hw_context(const struct ib_gid_attr *attr)
+{
+	struct ib_gid_table_entry *entry =
+		container_of(attr, struct ib_gid_table_entry, attr);
+
+	return entry->context;
+}
+EXPORT_SYMBOL(rdma_read_gid_hw_context);
+
+/**
  * rdma_find_gid - Returns SGID attributes if the matching GID is found.
  * @device: The device to query.
  * @gid: The GID value to search for.
diff --git a/include/rdma/ib_cache.h b/include/rdma/ib_cache.h
index 870b5e6..e06d133 100644
--- a/include/rdma/ib_cache.h
+++ b/include/rdma/ib_cache.h
@@ -39,6 +39,7 @@
 
 int rdma_query_gid(struct ib_device *device, u8 port_num, int index,
 		   union ib_gid *gid);
+void *rdma_read_gid_hw_context(const struct ib_gid_attr *attr);
 const struct ib_gid_attr *rdma_find_gid(struct ib_device *device,
 					const union ib_gid *gid,
 					enum ib_gid_type gid_type,
-- 
2.5.5


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

* [PATCH for-next v4 2/2] RDMA/bnxt_re: Use rdma_read_gid_hw_context to retrieve HW gid index
  2020-02-19 10:19 [PATCH for-next v4 0/2] Retrieve HW GID context from ib_gid_attr Selvin Xavier
  2020-02-19 10:19 ` [PATCH for-next v4 1/2] RDMA/core: Add helper function to retrieve driver gid context from gid attr Selvin Xavier
@ 2020-02-19 10:19 ` Selvin Xavier
  2020-02-19 20:50 ` [PATCH for-next v4 0/2] Retrieve HW GID context from ib_gid_attr Jason Gunthorpe
  2 siblings, 0 replies; 4+ messages in thread
From: Selvin Xavier @ 2020-02-19 10:19 UTC (permalink / raw)
  To: dledford, jgg; +Cc: linux-rdma, Selvin Xavier

bnxt_re HW maintains a GID table with only a single entry for
the two duplicate GID entries (v1 and v2). Driver needs
to map stack gid index to the HW table gid index.
Use the new API rdma_read_gid_hw_context () to
retrieve the HW GID context to get the HW table index.

Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
---
 drivers/infiniband/hw/bnxt_re/ib_verbs.c | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
index 52b6a4d..18579e8 100644
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
@@ -639,6 +639,7 @@ int bnxt_re_create_ah(struct ib_ah *ib_ah, struct rdma_ah_attr *ah_attr,
 	const struct ib_global_route *grh = rdma_ah_read_grh(ah_attr);
 	struct bnxt_re_dev *rdev = pd->rdev;
 	const struct ib_gid_attr *sgid_attr;
+	struct bnxt_re_gid_ctx *ctx;
 	struct bnxt_re_ah *ah = container_of(ib_ah, struct bnxt_re_ah, ib_ah);
 	u8 nw_type;
 	int rc;
@@ -654,19 +655,18 @@ int bnxt_re_create_ah(struct ib_ah *ib_ah, struct rdma_ah_attr *ah_attr,
 	/* Supply the configuration for the HW */
 	memcpy(ah->qplib_ah.dgid.data, grh->dgid.raw,
 	       sizeof(union ib_gid));
-	/*
-	 * If RoCE V2 is enabled, stack will have two entries for
-	 * each GID entry. Avoiding this duplicte entry in HW. Dividing
-	 * the GID index by 2 for RoCE V2
+	sgid_attr = grh->sgid_attr;
+	/* Get the HW context of the GID. The reference
+	 * of GID table entry is already taken by the caller.
 	 */
-	ah->qplib_ah.sgid_index = grh->sgid_index / 2;
+	ctx = rdma_read_gid_hw_context(sgid_attr);
+	ah->qplib_ah.sgid_index = ctx->idx;
 	ah->qplib_ah.host_sgid_index = grh->sgid_index;
 	ah->qplib_ah.traffic_class = grh->traffic_class;
 	ah->qplib_ah.flow_label = grh->flow_label;
 	ah->qplib_ah.hop_limit = grh->hop_limit;
 	ah->qplib_ah.sl = rdma_ah_get_sl(ah_attr);
 
-	sgid_attr = grh->sgid_attr;
 	/* Get network header type for this GID */
 	nw_type = rdma_gid_attr_network_type(sgid_attr);
 	ah->qplib_ah.nw_type = bnxt_re_stack_to_dev_nw_type(nw_type);
@@ -1593,6 +1593,7 @@ int bnxt_re_modify_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr,
 		const struct ib_global_route *grh =
 			rdma_ah_read_grh(&qp_attr->ah_attr);
 		const struct ib_gid_attr *sgid_attr;
+		struct bnxt_re_gid_ctx *ctx;
 
 		qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_DGID |
 				     CMDQ_MODIFY_QP_MODIFY_MASK_FLOW_LABEL |
@@ -1604,11 +1605,12 @@ int bnxt_re_modify_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr,
 		memcpy(qp->qplib_qp.ah.dgid.data, grh->dgid.raw,
 		       sizeof(qp->qplib_qp.ah.dgid.data));
 		qp->qplib_qp.ah.flow_label = grh->flow_label;
-		/* If RoCE V2 is enabled, stack will have two entries for
-		 * each GID entry. Avoiding this duplicte entry in HW. Dividing
-		 * the GID index by 2 for RoCE V2
+		sgid_attr = grh->sgid_attr;
+		/* Get the HW context of the GID. The reference
+		 * of GID table entry is already taken by the caller.
 		 */
-		qp->qplib_qp.ah.sgid_index = grh->sgid_index / 2;
+		ctx = rdma_read_gid_hw_context(sgid_attr);
+		qp->qplib_qp.ah.sgid_index = ctx->idx;
 		qp->qplib_qp.ah.host_sgid_index = grh->sgid_index;
 		qp->qplib_qp.ah.hop_limit = grh->hop_limit;
 		qp->qplib_qp.ah.traffic_class = grh->traffic_class;
@@ -1616,7 +1618,6 @@ int bnxt_re_modify_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr,
 		ether_addr_copy(qp->qplib_qp.ah.dmac,
 				qp_attr->ah_attr.roce.dmac);
 
-		sgid_attr = qp_attr->ah_attr.grh.sgid_attr;
 		rc = rdma_read_gid_l2_fields(sgid_attr, NULL,
 					     &qp->qplib_qp.smac[0]);
 		if (rc)
-- 
2.5.5


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

* Re: [PATCH for-next v4 0/2]  Retrieve HW GID context from ib_gid_attr
  2020-02-19 10:19 [PATCH for-next v4 0/2] Retrieve HW GID context from ib_gid_attr Selvin Xavier
  2020-02-19 10:19 ` [PATCH for-next v4 1/2] RDMA/core: Add helper function to retrieve driver gid context from gid attr Selvin Xavier
  2020-02-19 10:19 ` [PATCH for-next v4 2/2] RDMA/bnxt_re: Use rdma_read_gid_hw_context to retrieve HW gid index Selvin Xavier
@ 2020-02-19 20:50 ` Jason Gunthorpe
  2 siblings, 0 replies; 4+ messages in thread
From: Jason Gunthorpe @ 2020-02-19 20:50 UTC (permalink / raw)
  To: Selvin Xavier; +Cc: dledford, linux-rdma

On Wed, Feb 19, 2020 at 02:19:52AM -0800, Selvin Xavier wrote:
> Provide an option for vendor drivers to get the HW GID context
> from the ib_gid_attr during modify_qp and create_ah. Required
> for drivers/HW that maintains HW gid index different than the
> host sgid_index.
> 
> Please review and merge
>
> Thanks,
> Selvin Xavier
> 
> v3 -> v4:
>  Addressed Jason's comments. Removed unnecessary validation and locking
>  as the reference to the GID table entry should be taken before invoking
>  the new symbol.
> 
> v2 -> v3:
>  Added a new symbol to retrieve the hw context.
> 
> v1 -> v2:
>  Addressed review comments from Parav
> 
> 
> Selvin Xavier (2):
>   RDMA/core: Add helper function to retrieve driver gid context from gid
>     attr
>   RDMA/bnxt_re: Use rdma_read_gid_hw_context to retrieve HW gid index

Applied to for-next, thanks

Jason

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

end of thread, other threads:[~2020-02-19 20:50 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-19 10:19 [PATCH for-next v4 0/2] Retrieve HW GID context from ib_gid_attr Selvin Xavier
2020-02-19 10:19 ` [PATCH for-next v4 1/2] RDMA/core: Add helper function to retrieve driver gid context from gid attr Selvin Xavier
2020-02-19 10:19 ` [PATCH for-next v4 2/2] RDMA/bnxt_re: Use rdma_read_gid_hw_context to retrieve HW gid index Selvin Xavier
2020-02-19 20:50 ` [PATCH for-next v4 0/2] Retrieve HW GID context from ib_gid_attr 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.