Linux NFS development
 help / color / mirror / Atom feed
* [PATCH RFC] RDMA/core: Store zero GIDs in some cases
@ 2023-04-27 17:14 Chuck Lever
  2023-04-27 17:46 ` Bernard Metzler
  2023-04-28 13:39 ` Jason Gunthorpe
  0 siblings, 2 replies; 10+ messages in thread
From: Chuck Lever @ 2023-04-27 17:14 UTC (permalink / raw)
  To: BMT; +Cc: linux-rdma, linux-nfs

From: Bernard Metzler <bmt@zurich.ibm.com>

Tunnel devices have zero GIDs, so skip the zero GID check when
setting up soft iWARP over a tunnel device.

Suggested-by: Bernard Metzler <bmt@zurich.ibm.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 drivers/infiniband/core/cache.c      |    4 +++-
 drivers/infiniband/sw/siw/siw_main.c |    1 +
 include/rdma/iw_cm.h                 |    9 ++++++++-
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
index 2e91d8879326..2493ca4f2739 100644
--- a/drivers/infiniband/core/cache.c
+++ b/drivers/infiniband/core/cache.c
@@ -41,6 +41,7 @@
 #include <net/addrconf.h>
 
 #include <rdma/ib_cache.h>
+#include <rdma/iw_cm.h>
 
 #include "core_priv.h"
 
@@ -441,7 +442,8 @@ static int add_modify_gid(struct ib_gid_table *table,
 	 * leave other unused entries as the zero GID. Convert zero GIDs to
 	 * empty table entries instead of storing them.
 	 */
-	if (rdma_is_zero_gid(&attr->gid))
+	if (rdma_is_zero_gid(&attr->gid) &&
+	   !(attr->device->iw_driver_flags & IW_F_STORE_0GID))
 		return 0;
 
 	entry = alloc_gid_entry(attr);
diff --git a/drivers/infiniband/sw/siw/siw_main.c b/drivers/infiniband/sw/siw/siw_main.c
index dacc174604bf..842a039fa457 100644
--- a/drivers/infiniband/sw/siw/siw_main.c
+++ b/drivers/infiniband/sw/siw/siw_main.c
@@ -359,6 +359,7 @@ static struct siw_device *siw_device_create(struct net_device *netdev)
 
 	/* Disable TCP port mapping */
 	base_dev->iw_driver_flags = IW_F_NO_PORT_MAP;
+	base_dev->iw_driver_flags = IW_F_STORE_0GID;
 
 	sdev->attrs.max_qp = SIW_MAX_QP;
 	sdev->attrs.max_qp_wr = SIW_MAX_QP_WR;
diff --git a/include/rdma/iw_cm.h b/include/rdma/iw_cm.h
index 03abd30e6c8c..c48f2cbe37b5 100644
--- a/include/rdma/iw_cm.h
+++ b/include/rdma/iw_cm.h
@@ -90,7 +90,14 @@ enum iw_flags {
 	 * reserve the port.  This is required for soft iwarp
 	 * to play in the port mapped iwarp space.
 	 */
-	IW_F_NO_PORT_MAP = (1 << 0),
+	IW_F_NO_PORT_MAP = BIT(0),
+
+	/*
+	 * This flag allows the insertion of zero GIDs into the
+	 * stored GID table. That is needed to enable soft iWARP
+	 * on tunnel devices.
+	 */
+	IW_F_STORE_0GID = BIT(1),
 };
 
 /**



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

end of thread, other threads:[~2023-05-03  8:40 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-27 17:14 [PATCH RFC] RDMA/core: Store zero GIDs in some cases Chuck Lever
2023-04-27 17:46 ` Bernard Metzler
2023-04-27 17:48   ` Chuck Lever III
2023-04-28  6:44     ` Bernard Metzler
2023-04-28 13:39 ` Jason Gunthorpe
2023-04-28 13:42   ` Chuck Lever III
2023-04-28 13:47     ` Jason Gunthorpe
2023-04-28 13:58       ` Chuck Lever III
2023-04-28 14:03         ` Jason Gunthorpe
2023-05-03  8:35           ` Bernard Metzler

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