|
@@ -372,6 +372,25 @@ static int hns_roce_query_device(struct ib_device *ib_dev,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static struct net_device *hns_roce_get_netdev(struct ib_device *ib_dev,
|
|
|
+ u8 port_num)
|
|
|
+{
|
|
|
+ struct hns_roce_dev *hr_dev = to_hr_dev(ib_dev);
|
|
|
+ struct net_device *ndev;
|
|
|
+
|
|
|
+ if (port_num < 1 || port_num > hr_dev->caps.num_ports)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ rcu_read_lock();
|
|
|
+
|
|
|
+ ndev = hr_dev->iboe.netdevs[port_num - 1];
|
|
|
+ if (ndev)
|
|
|
+ dev_hold(ndev);
|
|
|
+
|
|
|
+ rcu_read_unlock();
|
|
|
+ return ndev;
|
|
|
+}
|
|
|
+
|
|
|
static int hns_roce_query_port(struct ib_device *ib_dev, u8 port_num,
|
|
|
struct ib_port_attr *props)
|
|
|
{
|
|
@@ -618,6 +637,7 @@ static int hns_roce_register_device(struct hns_roce_dev *hr_dev)
|
|
|
ib_dev->query_port = hns_roce_query_port;
|
|
|
ib_dev->modify_port = hns_roce_modify_port;
|
|
|
ib_dev->get_link_layer = hns_roce_get_link_layer;
|
|
|
+ ib_dev->get_netdev = hns_roce_get_netdev;
|
|
|
ib_dev->query_gid = hns_roce_query_gid;
|
|
|
ib_dev->query_pkey = hns_roce_query_pkey;
|
|
|
ib_dev->alloc_ucontext = hns_roce_alloc_ucontext;
|