Make struct perf_event available to sink buffer allocation functions in
order to use the pid they carry to allocate and free buffer memory along
with regimenting access to what source a sink can collect data for.

Signed-off-by: Mathieu Poirier <mathieu.poir...@linaro.org>
---
 drivers/hwtracing/coresight/coresight-etb10.c  |  7 ++++---
 .../hwtracing/coresight/coresight-etm-perf.c   |  2 +-
 .../hwtracing/coresight/coresight-tmc-etf.c    |  7 ++++---
 .../hwtracing/coresight/coresight-tmc-etr.c    | 18 ++++++++++--------
 include/linux/coresight.h                      |  5 +++--
 5 files changed, 22 insertions(+), 17 deletions(-)

diff --git a/drivers/hwtracing/coresight/coresight-etb10.c 
b/drivers/hwtracing/coresight/coresight-etb10.c
index 6b50e781dc57..7d64c41cd8ac 100644
--- a/drivers/hwtracing/coresight/coresight-etb10.c
+++ b/drivers/hwtracing/coresight/coresight-etb10.c
@@ -351,10 +351,11 @@ static int etb_disable(struct coresight_device *csdev)
        return 0;
 }
 
-static void *etb_alloc_buffer(struct coresight_device *csdev, int cpu,
-                             void **pages, int nr_pages, bool overwrite)
+static void *etb_alloc_buffer(struct coresight_device *csdev,
+                             struct perf_event *event, void **pages,
+                             int nr_pages, bool overwrite)
 {
-       int node;
+       int node, cpu = event->cpu;
        struct cs_buffers *buf;
 
        if (cpu == -1)
diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c 
b/drivers/hwtracing/coresight/coresight-etm-perf.c
index 806b3dd5872d..3c6294432748 100644
--- a/drivers/hwtracing/coresight/coresight-etm-perf.c
+++ b/drivers/hwtracing/coresight/coresight-etm-perf.c
@@ -277,7 +277,7 @@ static void *etm_setup_aux(struct perf_event *event, void 
**pages,
 
        /* Allocate the sink buffer for this session */
        event_data->snk_config =
-                       sink_ops(sink)->alloc_buffer(sink, cpu, pages,
+                       sink_ops(sink)->alloc_buffer(sink, event, pages,
                                                     nr_pages, overwrite);
        if (!event_data->snk_config)
                goto err;
diff --git a/drivers/hwtracing/coresight/coresight-tmc-etf.c 
b/drivers/hwtracing/coresight/coresight-tmc-etf.c
index a38ad2b0d95a..1df1f8fade71 100644
--- a/drivers/hwtracing/coresight/coresight-tmc-etf.c
+++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c
@@ -350,10 +350,11 @@ static void tmc_disable_etf_link(struct coresight_device 
*csdev,
        dev_dbg(drvdata->dev, "TMC-ETF disabled\n");
 }
 
-static void *tmc_alloc_etf_buffer(struct coresight_device *csdev, int cpu,
-                                 void **pages, int nr_pages, bool overwrite)
+static void *tmc_alloc_etf_buffer(struct coresight_device *csdev,
+                                 struct perf_event *event, void **pages,
+                                 int nr_pages, bool overwrite)
 {
-       int node;
+       int node, cpu = event->cpu;
        struct cs_buffers *buf;
 
        if (cpu == -1)
diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c 
b/drivers/hwtracing/coresight/coresight-tmc-etr.c
index 86e748d09dc3..00db6a6ce23f 100644
--- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
+++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
@@ -1166,13 +1166,18 @@ static int tmc_enable_etr_sink_sysfs(struct 
coresight_device *csdev)
  * reaches a minimum limit (1M), beyond which we give up.
  */
 static struct etr_perf_buffer *
-tmc_etr_setup_perf_buf(struct tmc_drvdata *drvdata, int node, int nr_pages,
-                      void **pages, bool snapshot)
+tmc_etr_setup_perf_buf(struct tmc_drvdata *drvdata, struct perf_event *event,
+                      int nr_pages, void **pages, bool snapshot)
 {
+       int node, cpu = event->cpu;
        struct etr_buf *etr_buf;
        struct etr_perf_buffer *etr_perf;
        unsigned long size;
 
+       if (cpu == -1)
+               cpu = smp_processor_id();
+       node = cpu_to_node(cpu);
+
        etr_perf = kzalloc_node(sizeof(*etr_perf), GFP_KERNEL, node);
        if (!etr_perf)
                return ERR_PTR(-ENOMEM);
@@ -1210,16 +1215,13 @@ tmc_etr_setup_perf_buf(struct tmc_drvdata *drvdata, int 
node, int nr_pages,
 
 
 static void *tmc_alloc_etr_buffer(struct coresight_device *csdev,
-                                 int cpu, void **pages, int nr_pages,
-                                 bool snapshot)
+                                 struct perf_event *event, void **pages,
+                                 int nr_pages, bool snapshot)
 {
        struct etr_perf_buffer *etr_perf;
        struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
 
-       if (cpu == -1)
-               cpu = smp_processor_id();
-
-       etr_perf = tmc_etr_setup_perf_buf(drvdata, cpu_to_node(cpu),
+       etr_perf = tmc_etr_setup_perf_buf(drvdata, event,
                                          nr_pages, pages, snapshot);
        if (IS_ERR(etr_perf)) {
                dev_dbg(drvdata->dev, "Unable to allocate ETR buffer\n");
diff --git a/include/linux/coresight.h b/include/linux/coresight.h
index 189cc6ddc92b..62a520df8add 100644
--- a/include/linux/coresight.h
+++ b/include/linux/coresight.h
@@ -193,8 +193,9 @@ struct coresight_device {
 struct coresight_ops_sink {
        int (*enable)(struct coresight_device *csdev, u32 mode, void *data);
        int (*disable)(struct coresight_device *csdev);
-       void *(*alloc_buffer)(struct coresight_device *csdev, int cpu,
-                             void **pages, int nr_pages, bool overwrite);
+       void *(*alloc_buffer)(struct coresight_device *csdev,
+                             struct perf_event *event, void **pages,
+                             int nr_pages, bool overwrite);
        void (*free_buffer)(void *config);
        unsigned long (*update_buffer)(struct coresight_device *csdev,
                              struct perf_output_handle *handle,
-- 
2.17.1

Reply via email to