IB/mlx5: Implement callbacks for getting VFs GUID attributes
authorDanit Goldberg <danitg@mellanox.com>
Wed, 6 Nov 2019 13:18:12 +0000 (15:18 +0200)
committerLeon Romanovsky <leonro@mellanox.com>
Fri, 22 Nov 2019 16:17:24 +0000 (18:17 +0200)
Implement the IB defined callback mlx5_ib_get_vf_guid used to query FW
for VFs attributes and return node and port GUIDs.

Signed-off-by: Danit Goldberg <danitg@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
drivers/infiniband/hw/mlx5/ib_virt.c
drivers/infiniband/hw/mlx5/main.c
drivers/infiniband/hw/mlx5/mlx5_ib.h

index 649a3364f8380e802760878fb00d05e784a8ec4b..4f0edd4832bdffd4ba1e6fb14572c8c840bc44f4 100644 (file)
@@ -201,3 +201,27 @@ int mlx5_ib_set_vf_guid(struct ib_device *device, int vf, u8 port,
 
        return -EINVAL;
 }
+
+int mlx5_ib_get_vf_guid(struct ib_device *device, int vf, u8 port,
+                       struct ifla_vf_guid *node_guid,
+                       struct ifla_vf_guid *port_guid)
+{
+       struct mlx5_ib_dev *dev = to_mdev(device);
+       struct mlx5_core_dev *mdev = dev->mdev;
+       struct mlx5_hca_vport_context *rep;
+       int err;
+
+       rep = kzalloc(sizeof(*rep), GFP_KERNEL);
+       if (!rep)
+               return -ENOMEM;
+
+       err = mlx5_query_hca_vport_context(mdev, 1, 1, vf+1, rep);
+       if (err)
+               goto ex;
+
+       port_guid->guid = rep->port_guid;
+       node_guid->guid = rep->node_guid;
+ex:
+       kfree(rep);
+       return err;
+}
index 46ea4f0b9b51886f226b484b3a22319d4efa6b40..b0d7e2d2991e35c5eab80068040a005bb99b7d01 100644 (file)
@@ -6310,6 +6310,7 @@ static const struct ib_device_ops mlx5_ib_dev_ipoib_enhanced_ops = {
 
 static const struct ib_device_ops mlx5_ib_dev_sriov_ops = {
        .get_vf_config = mlx5_ib_get_vf_config,
+       .get_vf_guid = mlx5_ib_get_vf_guid,
        .get_vf_stats = mlx5_ib_get_vf_stats,
        .set_vf_guid = mlx5_ib_set_vf_guid,
        .set_vf_link_state = mlx5_ib_set_vf_link_state,
index 2ceaef3ea3fb92286d737d9264396df025bc5c76..96811f6ca15a0798288abd7ac3dd1754a579ae81 100644 (file)
@@ -1301,6 +1301,9 @@ int mlx5_ib_set_vf_link_state(struct ib_device *device, int vf,
                              u8 port, int state);
 int mlx5_ib_get_vf_stats(struct ib_device *device, int vf,
                         u8 port, struct ifla_vf_stats *stats);
+int mlx5_ib_get_vf_guid(struct ib_device *device, int vf, u8 port,
+                       struct ifla_vf_guid *node_guid,
+                       struct ifla_vf_guid *port_guid);
 int mlx5_ib_set_vf_guid(struct ib_device *device, int vf, u8 port,
                        u64 guid, int type);