RDMA/core: Set gid_attr.ndev for iWARP devices
authorChuck Lever <chuck.lever@oracle.com>
Mon, 17 Jul 2023 15:12:19 +0000 (11:12 -0400)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 21 Jul 2023 19:00:18 +0000 (16:00 -0300)
Have the iwarp side properly set the ndev in the device's sgid_attrs
so that address resolution can treat it more like a RoCE device.

Link: https://lore.kernel.org/r/168960673933.3007.8043081822081877578.stgit@manet.1015granger.net
Suggested-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Tom Talpey <tom@talpey.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/core/cache.c

index 2e91d88..33f9d02 100644 (file)
@@ -1457,6 +1457,17 @@ static int config_non_roce_gid_cache(struct ib_device *device,
                                 i);
                        goto err;
                }
+
+               if (rdma_protocol_iwarp(device, port)) {
+                       struct net_device *ndev;
+
+                       ndev = ib_device_get_netdev(device, port);
+                       if (!ndev)
+                               continue;
+                       RCU_INIT_POINTER(gid_attr.ndev, ndev);
+                       dev_put(ndev);
+               }
+
                gid_attr.index = i;
                tprops->subnet_prefix =
                        be64_to_cpu(gid_attr.gid.global.subnet_prefix);