> -----Original Message----- > From: Chuck Lever III <chuck.lever@xxxxxxxxxx> > Sent: Thursday, 27 April 2023 19:48 > To: Bernard Metzler <BMT@xxxxxxxxxxxxxx> > Cc: Chuck Lever <cel@xxxxxxxxxx>; linux-rdma@xxxxxxxxxxxxxxx; Linux NFS > Mailing List <linux-nfs@xxxxxxxxxxxxxxx> > Subject: [EXTERNAL] Re: [PATCH RFC] RDMA/core: Store zero GIDs in some > cases > > > > > On Apr 27, 2023, at 1:46 PM, Bernard Metzler <BMT@xxxxxxxxxxxxxx> wrote: > > > > > > > >> -----Original Message----- > >> From: Chuck Lever <cel@xxxxxxxxxx> > >> Sent: Thursday, 27 April 2023 19:15 > >> To: Bernard Metzler <BMT@xxxxxxxxxxxxxx> > >> Cc: linux-rdma@xxxxxxxxxxxxxxx; linux-nfs@xxxxxxxxxxxxxxx > >> Subject: [EXTERNAL] [PATCH RFC] RDMA/core: Store zero GIDs in some cases > >> > >> 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; > >> > > That overwrites the first assignment. Probably better > > '|= IW_F_STORE_0GID;' ? Or put them on one line... > > D'oh! Will fix. Otherwise looks good of course. Could you please check if that does not break 'normal' Ethernet behavior? I am off from any kernel test infrastructure for the next four (!!) weeks unfortunately. Sorry about that. Thanks for the patch! Bernard. > > >> 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), > >> }; > >> > >> /** > > > -- > Chuck Lever >