From 272d4285dd17049eceb342b5b4f2b4fd346466b5 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Tue, 29 Apr 2025 16:13:00 -0700 Subject: [PATCH] BACKPORT: FROMGIT: coresight: core: Disable helpers for devices that fail to enable When enabling a SINK or LINK type coresight device fails, the associated helpers should be disabled. Bug: 393467632 (cherry picked from commit f6028eeeb5e4cf86f93f805098c84974a79bba8a https: //git.kernel.org/pub/scm/linux/kernel/git/coresight/linux.git next) Fixes: 6148652807ba ("coresight: Enable and disable helper devices adjacent to the path") Change-Id: I4ee1883f38d55da5df87058f016c5eb82e99100a Signed-off-by: Yabin Cui Suggested-by: Suzuki K Poulose Reviewed-by: James Clark Reviewed-by: Mike Leach Reviewed-by: Leo Yan Signed-off-by: Suzuki K Poulose Link: https://lore.kernel.org/r/20250429231301.1952246-3-yabinc@google.com --- drivers/hwtracing/coresight/coresight-core.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c index 783e259c3761..6725239e0a5c 100644 --- a/drivers/hwtracing/coresight/coresight-core.c +++ b/drivers/hwtracing/coresight/coresight-core.c @@ -574,7 +574,7 @@ int coresight_enable_path(struct list_head *path, enum cs_mode mode, /* Enable all helpers adjacent to the path first */ ret = coresight_enable_helpers(csdev, mode, sink_data); if (ret) - goto err; + goto err_disable_path; /* * ETF devices are tricky... They can be a link or a sink, * depending on how they are configured. If an ETF has been @@ -595,8 +595,10 @@ int coresight_enable_path(struct list_head *path, enum cs_mode mode, * that need disabling. Disabling the path here * would mean we could disrupt an existing session. */ - if (ret) + if (ret) { + coresight_disable_helpers(csdev); goto out; + } break; case CORESIGHT_DEV_TYPE_SOURCE: /* sources are enabled from either sysFS or Perf */ @@ -606,16 +608,19 @@ int coresight_enable_path(struct list_head *path, enum cs_mode mode, child = list_next_entry(nd, link)->csdev; ret = coresight_enable_link(csdev, parent, child); if (ret) - goto err; + goto err_disable_helpers; break; default: - goto err; + ret = -EINVAL; + goto err_disable_helpers; } } out: return ret; -err: +err_disable_helpers: + coresight_disable_helpers(csdev); +err_disable_path: coresight_disable_path_from(path, nd); goto out; }