In the proposed Coresight module set v5 [1] from Tingwei, unloading the ETM module before the CTI module will crash on unload of the CTI module due to the cleanup callback from Coresight to the CTI module not working correctly in clearing sysfs callbacks.
Patch fixes this issue. Applies on [1].
Tingwei - could you consider adding this to your set for v6?
[1] https://lists.linaro.org/pipermail/coresight/2020-July/004349.html
Mike Leach (1): coresight: cti: Fix bug clearing sysfs links on callback
drivers/hwtracing/coresight/coresight-core.c | 4 ++-- drivers/hwtracing/coresight/coresight-cti-core.c | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-)
During module unload, a coresight driver module will call back into the CTI driver to remove any links between the two devices.
The current code has 2 issues:- 1) in the CTI driver the matching code is matching to the wrong device so misses all the links. 2) The callback is called too late in the unload process resulting in a crash.
This fixes both the issues.
Fixes: 177af8285b59 (coresight: cti: Enable CTI associated with devices) Reported-by: Tingwei Zhang tingwei@codeaurora.org Signed-off-by: Mike Leach mike.leach@linaro.org --- drivers/hwtracing/coresight/coresight-core.c | 4 ++-- drivers/hwtracing/coresight/coresight-cti-core.c | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c index a11288fbb160..c849c2afbcfb 100644 --- a/drivers/hwtracing/coresight/coresight-core.c +++ b/drivers/hwtracing/coresight/coresight-core.c @@ -1254,8 +1254,6 @@ static void coresight_device_release(struct device *dev) { struct coresight_device *csdev = to_coresight_device(dev);
- if (cti_assoc_ops && cti_assoc_ops->remove) - cti_assoc_ops->remove(csdev); fwnode_handle_put(csdev->dev.fwnode); kfree(csdev->refcnt); kfree(csdev); @@ -1580,6 +1578,8 @@ void coresight_unregister(struct coresight_device *csdev) { etm_perf_del_symlink_sink(csdev); /* Remove references of that device in the topology */ + if (cti_assoc_ops && cti_assoc_ops->remove) + cti_assoc_ops->remove(csdev); coresight_remove_conns(csdev); coresight_clear_default_sink(csdev); coresight_release_platform_data(csdev, csdev->pdata); diff --git a/drivers/hwtracing/coresight/coresight-cti-core.c b/drivers/hwtracing/coresight/coresight-cti-core.c index 255e914b21b5..c5a4213d6623 100644 --- a/drivers/hwtracing/coresight/coresight-cti-core.c +++ b/drivers/hwtracing/coresight/coresight-cti-core.c @@ -502,7 +502,6 @@ static bool cti_add_sysfs_link(struct cti_drvdata *drvdata, link_info.orig_name = tc->con_dev_name; link_info.target = tc->con_dev; link_info.target_name = dev_name(&drvdata->csdev->dev); - link_err = coresight_add_sysfs_link(&link_info); if (link_err) dev_warn(&drvdata->csdev->dev, @@ -608,7 +607,7 @@ void cti_remove_assoc_from_csdev(struct coresight_device *csdev) ctidrv = csdev_to_cti_drvdata(csdev->ect_dev); ctidev = &ctidrv->ctidev; list_for_each_entry(tc, &ctidev->trig_cons, node) { - if (tc->con_dev == csdev->ect_dev) { + if (tc->con_dev == csdev) { cti_remove_sysfs_link(ctidrv, tc); tc->con_dev = NULL; break;
On Thu, Jul 30, 2020 at 03:52:32AM +0800, Mike Leach wrote:
In the proposed Coresight module set v5 [1] from Tingwei, unloading the ETM module before the CTI module will crash on unload of the CTI module due to the cleanup callback from Coresight to the CTI module not working correctly in clearing sysfs callbacks.
Patch fixes this issue. Applies on [1].
Tingwei - could you consider adding this to your set for v6?
Sure, Mike. I'll pick this change into v6.
Thanks, Tingwei
[1] https://lists.linaro.org/pipermail/coresight/2020-July/004349.html
Mike Leach (1): coresight: cti: Fix bug clearing sysfs links on callback
drivers/hwtracing/coresight/coresight-core.c | 4 ++-- drivers/hwtracing/coresight/coresight-cti-core.c | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-)
-- 2.17.1