coresight: perf: Add helper to retrieve sink configuration
authorSuzuki K Poulose <suzuki.poulose@arm.com>
Thu, 20 Sep 2018 19:17:55 +0000 (13:17 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 25 Sep 2018 18:09:18 +0000 (20:09 +0200)
We can always find the sink configuration for a given perf_output_handle.
Add a helper to retrieve the sink configuration for a given
perf_output_handle. This will be used to get rid of the set_buffer()
call back.

Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hwtracing/coresight/coresight-etm-perf.c
drivers/hwtracing/coresight/coresight-etm-perf.h

index ad87441f65d7daba20b3a9ac153f80d3cb43d2a0..16b83d8b2ac2fc0ed6e9acc4a07314a6a1bec095 100644 (file)
 static struct pmu etm_pmu;
 static bool etm_perf_up;
 
-/**
- * struct etm_event_data - Coresight specifics associated to an event
- * @work:              Handle to free allocated memory outside IRQ context.
- * @mask:              Hold the CPU(s) this event was set for.
- * @snk_config:                The sink configuration.
- * @path:              An array of path, each slot for one CPU.
- */
-struct etm_event_data {
-       struct work_struct work;
-       cpumask_t mask;
-       void *snk_config;
-       struct list_head * __percpu *path;
-};
-
 static DEFINE_PER_CPU(struct perf_output_handle, ctx_handle);
 static DEFINE_PER_CPU(struct coresight_device *, csdev_src);
 
index 4197df4faf5e9b9daefdb324bfea7bb7b7048290..da7d9336a15c5b7b133e9e81513ce98c95e88180 100644 (file)
@@ -7,6 +7,7 @@
 #ifndef _CORESIGHT_ETM_PERF_H
 #define _CORESIGHT_ETM_PERF_H
 
+#include <linux/percpu-defs.h>
 #include "coresight-priv.h"
 
 struct coresight_device;
@@ -42,14 +43,39 @@ struct etm_filters {
        bool                    ssstatus;
 };
 
+/**
+ * struct etm_event_data - Coresight specifics associated to an event
+ * @work:              Handle to free allocated memory outside IRQ context.
+ * @mask:              Hold the CPU(s) this event was set for.
+ * @snk_config:                The sink configuration.
+ * @path:              An array of path, each slot for one CPU.
+ */
+struct etm_event_data {
+       struct work_struct work;
+       cpumask_t mask;
+       void *snk_config;
+       struct list_head * __percpu *path;
+};
 
 #ifdef CONFIG_CORESIGHT
 int etm_perf_symlink(struct coresight_device *csdev, bool link);
+static inline void *etm_perf_sink_config(struct perf_output_handle *handle)
+{
+       struct etm_event_data *data = perf_get_aux(handle);
 
+       if (data)
+               return data->snk_config;
+       return NULL;
+}
 #else
 static inline int etm_perf_symlink(struct coresight_device *csdev, bool link)
 { return -EINVAL; }
 
+static inline void *etm_perf_sink_config(struct perf_output_handle *handle)
+{
+       return NULL;
+}
+
 #endif /* CONFIG_CORESIGHT */
 
 #endif