Skip to content

Commit

Permalink
net/mlx5e: NIC netdev init flow cleanup
Browse files Browse the repository at this point in the history
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: 6f08a22 ("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>
  • Loading branch information
Saeed Mahameed committed Aug 7, 2017
1 parent 706b358 commit 07c9f1e
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 16 deletions.
22 changes: 6 additions & 16 deletions drivers/net/ethernet/mellanox/mlx5/core/en_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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;
}
Expand Down
13 changes: 13 additions & 0 deletions drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
1 change: 1 addition & 0 deletions drivers/net/ethernet/mellanox/mlx5/core/en_rep.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 07c9f1e

Please sign in to comment.