coresight: add API to get sink from path
authorMathieu Poirier <mathieu.poirier@linaro.org>
Thu, 18 Feb 2016 00:51:46 +0000 (17:51 -0700)
committerMathieu Poirier <mathieu.poirier@linaro.org>
Wed, 1 Jun 2016 21:30:12 +0000 (15:30 -0600)
Add an API allowing external code to quickly get a handle on the
sink within a path.  The sink is always last, but adding an API allows
to keep the path's node structure private and remove redundant checks.

Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit b6404e21f023e4aa208a0ba03d55a9c8a57cb940)

drivers/hwtracing/coresight/coresight-priv.h
drivers/hwtracing/coresight/coresight.c

index 7b193a34d70911de1094a34621ac3eca2fdbd626..14f245a2018d69b8af738630e3aab469ec1df55f 100644 (file)
@@ -54,6 +54,7 @@ static inline void CS_UNLOCK(void __iomem *addr)
 
 void coresight_disable_path(struct list_head *path);
 int coresight_enable_path(struct list_head *path);
+struct coresight_device *coresight_get_sink(struct list_head *path);
 struct list_head *coresight_build_path(struct coresight_device *csdev);
 void coresight_release_path(struct list_head *path);
 
index f26589effb70157b4b53a32d03babd34c657fb78..2ed48545df268aca365825aba548a9f5c2b84381 100644 (file)
@@ -321,6 +321,21 @@ err:
        goto out;
 }
 
+struct coresight_device *coresight_get_sink(struct list_head *path)
+{
+       struct coresight_device *csdev;
+
+       if (!path)
+               return NULL;
+
+       csdev = list_last_entry(path, struct coresight_node, link)->csdev;
+       if (csdev->type != CORESIGHT_DEV_TYPE_SINK &&
+           csdev->type != CORESIGHT_DEV_TYPE_LINKSINK)
+               return NULL;
+
+       return csdev;
+}
+
 /**
  * _coresight_build_path - recursively build a path from a @csdev to a sink.
  * @csdev:     The device to start from.