Commit 9257f692 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'devlink-fix-order-of-port-and-netdev-register-in-drivers'

Jiri Pirko says:

====================
devlink: fix order of port and netdev register in drivers

Some of the drivers use wrong order in registering devlink port and
netdev, registering netdev first. That was not intended as the devlink
port is some sort of parent for the netdev. Fix the ordering.

Note that the follow-up patchset is going to make this ordering
mandatory.
====================

Link: https://lore.kernel.org/r/20220926110938.2800005-1-jiri@resnulli.us


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 73dfe93e 1fd7c082
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1829,8 +1829,8 @@ static void fun_destroy_netdev(struct net_device *netdev)

	fp = netdev_priv(netdev);
	devlink_port_type_clear(&fp->dl_port);
	devlink_port_unregister(&fp->dl_port);
	unregister_netdev(netdev);
	devlink_port_unregister(&fp->dl_port);
	fun_ktls_cleanup(fp);
	fun_free_stats_area(fp);
	fun_free_rss(fp);
+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
+8 −8
Original line number Diff line number Diff line
@@ -320,16 +320,16 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
			dev_err(dev, "Cannot enable existing VFs: %d\n", err);
	}

	err = ionic_lif_register(ionic->lif);
	err = ionic_devlink_register(ionic);
	if (err) {
		dev_err(dev, "Cannot register LIF: %d, aborting\n", err);
		dev_err(dev, "Cannot register devlink: %d\n", err);
		goto err_out_deinit_lifs;
	}

	err = ionic_devlink_register(ionic);
	err = ionic_lif_register(ionic->lif);
	if (err) {
		dev_err(dev, "Cannot register devlink: %d\n", err);
		goto err_out_deregister_lifs;
		dev_err(dev, "Cannot register LIF: %d, aborting\n", err);
		goto err_out_deregister_devlink;
	}

	mod_timer(&ionic->watchdog_timer,
@@ -337,8 +337,8 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

	return 0;

err_out_deregister_lifs:
	ionic_lif_unregister(ionic->lif);
err_out_deregister_devlink:
	ionic_devlink_unregister(ionic);
err_out_deinit_lifs:
	ionic_vf_dealloc(ionic);
	ionic_lif_deinit(ionic->lif);
@@ -380,8 +380,8 @@ static void ionic_remove(struct pci_dev *pdev)
	del_timer_sync(&ionic->watchdog_timer);

	if (ionic->lif) {
		ionic_devlink_unregister(ionic);
		ionic_lif_unregister(ionic->lif);
		ionic_devlink_unregister(ionic);
		ionic_lif_deinit(ionic->lif);
		ionic_lif_free(ionic->lif);
		ionic->lif = NULL;