net/mlx5: Query ADV_VIRTUALIZATION capabilities
authorYishai Hadas <yishaih@nvidia.com>
Mon, 5 Sep 2022 10:58:44 +0000 (13:58 +0300)
committerLeon Romanovsky <leon@kernel.org>
Wed, 7 Sep 2022 08:57:27 +0000 (11:57 +0300)
Query ADV_VIRTUALIZATION capabilities which provide information for
advanced virtualization related features.

Current capabilities refer to the page tracker object which is used for
tracking the pages that are dirtied by the device.

Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
Link: https://lore.kernel.org/r/20220905105852.26398-3-yishaih@nvidia.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/fw.c
drivers/net/ethernet/mellanox/mlx5/core/main.c
include/linux/mlx5/device.h

index 079fa44ada71ee5b13b4004f292b863569ed17f0..483a51870505c5daeea2af1614498b43db8e706f 100644 (file)
@@ -273,6 +273,12 @@ int mlx5_query_hca_caps(struct mlx5_core_dev *dev)
                        return err;
        }
 
+       if (MLX5_CAP_GEN(dev, adv_virtualization)) {
+               err = mlx5_core_get_caps(dev, MLX5_CAP_ADV_VIRTUALIZATION);
+               if (err)
+                       return err;
+       }
+
        return 0;
 }
 
index c085b031abfc157cba1db0974a9cd92564d3f121..de9c315a85fc22609b268f49a070335929c731ee 100644 (file)
@@ -1488,6 +1488,7 @@ static const int types[] = {
        MLX5_CAP_IPSEC,
        MLX5_CAP_PORT_SELECTION,
        MLX5_CAP_DEV_SHAMPO,
+       MLX5_CAP_ADV_VIRTUALIZATION,
 };
 
 static void mlx5_hca_caps_free(struct mlx5_core_dev *dev)
index b5f58fd37a0f75905a86a6253861e1bd05bfb9e7..5b41b9fb3d4875d3a6aa5178b27b13af8bdc3334 100644 (file)
@@ -1200,6 +1200,7 @@ enum mlx5_cap_type {
        MLX5_CAP_DEV_SHAMPO = 0x1d,
        MLX5_CAP_GENERAL_2 = 0x20,
        MLX5_CAP_PORT_SELECTION = 0x25,
+       MLX5_CAP_ADV_VIRTUALIZATION = 0x26,
        /* NUM OF CAP Types */
        MLX5_CAP_NUM
 };
@@ -1365,6 +1366,14 @@ enum mlx5_qcam_feature_groups {
        MLX5_GET(port_selection_cap, \
                 mdev->caps.hca[MLX5_CAP_PORT_SELECTION]->max, cap)
 
+#define MLX5_CAP_ADV_VIRTUALIZATION(mdev, cap) \
+       MLX5_GET(adv_virtualization_cap, \
+                mdev->caps.hca[MLX5_CAP_ADV_VIRTUALIZATION]->cur, cap)
+
+#define MLX5_CAP_ADV_VIRTUALIZATION_MAX(mdev, cap) \
+       MLX5_GET(adv_virtualization_cap, \
+                mdev->caps.hca[MLX5_CAP_ADV_VIRTUALIZATION]->max, cap)
+
 #define MLX5_CAP_FLOWTABLE_PORT_SELECTION(mdev, cap) \
        MLX5_CAP_PORT_SELECTION(mdev, flow_table_properties_port_selection.cap)