net/mlx5: Skip pages EQ creation for non-page supplier function
authorJianbo Liu <jianbol@nvidia.com>
Tue, 2 Apr 2024 13:30:42 +0000 (16:30 +0300)
committerJakub Kicinski <kuba@kernel.org>
Thu, 4 Apr 2024 02:47:59 +0000 (19:47 -0700)
Page events are not issued by device on the function if
page_request_disable is set, so no need to create pages EQ.

Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
Reviewed-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Link: https://lore.kernel.org/r/20240402133043.56322-11-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/eq.c
include/linux/mlx5/mlx5_ifc.h

index 40a6cb052a2da3f4c0e272202b3bd1466053a5ad..5693986ae65628ee00e190a9d40e5b7a0e519399 100644 (file)
@@ -688,6 +688,12 @@ static int create_async_eqs(struct mlx5_core_dev *dev)
        if (err)
                goto err2;
 
+       /* Skip page eq creation when the device does not request for page requests */
+       if (MLX5_CAP_GEN(dev, page_request_disable)) {
+               mlx5_core_dbg(dev, "Skip page EQ creation\n");
+               return 0;
+       }
+
        param = (struct mlx5_eq_param) {
                .irq = table->ctrl_irq,
                .nent = /* TODO: sriov max_vf + */ 1,
@@ -716,7 +722,8 @@ static void destroy_async_eqs(struct mlx5_core_dev *dev)
 {
        struct mlx5_eq_table *table = dev->priv.eq_table;
 
-       cleanup_async_eq(dev, &table->pages_eq, "pages");
+       if (!MLX5_CAP_GEN(dev, page_request_disable))
+               cleanup_async_eq(dev, &table->pages_eq, "pages");
        cleanup_async_eq(dev, &table->async_eq, "async");
        mlx5_cmd_allowed_opcode(dev, MLX5_CMD_OP_DESTROY_EQ);
        mlx5_cmd_use_polling(dev);
index 40f6fa138e275217a829cb7951574d6e113622bb..cc159d8563d19ba9116a2127472597e2dbfbf554 100644 (file)
@@ -1485,7 +1485,9 @@ enum {
 };
 
 struct mlx5_ifc_cmd_hca_cap_bits {
-       u8         reserved_at_0[0x10];
+       u8         reserved_at_0[0x6];
+       u8         page_request_disable[0x1];
+       u8         reserved_at_7[0x9];
        u8         shared_object_to_user_object_allowed[0x1];
        u8         reserved_at_13[0xe];
        u8         vhca_resource_manager[0x1];