Commit babb9879 authored by Leo Yan's avatar Leo Yan Committed by Suzuki K Poulose
Browse files

coresight: Refactor sysfs connection group cleanup



Move the sysfs connection group cleanup into coresight_remove_conns(),
so that the driver removes connections and related sysfs resources in
one go.

As side effect, the csdev argument to coresight_release_platform_data()
is no longer needed; adjust the code for this.

Reviewed-by: default avatarJames Clark <james.clark@linaro.org>
Signed-off-by: default avatarLeo Yan <leo.yan@arm.com>
Signed-off-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20260209-arm_coresight_refactor_dev_register-v4-5-62d6042f76f7@arm.com
parent 32c22549
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -1200,6 +1200,8 @@ static void coresight_remove_conns(struct coresight_device *csdev)
		coresight_remove_links(conn->src_dev, conn);
		conn->dest_dev = NULL;
	}

	coresight_remove_conns_sysfs_group(csdev);
}

/**
@@ -1300,8 +1302,7 @@ void coresight_write64(struct coresight_device *csdev, u64 val, u32 offset)
 * coresight_release_platform_data: Release references to the devices connected
 * to the output port of this device.
 */
void coresight_release_platform_data(struct coresight_device *csdev,
				     struct device *dev,
void coresight_release_platform_data(struct device *dev,
				     struct coresight_platform_data *pdata)
{
	int i;
@@ -1319,8 +1320,6 @@ void coresight_release_platform_data(struct coresight_device *csdev,
	devm_kfree(dev, pdata->out_conns);
	devm_kfree(dev, pdata->in_conns);
	devm_kfree(dev, pdata);
	if (csdev)
		coresight_remove_conns_sysfs_group(csdev);
}

struct coresight_device *coresight_register(struct coresight_desc *desc)
@@ -1423,7 +1422,7 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
	}

err_out:
	coresight_release_platform_data(NULL, desc->dev, desc->pdata);
	coresight_release_platform_data(desc->dev, desc->pdata);
	return ERR_PTR(ret);
}
EXPORT_SYMBOL_GPL(coresight_register);
@@ -1438,7 +1437,7 @@ void coresight_unregister(struct coresight_device *csdev)
	etm_perf_del_symlink_sink(csdev);
	coresight_remove_conns(csdev);
	coresight_clear_default_sink(csdev);
	coresight_release_platform_data(csdev, csdev->dev.parent, csdev->pdata);
	coresight_release_platform_data(csdev->dev.parent, csdev->pdata);
	device_unregister(&csdev->dev);
	mutex_unlock(&coresight_mutex);
}
+1 −1
Original line number Diff line number Diff line
@@ -849,7 +849,7 @@ coresight_get_platform_data(struct device *dev)
error:
	if (!IS_ERR_OR_NULL(pdata))
		/* Cleanup the connection information */
		coresight_release_platform_data(NULL, dev, pdata);
		coresight_release_platform_data(dev, pdata);
	return ERR_PTR(ret);
}
EXPORT_SYMBOL_GPL(coresight_get_platform_data);
+1 −2
Original line number Diff line number Diff line
@@ -239,8 +239,7 @@ static inline void *coresight_get_uci_data_from_amba(const struct amba_id *table
	return NULL;
}

void coresight_release_platform_data(struct coresight_device *csdev,
				     struct device *dev,
void coresight_release_platform_data(struct device *dev,
				     struct coresight_platform_data *pdata);
struct coresight_device *
coresight_find_csdev_by_fwnode(struct fwnode_handle *r_fwnode);