Commit a286ba73 authored by Jiri Pirko's avatar Jiri Pirko Committed by Jakub Kicinski

ice: reorder PF/representor devlink port register/unregister flows

Make sure that netdevice is registered/unregistered while devlink port
is registered.
Signed-off-by: default avatarJiri Pirko <jiri@nvidia.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent dfe60949
...@@ -2988,9 +2988,6 @@ int ice_vsi_release(struct ice_vsi *vsi) ...@@ -2988,9 +2988,6 @@ int ice_vsi_release(struct ice_vsi *vsi)
clear_bit(ICE_VSI_NETDEV_REGISTERED, vsi->state); clear_bit(ICE_VSI_NETDEV_REGISTERED, vsi->state);
} }
if (vsi->type == ICE_VSI_PF)
ice_devlink_destroy_pf_port(pf);
if (test_bit(ICE_FLAG_RSS_ENA, pf->flags)) if (test_bit(ICE_FLAG_RSS_ENA, pf->flags))
ice_rss_clean(vsi); ice_rss_clean(vsi);
...@@ -3048,6 +3045,9 @@ int ice_vsi_release(struct ice_vsi *vsi) ...@@ -3048,6 +3045,9 @@ int ice_vsi_release(struct ice_vsi *vsi)
} }
} }
if (vsi->type == ICE_VSI_PF)
ice_devlink_destroy_pf_port(pf);
if (vsi->type == ICE_VSI_VF && if (vsi->type == ICE_VSI_VF &&
vsi->agg_node && vsi->agg_node->valid) vsi->agg_node && vsi->agg_node->valid)
vsi->agg_node->num_vsis--; vsi->agg_node->num_vsis--;
......
...@@ -4599,6 +4599,10 @@ static int ice_register_netdev(struct ice_pf *pf) ...@@ -4599,6 +4599,10 @@ static int ice_register_netdev(struct ice_pf *pf)
if (!vsi || !vsi->netdev) if (!vsi || !vsi->netdev)
return -EIO; return -EIO;
err = ice_devlink_create_pf_port(pf);
if (err)
goto err_devlink_create;
err = register_netdev(vsi->netdev); err = register_netdev(vsi->netdev);
if (err) if (err)
goto err_register_netdev; goto err_register_netdev;
...@@ -4606,17 +4610,13 @@ static int ice_register_netdev(struct ice_pf *pf) ...@@ -4606,17 +4610,13 @@ static int ice_register_netdev(struct ice_pf *pf)
set_bit(ICE_VSI_NETDEV_REGISTERED, vsi->state); set_bit(ICE_VSI_NETDEV_REGISTERED, vsi->state);
netif_carrier_off(vsi->netdev); netif_carrier_off(vsi->netdev);
netif_tx_stop_all_queues(vsi->netdev); netif_tx_stop_all_queues(vsi->netdev);
err = ice_devlink_create_pf_port(pf);
if (err)
goto err_devlink_create;
devlink_port_type_eth_set(&pf->devlink_port, vsi->netdev); devlink_port_type_eth_set(&pf->devlink_port, vsi->netdev);
return 0; return 0;
err_devlink_create:
unregister_netdev(vsi->netdev);
clear_bit(ICE_VSI_NETDEV_REGISTERED, vsi->state);
err_register_netdev: err_register_netdev:
ice_devlink_destroy_pf_port(pf);
err_devlink_create:
free_netdev(vsi->netdev); free_netdev(vsi->netdev);
vsi->netdev = NULL; vsi->netdev = NULL;
clear_bit(ICE_VSI_NETDEV_ALLOCD, vsi->state); clear_bit(ICE_VSI_NETDEV_ALLOCD, vsi->state);
......
...@@ -377,10 +377,10 @@ static void ice_repr_rem(struct ice_vf *vf) ...@@ -377,10 +377,10 @@ static void ice_repr_rem(struct ice_vf *vf)
if (!vf->repr) if (!vf->repr)
return; return;
ice_devlink_destroy_vf_port(vf);
kfree(vf->repr->q_vector); kfree(vf->repr->q_vector);
vf->repr->q_vector = NULL; vf->repr->q_vector = NULL;
unregister_netdev(vf->repr->netdev); unregister_netdev(vf->repr->netdev);
ice_devlink_destroy_vf_port(vf);
free_netdev(vf->repr->netdev); free_netdev(vf->repr->netdev);
vf->repr->netdev = NULL; vf->repr->netdev = NULL;
#ifdef CONFIG_ICE_SWITCHDEV #ifdef CONFIG_ICE_SWITCHDEV
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment