Add gtrace_release_outconns() and call it from gtrace_unregister_component() so the output connection fwnode references are released in the core instead of being duplicated in every platform driver's remove callback.
Signed-off-by: Zane Leung liangzhen@linux.spacemit.com --- drivers/hwtracing/gtrace/gtrace-core.c | 15 +++++++++++++++ drivers/hwtracing/gtrace/rvtrace-platform.c | 9 --------- 2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/drivers/hwtracing/gtrace/gtrace-core.c b/drivers/hwtracing/gtrace/gtrace-core.c index 034987237abc..5704e426abe8 100644 --- a/drivers/hwtracing/gtrace/gtrace-core.c +++ b/drivers/hwtracing/gtrace/gtrace-core.c @@ -479,10 +479,25 @@ struct gtrace_component *gtrace_register_component(struct gtrace_component_id *i } EXPORT_SYMBOL_GPL(gtrace_register_component);
+static void gtrace_release_outconns(struct gtrace_component *comp) +{ + struct gtrace_platform_data *pdata = comp->pdata; + struct gtrace_connection *conn; + int i; + + for (i = 0; i < pdata->nr_outconns; i++) { + conn = pdata->outconns[i]; + if (conn && conn->dest_fwnode) + fwnode_handle_put(conn->dest_fwnode); + } +} + void gtrace_unregister_component(struct gtrace_component *comp) { struct gtrace_component *c;
+ gtrace_release_outconns(comp); + mutex_lock(>race_mutex);
if (comp->pdata->bound_cpu >= 0) { diff --git a/drivers/hwtracing/gtrace/rvtrace-platform.c b/drivers/hwtracing/gtrace/rvtrace-platform.c index a5655e983e51..189ff0b8bc18 100644 --- a/drivers/hwtracing/gtrace/rvtrace-platform.c +++ b/drivers/hwtracing/gtrace/rvtrace-platform.c @@ -141,15 +141,6 @@ static int rvtrace_platform_probe(struct platform_device *pdev) static void rvtrace_platform_remove(struct platform_device *pdev) { struct gtrace_component *comp = platform_get_drvdata(pdev); - struct gtrace_platform_data *pdata = comp->pdata; - struct gtrace_connection *conn; - int i; - - for (i = 0; i < pdata->nr_outconns; i++) { - conn = pdata->outconns[i]; - if (conn && conn->dest_fwnode) - fwnode_handle_put(conn->dest_fwnode); - }
gtrace_unregister_component(comp); }