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

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

 




> 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.

>> 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






[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux