Commit 118c6bde authored by Michal Swiatkowski's avatar Michal Swiatkowski Committed by Tony Nguyen
Browse files

ice: hold devlink lock for whole init/cleanup



Simplify devlink lock code in driver by taking it for whole init/cleanup
path. Instead of calling devlink functions that taking lock call the
lockless versions.

Suggested-by: default avatarJiri Pirko <jiri@resnulli.us>
Reviewed-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
Reviewed-by: default avatarWojciech Drewek <wojciech.drewek@intel.com>
Signed-off-by: default avatarMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 4ebc5f25
Loading
Loading
Loading
Loading
+16 −16
Original line number Diff line number Diff line
@@ -1287,7 +1287,7 @@ void ice_devlink_register(struct ice_pf *pf)
{
	struct devlink *devlink = priv_to_devlink(pf);

	devlink_register(devlink);
	devl_register(devlink);
}

/**
@@ -1298,20 +1298,20 @@ void ice_devlink_register(struct ice_pf *pf)
 */
void ice_devlink_unregister(struct ice_pf *pf)
{
	devlink_unregister(priv_to_devlink(pf));
	devl_unregister(priv_to_devlink(pf));
}

int ice_devlink_register_params(struct ice_pf *pf)
{
	struct devlink *devlink = priv_to_devlink(pf);

	return devlink_params_register(devlink, ice_devlink_params,
	return devl_params_register(devlink, ice_devlink_params,
				    ARRAY_SIZE(ice_devlink_params));
}

void ice_devlink_unregister_params(struct ice_pf *pf)
{
	devlink_params_unregister(priv_to_devlink(pf), ice_devlink_params,
	devl_params_unregister(priv_to_devlink(pf), ice_devlink_params,
			       ARRAY_SIZE(ice_devlink_params));
}

@@ -1553,7 +1553,7 @@ void ice_devlink_init_regions(struct ice_pf *pf)
	u64 nvm_size, sram_size;

	nvm_size = pf->hw.flash.flash_size;
	pf->nvm_region = devlink_region_create(devlink, &ice_nvm_region_ops, 1,
	pf->nvm_region = devl_region_create(devlink, &ice_nvm_region_ops, 1,
					    nvm_size);
	if (IS_ERR(pf->nvm_region)) {
		dev_err(dev, "failed to create NVM devlink region, err %ld\n",
@@ -1562,7 +1562,7 @@ void ice_devlink_init_regions(struct ice_pf *pf)
	}

	sram_size = pf->hw.flash.sr_words * 2u;
	pf->sram_region = devlink_region_create(devlink, &ice_sram_region_ops,
	pf->sram_region = devl_region_create(devlink, &ice_sram_region_ops,
					     1, sram_size);
	if (IS_ERR(pf->sram_region)) {
		dev_err(dev, "failed to create shadow-ram devlink region, err %ld\n",
@@ -1570,7 +1570,7 @@ void ice_devlink_init_regions(struct ice_pf *pf)
		pf->sram_region = NULL;
	}

	pf->devcaps_region = devlink_region_create(devlink,
	pf->devcaps_region = devl_region_create(devlink,
						&ice_devcaps_region_ops, 10,
						ICE_AQ_MAX_BUF_LEN);
	if (IS_ERR(pf->devcaps_region)) {
@@ -1589,11 +1589,11 @@ void ice_devlink_init_regions(struct ice_pf *pf)
void ice_devlink_destroy_regions(struct ice_pf *pf)
{
	if (pf->nvm_region)
		devlink_region_destroy(pf->nvm_region);
		devl_region_destroy(pf->nvm_region);

	if (pf->sram_region)
		devlink_region_destroy(pf->sram_region);
		devl_region_destroy(pf->sram_region);

	if (pf->devcaps_region)
		devlink_region_destroy(pf->devcaps_region);
		devl_region_destroy(pf->devcaps_region);
}
+3 −4
Original line number Diff line number Diff line
@@ -5186,21 +5186,20 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)

	devl_lock(priv_to_devlink(pf));
	err = ice_load(pf);
	devl_unlock(priv_to_devlink(pf));
	if (err)
		goto err_load;

	err = ice_init_devlink(pf);
	if (err)
		goto err_init_devlink;
	devl_unlock(priv_to_devlink(pf));

	return 0;

err_init_devlink:
	devl_lock(priv_to_devlink(pf));
	ice_unload(pf);
	devl_unlock(priv_to_devlink(pf));
err_load:
	devl_unlock(priv_to_devlink(pf));
	ice_deinit(pf);
err_init:
	ice_adapter_put(pdev);
@@ -5298,9 +5297,9 @@ static void ice_remove(struct pci_dev *pdev)
	if (!ice_is_safe_mode(pf))
		ice_remove_arfs(pf);

	devl_lock(priv_to_devlink(pf));
	ice_deinit_devlink(pf);

	devl_lock(priv_to_devlink(pf));
	ice_unload(pf);
	devl_unlock(priv_to_devlink(pf));