stm class: ftrace: Use different channel accroding to CPU
authorTingwei Zhang <tingwei@codeaurora.org>
Mon, 5 Oct 2020 07:13:17 +0000 (10:13 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 5 Oct 2020 10:43:54 +0000 (12:43 +0200)
To avoid mixup of packets from differnt ftrace packets simultaneously,
use different channel for packets from different CPU.

Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org>
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Link: https://lore.kernel.org/r/20201005071319.78508-7-alexander.shishkin@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hwtracing/stm/ftrace.c

index c694a6e..3bb606d 100644 (file)
@@ -37,8 +37,10 @@ static void notrace
 stm_ftrace_write(struct trace_export *export, const void *buf, unsigned int len)
 {
        struct stm_ftrace *stm = container_of(export, struct stm_ftrace, ftrace);
+       /* This is called from trace system with preemption disabled */
+       unsigned int cpu = smp_processor_id();
 
-       stm_source_write(&stm->data, STM_FTRACE_CHAN, buf, len);
+       stm_source_write(&stm->data, STM_FTRACE_CHAN + cpu, buf, len);
 }
 
 static int stm_ftrace_link(struct stm_source_data *data)
@@ -63,6 +65,7 @@ static int __init stm_ftrace_init(void)
 {
        int ret;
 
+       stm_ftrace.data.nr_chans = roundup_pow_of_two(num_possible_cpus());
        ret = stm_source_register_device(NULL, &stm_ftrace.data);
        if (ret)
                pr_err("Failed to register stm_source - ftrace.\n");