net/mlx5: FPGA and IPSec initialization to be before flow steering
authorMatan Barak <matanb@mellanox.com>
Sun, 19 Nov 2017 15:51:13 +0000 (15:51 +0000)
committerSaeed Mahameed <saeedm@mellanox.com>
Wed, 7 Mar 2018 06:06:10 +0000 (22:06 -0800)
Some flow steering namespace initialization (i.e. egress namespace)
might depend on FPGA capabilities. Changing the initialization order
such that the FPGA will be initialized before flow steering.

Flow steering fs cmds initialization might depend on
IPSec capabilities. Changing the initialization order such
that the IPSec will be initialized before flow steering as well.

Signed-off-by: Aviad Yehezkel <aviadye@mellanox.com>
Signed-off-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/main.c

index 8cc22bf80c87cfff42c64795e820b6f498dab171..03972eed02cd12cfb3101801c4edc2036f245348 100644 (file)
@@ -1173,6 +1173,18 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv,
                goto err_affinity_hints;
        }
 
+       err = mlx5_fpga_device_start(dev);
+       if (err) {
+               dev_err(&pdev->dev, "fpga device start failed %d\n", err);
+               goto err_fpga_start;
+       }
+
+       err = mlx5_accel_ipsec_init(dev);
+       if (err) {
+               dev_err(&pdev->dev, "IPSec device start failed %d\n", err);
+               goto err_ipsec_start;
+       }
+
        err = mlx5_init_fs(dev);
        if (err) {
                dev_err(&pdev->dev, "Failed to init flow steering\n");
@@ -1191,17 +1203,6 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv,
                goto err_sriov;
        }
 
-       err = mlx5_fpga_device_start(dev);
-       if (err) {
-               dev_err(&pdev->dev, "fpga device start failed %d\n", err);
-               goto err_fpga_start;
-       }
-       err = mlx5_accel_ipsec_init(dev);
-       if (err) {
-               dev_err(&pdev->dev, "IPSec device start failed %d\n", err);
-               goto err_ipsec_start;
-       }
-
        if (mlx5_device_registered(dev)) {
                mlx5_attach_device(dev);
        } else {
@@ -1219,17 +1220,18 @@ out:
        return 0;
 
 err_reg_dev:
-       mlx5_accel_ipsec_cleanup(dev);
-err_ipsec_start:
-       mlx5_fpga_device_stop(dev);
-
-err_fpga_start:
        mlx5_sriov_detach(dev);
 
 err_sriov:
        mlx5_cleanup_fs(dev);
 
 err_fs:
+       mlx5_accel_ipsec_cleanup(dev);
+
+err_ipsec_start:
+       mlx5_fpga_device_stop(dev);
+
+err_fpga_start:
        mlx5_irq_clear_affinity_hints(dev);
 
 err_affinity_hints:
@@ -1296,11 +1298,10 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv,
        if (mlx5_device_registered(dev))
                mlx5_detach_device(dev);
 
-       mlx5_accel_ipsec_cleanup(dev);
-       mlx5_fpga_device_stop(dev);
-
        mlx5_sriov_detach(dev);
        mlx5_cleanup_fs(dev);
+       mlx5_accel_ipsec_cleanup(dev);
+       mlx5_fpga_device_stop(dev);
        mlx5_irq_clear_affinity_hints(dev);
        free_comp_eqs(dev);
        mlx5_stop_eqs(dev);