]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
coresight: Refactor sysfs connection group cleanup
authorLeo Yan <leo.yan@arm.com>
Mon, 9 Feb 2026 12:44:37 +0000 (12:44 +0000)
committerSuzuki K Poulose <suzuki.poulose@arm.com>
Wed, 25 Feb 2026 11:14:44 +0000 (11:14 +0000)
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: James Clark <james.clark@linaro.org>
Signed-off-by: Leo Yan <leo.yan@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20260209-arm_coresight_refactor_dev_register-v4-5-62d6042f76f7@arm.com
drivers/hwtracing/coresight/coresight-core.c
drivers/hwtracing/coresight/coresight-platform.c
drivers/hwtracing/coresight/coresight-priv.h

index 2185a8f869ad78adf1f00df53b29aa6be3463347..34439ca98d8d3c98319572f6f691a4446afc768e 100644 (file)
@@ -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 @@ out_unlock:
        }
 
 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);
 }
index 0db64c5f499592e1985141161b4f90fa1f0410b4..0ca3bd762454350d33b5630244d0cfe638ee03fb 100644 (file)
@@ -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);
index fd896ac07942ec0a4c7acff9f32421352c1efef2..1ea882dffd703b2873e41b4ce0c2564d2ce9bbad 100644 (file)
@@ -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);