net/mlx5_core: Refactor device capability function
authorLeon Romanovsky <leonro@mellanox.com>
Tue, 23 Feb 2016 08:25:22 +0000 (10:25 +0200)
committerDoug Ledford <dledford@redhat.com>
Mon, 21 Mar 2016 20:29:07 +0000 (16:29 -0400)
Device capability function was called similar in all places.
It was called twice for every queried parameter, while the
difference between calls was in HCA capability mode only.

The change proposed unify these calls into one function.

Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Reviewed-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/net/ethernet/mellanox/mlx5/core/fw.c
drivers/net/ethernet/mellanox/mlx5/core/main.c
include/linux/mlx5/driver.h

index aa1ab47023852dcf0b163e43e57629121ab71a3a..fe6dfd8697f4457bf6410a53d97ea0aced18db66 100644 (file)
@@ -98,88 +98,49 @@ int mlx5_query_hca_caps(struct mlx5_core_dev *dev)
 {
        int err;
 
-       err = mlx5_core_get_caps(dev, MLX5_CAP_GENERAL, HCA_CAP_OPMOD_GET_CUR);
-       if (err)
-               return err;
-
-       err = mlx5_core_get_caps(dev, MLX5_CAP_GENERAL, HCA_CAP_OPMOD_GET_MAX);
+       err = mlx5_core_get_caps(dev, MLX5_CAP_GENERAL);
        if (err)
                return err;
 
        if (MLX5_CAP_GEN(dev, eth_net_offloads)) {
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ETHERNET_OFFLOADS,
-                                        HCA_CAP_OPMOD_GET_CUR);
-               if (err)
-                       return err;
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ETHERNET_OFFLOADS,
-                                        HCA_CAP_OPMOD_GET_MAX);
+               err = mlx5_core_get_caps(dev, MLX5_CAP_ETHERNET_OFFLOADS);
                if (err)
                        return err;
        }
 
        if (MLX5_CAP_GEN(dev, pg)) {
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ODP,
-                                        HCA_CAP_OPMOD_GET_CUR);
-               if (err)
-                       return err;
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ODP,
-                                        HCA_CAP_OPMOD_GET_MAX);
+               err = mlx5_core_get_caps(dev, MLX5_CAP_ODP);
                if (err)
                        return err;
        }
 
        if (MLX5_CAP_GEN(dev, atomic)) {
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ATOMIC,
-                                        HCA_CAP_OPMOD_GET_CUR);
-               if (err)
-                       return err;
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ATOMIC,
-                                        HCA_CAP_OPMOD_GET_MAX);
+               err = mlx5_core_get_caps(dev, MLX5_CAP_ATOMIC);
                if (err)
                        return err;
        }
 
        if (MLX5_CAP_GEN(dev, roce)) {
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ROCE,
-                                        HCA_CAP_OPMOD_GET_CUR);
-               if (err)
-                       return err;
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ROCE,
-                                        HCA_CAP_OPMOD_GET_MAX);
+               err = mlx5_core_get_caps(dev, MLX5_CAP_ROCE);
                if (err)
                        return err;
        }
 
        if (MLX5_CAP_GEN(dev, nic_flow_table)) {
-               err = mlx5_core_get_caps(dev, MLX5_CAP_FLOW_TABLE,
-                                        HCA_CAP_OPMOD_GET_CUR);
-               if (err)
-                       return err;
-               err = mlx5_core_get_caps(dev, MLX5_CAP_FLOW_TABLE,
-                                        HCA_CAP_OPMOD_GET_MAX);
+               err = mlx5_core_get_caps(dev, MLX5_CAP_FLOW_TABLE);
                if (err)
                        return err;
        }
 
        if (MLX5_CAP_GEN(dev, vport_group_manager) &&
            MLX5_CAP_GEN(dev, eswitch_flow_table)) {
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ESWITCH_FLOW_TABLE,
-                                        HCA_CAP_OPMOD_GET_CUR);
-               if (err)
-                       return err;
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ESWITCH_FLOW_TABLE,
-                                        HCA_CAP_OPMOD_GET_MAX);
+               err = mlx5_core_get_caps(dev, MLX5_CAP_ESWITCH_FLOW_TABLE);
                if (err)
                        return err;
        }
 
        if (MLX5_CAP_GEN(dev, eswitch_flow_table)) {
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ESWITCH,
-                                        HCA_CAP_OPMOD_GET_CUR);
-               if (err)
-                       return err;
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ESWITCH,
-                                        HCA_CAP_OPMOD_GET_MAX);
+               err = mlx5_core_get_caps(dev, MLX5_CAP_ESWITCH);
                if (err)
                        return err;
        }
index 1d43855d9f32a50216c8734dbc84dcf5aa109157..f2354bc0ec19cbef3ce737d4ec810e30c6a4b3c7 100644 (file)
@@ -341,8 +341,9 @@ static u16 to_fw_pkey_sz(u32 size)
        }
 }
 
-int mlx5_core_get_caps(struct mlx5_core_dev *dev, enum mlx5_cap_type cap_type,
-                      enum mlx5_cap_mode cap_mode)
+static int mlx5_core_get_caps_mode(struct mlx5_core_dev *dev,
+                                  enum mlx5_cap_type cap_type,
+                                  enum mlx5_cap_mode cap_mode)
 {
        u8 in[MLX5_ST_SZ_BYTES(query_hca_cap_in)];
        int out_sz = MLX5_ST_SZ_BYTES(query_hca_cap_out);
@@ -392,6 +393,16 @@ query_ex:
        return err;
 }
 
+int mlx5_core_get_caps(struct mlx5_core_dev *dev, enum mlx5_cap_type cap_type)
+{
+       int ret;
+
+       ret = mlx5_core_get_caps_mode(dev, cap_type, HCA_CAP_OPMOD_GET_CUR);
+       if (ret)
+               return ret;
+       return mlx5_core_get_caps_mode(dev, cap_type, HCA_CAP_OPMOD_GET_MAX);
+}
+
 static int set_caps(struct mlx5_core_dev *dev, void *in, int in_sz, int opmod)
 {
        u32 out[MLX5_ST_SZ_DW(set_hca_cap_out)];
@@ -419,12 +430,7 @@ static int handle_hca_cap_atomic(struct mlx5_core_dev *dev)
        int err;
 
        if (MLX5_CAP_GEN(dev, atomic)) {
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ATOMIC,
-                                        HCA_CAP_OPMOD_GET_CUR);
-               if (err)
-                       return err;
-               err = mlx5_core_get_caps(dev, MLX5_CAP_ATOMIC,
-                                        HCA_CAP_OPMOD_GET_MAX);
+               err = mlx5_core_get_caps(dev, MLX5_CAP_ATOMIC);
                if (err)
                        return err;
        } else {
@@ -466,11 +472,7 @@ static int handle_hca_cap(struct mlx5_core_dev *dev)
        if (!set_ctx)
                goto query_ex;
 
-       err = mlx5_core_get_caps(dev, MLX5_CAP_GENERAL, HCA_CAP_OPMOD_GET_MAX);
-       if (err)
-               goto query_ex;
-
-       err = mlx5_core_get_caps(dev, MLX5_CAP_GENERAL, HCA_CAP_OPMOD_GET_CUR);
+       err = mlx5_core_get_caps(dev, MLX5_CAP_GENERAL);
        if (err)
                goto query_ex;
 
index 9108904a6a567c3472a56264a509b2059011e2ed..406b27ec1d421ef20af8346f8ce80170401f0f3e 100644 (file)
@@ -706,8 +706,7 @@ void mlx5_cmd_use_events(struct mlx5_core_dev *dev);
 void mlx5_cmd_use_polling(struct mlx5_core_dev *dev);
 int mlx5_cmd_status_to_err(struct mlx5_outbox_hdr *hdr);
 int mlx5_cmd_status_to_err_v2(void *ptr);
-int mlx5_core_get_caps(struct mlx5_core_dev *dev, enum mlx5_cap_type cap_type,
-                      enum mlx5_cap_mode cap_mode);
+int mlx5_core_get_caps(struct mlx5_core_dev *dev, enum mlx5_cap_type cap_type);
 int mlx5_cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,
                  int out_size);
 int mlx5_cmd_exec_cb(struct mlx5_core_dev *dev, void *in, int in_size,