Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

stm class: ftrace: Use different channel accroding to CPU

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>

authored by

Tingwei Zhang and committed by
Greg Kroah-Hartman
b8f8534b e8ecea30

+4 -1
+4 -1
drivers/hwtracing/stm/ftrace.c
··· 37 37 stm_ftrace_write(struct trace_export *export, const void *buf, unsigned int len) 38 38 { 39 39 struct stm_ftrace *stm = container_of(export, struct stm_ftrace, ftrace); 40 + /* This is called from trace system with preemption disabled */ 41 + unsigned int cpu = smp_processor_id(); 40 42 41 - stm_source_write(&stm->data, STM_FTRACE_CHAN, buf, len); 43 + stm_source_write(&stm->data, STM_FTRACE_CHAN + cpu, buf, len); 42 44 } 43 45 44 46 static int stm_ftrace_link(struct stm_source_data *data) ··· 65 63 { 66 64 int ret; 67 65 66 + stm_ftrace.data.nr_chans = roundup_pow_of_two(num_possible_cpus()); 68 67 ret = stm_source_register_device(NULL, &stm_ftrace.data); 69 68 if (ret) 70 69 pr_err("Failed to register stm_source - ftrace.\n");