]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
coresight: Handle helper enable failure properly
authorLeo Yan <leo.yan@arm.com>
Fri, 15 May 2026 20:08:09 +0000 (21:08 +0100)
committerSuzuki K Poulose <suzuki.poulose@arm.com>
Mon, 18 May 2026 09:18:44 +0000 (10:18 +0100)
If a helper fails to be enabled, unwind any helpers that were already
enabled earlier in the loop. This avoids leaving partially enabled
helpers behind.

Fixes: 6148652807ba ("coresight: Enable and disable helper devices adjacent to the path")
Reviewed-by: Yeoreum Yun <yeoreum.yun@arm.com>
Reviewed-by: James Clark <james.clark@linaro.org>
Tested-by: James Clark <james.clark@linaro.org>
Tested-by: Jie Gan <jie.gan@oss.qualcomm.com>
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/20260515-arm_coresight_path_power_management_improvement-v14-2-f88c4a3ecfe9@arm.com
drivers/hwtracing/coresight/coresight-core.c

index 2105bb8139407bb579ed2517c1eecccda0a9c2d7..256f6a32621b8e086d02427317e5d35d0f29a3c9 100644 (file)
@@ -499,10 +499,19 @@ static int coresight_enable_helpers(struct coresight_device *csdev,
 
                ret = coresight_enable_helper(helper, mode, path);
                if (ret)
-                       return ret;
+                       goto err;
        }
 
        return 0;
+
+err:
+       while (i--) {
+               helper = csdev->pdata->out_conns[i]->dest_dev;
+               if (helper && coresight_is_helper(helper))
+                       coresight_disable_helper(helper, path);
+       }
+
+       return ret;
 }
 
 int coresight_enable_path(struct coresight_path *path, enum cs_mode mode)