ice: reorder PF/representor devlink port register/unregister flows
Make sure that netdevice is registered/unregistered while devlink port is registered. Signed-off-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
dfe6094914
commit
a286ba7387
3 changed files with 10 additions and 10 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
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)
|
||||||
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)
|
||||||
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
|
||||||
|
|
Loading…
Add table
Reference in a new issue