Re: [PATCH v3 2/4] RDMA/core: Set gid_attr.ndev for iWARP devices

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

 



On 6/14/2023 10:00 AM, Chuck Lever wrote:
From: Chuck Lever <chuck.lever@xxxxxxxxxx>

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.

Suggested-by: Jason Gunthorpe <jgg@xxxxxxxxxx>
Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
---
  drivers/infiniband/core/cache.c |   12 ++++++++++++
  1 file changed, 12 insertions(+)

diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
index 2e91d8879326..717524fe8a39 100644
--- a/drivers/infiniband/core/cache.c
+++ b/drivers/infiniband/core/cache.c
@@ -1439,6 +1439,7 @@ static int config_non_roce_gid_cache(struct ib_device *device,
  {
  	struct ib_gid_attr gid_attr = {};
  	struct ib_gid_table *table;
+	struct net_device *ndev;
  	int ret = 0;
  	int i;
@@ -1457,10 +1458,21 @@ static int config_non_roce_gid_cache(struct ib_device *device,
  				 i);
  			goto err;
  		}
+
+		ndev = NULL;
+		if (rdma_protocol_iwarp(device, port)) {
+			ndev = ib_device_get_netdev(device, port);
+			if (!ndev)
+				continue;
+			RCU_INIT_POINTER(gid_attr.ndev, ndev);
+		}
+
  		gid_attr.index = i;
  		tprops->subnet_prefix =
  			be64_to_cpu(gid_attr.gid.global.subnet_prefix);
  		add_modify_gid(table, &gid_attr);
+
+		dev_put(ndev);

I'm not sure about two things here...

1) is it correct to dev_put(ndev) when returning? It seems that this
may risk the device may vanish when it's still present in the cache.
Feel free to tell me I'm confused.

2) Assuming yes, shouldn't the dev_put(ndev) move to within the new
if(iwarp) block just above?

Tom.

  	}
  err:
  	mutex_unlock(&table->lock);






[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