[PATCH RFC] RDMA/core: Store zero GIDs in some cases

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Bernard Metzler <bmt@xxxxxxxxxxxxxx>

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@xxxxxxxxxxxxxx>
Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
---
 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),
 };
 
 /**





[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux