net/mlx5e: NIC netdev init flow cleanup
authorSaeed Mahameed <saeedm@mellanox.com>
Tue, 6 Jun 2017 06:12:04 +0000 (09:12 +0300)
committerSaeed Mahameed <saeedm@mellanox.com>
Mon, 7 Aug 2017 07:47:06 +0000 (10:47 +0300)
Remove redundant call to unregister vport representor in mlx5e_add error
flow.

Hide the representor priv and eswitch internal structures from en_main.c
as preparation step for downstream patches which would allow building
the driver without support for  representors and eswitch.

Fixes: 6f08a22c5fb2 ("net/mlx5e: Register/unregister vport representors on interface attach/detach")
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Reviewed-by: Or Gerlitz <ogerlitz@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
drivers/net/ethernet/mellanox/mlx5/core/en_rep.h

index c2986777a1d81e21592cfe2ad160143afef1d156..b44d6f677845be6ad7e1069a97bebd707273bf28 100644 (file)
@@ -4428,32 +4428,27 @@ static void mlx5e_detach(struct mlx5_core_dev *mdev, void *vpriv)
 
 static void *mlx5e_add(struct mlx5_core_dev *mdev)
 {
-       struct mlx5_eswitch *esw = mdev->priv.eswitch;
-       int total_vfs = MLX5_TOTAL_VPORTS(mdev);
-       struct mlx5e_rep_priv *rpriv = NULL;
+       struct net_device *netdev;
+       void *rpriv = NULL;
        void *priv;
-       int vport;
        int err;
-       struct net_device *netdev;
 
        err = mlx5e_check_required_hca_cap(mdev);
        if (err)
                return NULL;
 
        if (MLX5_CAP_GEN(mdev, vport_group_manager)) {
-               rpriv = kzalloc(sizeof(*rpriv), GFP_KERNEL);
+               rpriv = mlx5e_alloc_nic_rep_priv(mdev);
                if (!rpriv) {
-                       mlx5_core_warn(mdev,
-                                      "Not creating net device, Failed to alloc rep priv data\n");
+                       mlx5_core_warn(mdev, "Failed to alloc NIC rep priv data\n");
                        return NULL;
                }
-               rpriv->rep = &esw->offloads.vport_reps[0];
        }
 
        netdev = mlx5e_create_netdev(mdev, &mlx5e_nic_profile, rpriv);
        if (!netdev) {
                mlx5_core_err(mdev, "mlx5e_create_netdev failed\n");
-               goto err_unregister_reps;
+               goto err_free_rpriv;
        }
 
        priv = netdev_priv(netdev);
@@ -4474,14 +4469,9 @@ static void *mlx5e_add(struct mlx5_core_dev *mdev)
 
 err_detach:
        mlx5e_detach(mdev, priv);
-
 err_destroy_netdev:
        mlx5e_destroy_netdev(priv);
-
-err_unregister_reps:
-       for (vport = 1; vport < total_vfs; vport++)
-               mlx5_eswitch_unregister_vport_rep(esw, vport);
-
+err_free_rpriv:
        kfree(rpriv);
        return NULL;
 }
index 45e60be9c277660ab87acc39dda4036403c595e3..a0dd0e7e5b5788f20f49d02d1792e73f6c18437b 100644 (file)
@@ -1099,3 +1099,16 @@ void mlx5e_unregister_vport_reps(struct mlx5e_priv *priv)
        mlx5e_rep_unregister_vf_vports(priv); /* VFs vports */
        mlx5_eswitch_unregister_vport_rep(esw, 0); /* UPLINK PF*/
 }
+
+void *mlx5e_alloc_nic_rep_priv(struct mlx5_core_dev *mdev)
+{
+       struct mlx5_eswitch *esw = mdev->priv.eswitch;
+       struct mlx5e_rep_priv *rpriv;
+
+       rpriv = kzalloc(sizeof(*rpriv), GFP_KERNEL);
+       if (!rpriv)
+               return NULL;
+
+       rpriv->rep = &esw->offloads.vport_reps[0];
+       return rpriv;
+}
index a0a1a7a1d6c0e835fbe284bb50a15047d33b961e..23e43bbf928de4b720e29d0499893a1b477fff4b 100644 (file)
@@ -123,6 +123,7 @@ struct mlx5e_encap_entry {
        int encap_size;
 };
 
+void *mlx5e_alloc_nic_rep_priv(struct mlx5_core_dev *mdev);
 void mlx5e_register_vport_reps(struct mlx5e_priv *priv);
 void mlx5e_unregister_vport_reps(struct mlx5e_priv *priv);
 bool mlx5e_is_uplink_rep(struct mlx5e_priv *priv);