coresight: tmc-etr: Add barrier after updating AUX ring buffer
authorLeo Yan <leo.yan@linaro.org>
Mon, 9 Aug 2021 11:14:00 +0000 (19:14 +0800)
committerMathieu Poirier <mathieu.poirier@linaro.org>
Wed, 27 Oct 2021 17:44:36 +0000 (11:44 -0600)
Since a memory barrier is required between AUX trace data store and
aux_head store, and the AUX trace data is filled with memcpy(), it's
sufficient to use smp_wmb() so can ensure the trace data is visible
prior to updating aux_head.

Signed-off-by: Leo Yan <leo.yan@linaro.org>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20210809111407.596077-3-leo.yan@linaro.org
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
drivers/hwtracing/coresight/coresight-tmc-etr.c

index 0ac2a61..7f4654b 100644 (file)
@@ -1564,6 +1564,14 @@ tmc_update_etr_buffer(struct coresight_device *csdev,
         */
        if (etr_perf->snapshot)
                handle->head += size;
+
+       /*
+        * Ensure that the AUX trace data is visible before the aux_head
+        * is updated via perf_aux_output_end(), as expected by the
+        * perf ring buffer.
+        */
+       smp_wmb();
+
 out:
        /*
         * Don't set the TRUNCATED flag in snapshot mode because 1) the