diff options
author | James Clark <james.clark@arm.com> | 2023-04-25 15:35:40 +0100 |
---|---|---|
committer | Suzuki K Poulose <suzuki.poulose@arm.com> | 2023-06-05 15:46:47 +0100 |
commit | 1b5b1646e63d5ce43469e00680b8c1a3a1e034cd (patch) | |
tree | 76873ae39450e4d52bef56f1524e612bf97b87eb /drivers/hwtracing/coresight/coresight-cti-sysfs.c | |
parent | 6148652807ba89b0c9af05ebed3e005b626f90eb (diff) | |
download | linux-1b5b1646e63d5ce43469e00680b8c1a3a1e034cd.tar.gz linux-1b5b1646e63d5ce43469e00680b8c1a3a1e034cd.tar.bz2 linux-1b5b1646e63d5ce43469e00680b8c1a3a1e034cd.zip |
coresight: Fix CTI module refcount leak by making it a helper device
The CTI module has some hard coded refcounting code that has a leak.
For example running perf and then trying to unload it fails:
perf record -e cs_etm// -a -- ls
rmmod coresight_cti
rmmod: ERROR: Module coresight_cti is in use
The coresight core already handles references of devices in use, so by
making CTI a normal helper device, we get working refcounting for free.
Reviewed-by: Mike Leach <mike.leach@linaro.org>
Signed-off-by: James Clark <james.clark@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20230425143542.2305069-14-james.clark@arm.com
Diffstat (limited to 'drivers/hwtracing/coresight/coresight-cti-sysfs.c')
-rw-r--r-- | drivers/hwtracing/coresight/coresight-cti-sysfs.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/hwtracing/coresight/coresight-cti-sysfs.c b/drivers/hwtracing/coresight/coresight-cti-sysfs.c index e528cff9d4e2..d25dd2737b49 100644 --- a/drivers/hwtracing/coresight/coresight-cti-sysfs.c +++ b/drivers/hwtracing/coresight/coresight-cti-sysfs.c @@ -112,11 +112,11 @@ static ssize_t enable_store(struct device *dev, ret = pm_runtime_resume_and_get(dev->parent); if (ret) return ret; - ret = cti_enable(drvdata->csdev); + ret = cti_enable(drvdata->csdev, CS_MODE_SYSFS, NULL); if (ret) pm_runtime_put(dev->parent); } else { - ret = cti_disable(drvdata->csdev); + ret = cti_disable(drvdata->csdev, NULL); if (!ret) pm_runtime_put(dev->parent); } |