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

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
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -2988,9 +2988,6 @@ int ice_vsi_release(struct ice_vsi *vsi)
		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))
		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 &&
	    vsi->agg_node && vsi->agg_node->valid)
		vsi->agg_node->num_vsis--;
+6 −6
Original line number Diff line number Diff line
@@ -4599,6 +4599,10 @@ static int ice_register_netdev(struct ice_pf *pf)
	if (!vsi || !vsi->netdev)
		return -EIO;

	err = ice_devlink_create_pf_port(pf);
	if (err)
		goto err_devlink_create;

	err = register_netdev(vsi->netdev);
	if (err)
		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);
	netif_carrier_off(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);

	return 0;
err_devlink_create:
	unregister_netdev(vsi->netdev);
	clear_bit(ICE_VSI_NETDEV_REGISTERED, vsi->state);
err_register_netdev:
	ice_devlink_destroy_pf_port(pf);
err_devlink_create:
	free_netdev(vsi->netdev);
	vsi->netdev = NULL;
	clear_bit(ICE_VSI_NETDEV_ALLOCD, vsi->state);
+1 −1
Original line number Diff line number Diff line
@@ -377,10 +377,10 @@ static void ice_repr_rem(struct ice_vf *vf)
	if (!vf->repr)
		return;

	ice_devlink_destroy_vf_port(vf);
	kfree(vf->repr->q_vector);
	vf->repr->q_vector = NULL;
	unregister_netdev(vf->repr->netdev);
	ice_devlink_destroy_vf_port(vf);
	free_netdev(vf->repr->netdev);
	vf->repr->netdev = NULL;
#ifdef CONFIG_ICE_SWITCHDEV