coresight: perf: Clean up function etm_setup_aux()
authorMathieu Poirier <mathieu.poirier@linaro.org>
Thu, 25 Apr 2019 19:52:59 +0000 (13:52 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Apr 2019 20:00:17 +0000 (22:00 +0200)
There is no point in allocating sink memory for a trace session if
there is not a way to free it once it is no longer needed.  As such make
sure the sink API function to allocate and free memory have been
implemented before moving ahead with the establishment of a trace
session.

Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Tested-by: Leo Yan <leo.yan@linaro.org>
Tested-by: Robert Walker <robert.walker@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hwtracing/coresight/coresight-etm-perf.c

index bbfed70b34024effe0032ced3fbf2dd6d70570fe..b8ca3800b56b61fd03ac6667580bc4d2a315b2b3 100644 (file)
@@ -134,8 +134,7 @@ static void free_event_data(struct work_struct *work)
        if (event_data->snk_config && !WARN_ON(cpumask_empty(mask))) {
                cpu = cpumask_first(mask);
                sink = coresight_get_sink(etm_event_cpu_path(event_data, cpu));
-               if (sink_ops(sink)->free_buffer)
-                       sink_ops(sink)->free_buffer(event_data->snk_config);
+               sink_ops(sink)->free_buffer(event_data->snk_config);
        }
 
        for_each_cpu(cpu, mask) {
@@ -215,7 +214,7 @@ static void *etm_setup_aux(struct perf_event *event, void **pages,
                sink = coresight_get_enabled_sink(true);
        }
 
-       if (!sink || !sink_ops(sink)->alloc_buffer)
+       if (!sink)
                goto err;
 
        mask = &event_data->mask;
@@ -261,6 +260,9 @@ static void *etm_setup_aux(struct perf_event *event, void **pages,
        if (cpu >= nr_cpu_ids)
                goto err;
 
+       if (!sink_ops(sink)->alloc_buffer || !sink_ops(sink)->free_buffer)
+               goto err;
+
        /* Allocate the sink buffer for this session */
        event_data->snk_config =
                        sink_ops(sink)->alloc_buffer(sink, cpu, pages,