tracing: export event trace and trace_marker
Subsystems (4)
v3 cover tracing: export event trace and trace_marker
Ftrace has ability to export trace packets to other destination. Currently, only function trace can be exported. This series extends the support to event trace and trace_maker. STM is one possible destination to export ftrace. Use separate channel for each CPU to avoid mixing up packets from different CPUs together.
Change from v2:
Change flag definition to BIT(). (Steven)
Add comment in stm_ftrace_write() to clarify it's safe to use smp_processor_id() here since preempt is disabled. (Steven)
Change from v1:
All changes are suggested by Steven Rostedt.
User separate flag to control function trace, event trace and trace mark. Allocate channels according to num_possible_cpu() dynamically. Move ftrace_exports routines up so all ftrace can use them.
Tingwei Zhang (6):
stm class: ftrace: change dependency to TRACING
tracing: add flag to control different traces
tracing: add trace_export support for event trace
tracing: add trace_export support for trace_marker stm class: ftrace: enable supported trace export flag stm class: ftrace: use different channel accroding to CPU
drivers/hwtracing/stm/Kconfig | 2 +- drivers/hwtracing/stm/ftrace.c | 7 +- include/linux/trace.h | 7 + kernel/trace/trace.c | 270 ++++++++++++++++++--------------- 4 files changed, 159 insertions(+), 127 deletions(-)
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 1/6 stm class: ftrace: change dependency to TRACING
We will support copying event trace to STM. Change STM_SOURCE_FTRACE to depend on TRACING since we will support multiple tracers.
--- drivers/hwtracing/stm/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hwtracing/stm/Kconfig +1 -1
@@ -71,7 +71,7 @@ config STM_SOURCE_HEARTBEAT config STM_SOURCE_FTRACE tristate "Copy the output from kernel Ftrace to STM engine" - depends on FUNCTION_TRACER + depends on TRACING help This option can be used to copy the output from kernel Ftrace to STM engine. Enabling this option will introduce a slight
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 2/6 tracing: add flag to control different traces
In reply to Tingwei ZhangMore traces like event trace or trace marker will be supported. Add flag for difference traces, so that they can be controlled separately. Move current function trace to it's own flag instead of global ftrace enable flag.
--- include/linux/trace.h | 5 +++++ kernel/trace/trace.c | 36 +++++++++++++++++++----------------- 2 files changed, 24 insertions(+), 17 deletions(-)
include/linux/trace.h +5 -0
@@ -3,6 +3,9 @@#define _LINUX_TRACE_H#ifdef CONFIG_TRACING + +#define TRACE_EXPORT_FUNCTION BIT(0) +/* * The trace export - an export of Ftrace output. The trace_export * can process traces and export them to a registered destination as
@@ -15,10 +18,12 @@* next - pointer to the next trace_export * write - copy traces which have been delt with ->commit() to * the destination +* flags - which ftrace to be exported */ struct trace_export {struct trace_export __rcu *next;void (*write)(struct trace_export *,const void *,unsigned int ); +int flags; };int register_ftrace_export (struct trace_export *export);
kernel/trace/trace.c +19 -17
@@ -2747,33 +2747,37 @@ trace_buffer_unlock_commit_nostack(struct trace_buffer *buffer,static void trace_process_export (struct trace_export *export, -struct ring_buffer_event *event) +struct ring_buffer_event *event,int flag) {struct trace_entry *entry;unsigned int size =0 ; - entry =ring_buffer_event_data (event); - size =ring_buffer_event_length (event); - export->write (export, entry, size); +if (export->flags & flag) { + entry =ring_buffer_event_data (event); + size =ring_buffer_event_length (event); + export->write (export, entry, size); + } }static DEFINE_MUTEX (ftrace_export_lock);static struct trace_export __rcu *ftrace_exports_list__read_mostly ; -static DEFINE_STATIC_KEY_FALSE (ftrace_exports_enabled); +static DEFINE_STATIC_KEY_FALSE (trace_function_exports_enabled); -static inline void ftrace_exports_enable (void ) +static inline void ftrace_exports_enable (struct trace_export *export) { -static_branch_enable (&ftrace_exports_enabled); +if (export->flags &TRACE_EXPORT_FUNCTION ) +static_branch_inc (&trace_function_exports_enabled); } -static inline void ftrace_exports_disable (void ) +static inline void ftrace_exports_disable (struct trace_export *export) { -static_branch_disable (&ftrace_exports_enabled); +if (export->flags &TRACE_EXPORT_FUNCTION ) +static_branch_dec (&trace_function_exports_enabled); } -static void ftrace_exports (struct ring_buffer_event *event) +static void ftrace_exports (struct ring_buffer_event *event,int flag) {struct trace_export *export;
@@ -2781,7 +2785,7 @@ static void ftrace_exports(struct ring_buffer_event *event) export =rcu_dereference_raw_check (ftrace_exports_list);while (export) { -trace_process_export (export, event); +trace_process_export (export, event, flag); export =rcu_dereference_raw_check (export->next); }
@@ -2821,8 +2825,7 @@ rm_trace_export(struct trace_export **list, struct trace_export *export)static inline void add_ftrace_export (struct trace_export **list,struct trace_export *export) { -if (*list ==NULL ) -ftrace_exports_enable (); +ftrace_exports_enable (export);add_trace_export (list, export); }
@@ -2833,8 +2836,7 @@ rm_ftrace_export(struct trace_export **list, struct trace_export *export)int ret; ret =rm_trace_export (list, export); -if (*list ==NULL ) -ftrace_exports_disable (); +ftrace_exports_disable (export);return ret; }
@@ -2887,8 +2889,8 @@ trace_function(struct trace_array *tr, entry->parent_ip = parent_ip;if (!call_filter_check_discard (call, entry, buffer, event)) { -if (static_branch_unlikely (&ftrace_exports_enabled)) -ftrace_exports (event); +if (static_branch_unlikely (&trace_function_exports_enabled)) +ftrace_exports (event,TRACE_EXPORT_FUNCTION );__buffer_unlock_commit (buffer, event); } }
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 3/6 tracing: add trace_export support for event trace
In reply to Tingwei ZhangOnly function traces can be exported to other destinations currently. This patch exports event trace as well. Move trace export related function to the beginning of file so other trace can call trace_process_export() to export.
--- include/linux/trace.h | 1 + kernel/trace/trace.c | 259 ++++++++++++++++++++++-------------------- 2 files changed, 135 insertions(+), 125 deletions(-)
include/linux/trace.h +1 -0
@@ -5,6 +5,7 @@#ifdef CONFIG_TRACING #define TRACE_EXPORT_FUNCTION BIT(0) +#define TRACE_EXPORT_EVENT BIT(1)/* * The trace export - an export of Ftrace output. The trace_export
kernel/trace/trace.c +134 -125
277 lines not on this page · raw message
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 4/6 tracing: add trace_export support for trace_marker
In reply to Tingwei ZhangAdd the support to route trace_marker buffer to other destination via trace_export.
--- include/linux/trace.h | 1 + kernel/trace/trace.c | 9 +++++++++ 2 files changed, 10 insertions(+)
include/linux/trace.h +1 -0
@@ -6,6 +6,7 @@#define TRACE_EXPORT_FUNCTION BIT(0)#define TRACE_EXPORT_EVENT BIT(1) +#define TRACE_EXPORT_MARKER BIT(2)/* * The trace export - an export of Ftrace output. The trace_export
kernel/trace/trace.c +9 -0
@@ -271,6 +271,7 @@ static struct trace_export __rcu *ftrace_exports_list __read_mostly;static DEFINE_STATIC_KEY_FALSE (trace_function_exports_enabled);static DEFINE_STATIC_KEY_FALSE (trace_event_exports_enabled); +static DEFINE_STATIC_KEY_FALSE (trace_marker_exports_enabled);static inline void ftrace_exports_enable (struct trace_export *export) {
@@ -279,6 +280,9 @@ static inline void ftrace_exports_enable(struct trace_export *export)if (export->flags &TRACE_EXPORT_EVENT )static_branch_inc (&trace_event_exports_enabled); + +if (export->flags &TRACE_EXPORT_MARKER ) +static_branch_inc (&trace_marker_exports_enabled); }static inline void ftrace_exports_disable (struct trace_export *export)
@@ -288,6 +292,9 @@ static inline void ftrace_exports_disable(struct trace_export *export)if (export->flags &TRACE_EXPORT_EVENT )static_branch_dec (&trace_event_exports_enabled); + +if (export->flags &TRACE_EXPORT_MARKER ) +static_branch_dec (&trace_marker_exports_enabled); }static void ftrace_exports (struct ring_buffer_event *event,int flag)
@@ -6648,6 +6655,8 @@ tracing_mark_write(struct file *filp, const char __user *ubuf, }else entry->buf[cnt] ='\0' ; +if (static_branch_unlikely (&trace_marker_exports_enabled)) +ftrace_exports (event,TRACE_EXPORT_MARKER );__buffer_unlock_commit (buffer, event);if (tt)
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 5/6 stm class: ftrace: enable supported trace export flag
In reply to Tingwei ZhangSet flags for trace_export. Export function trace, event trace and trace marker to stm.
--- drivers/hwtracing/stm/ftrace.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/hwtracing/stm/ftrace.c +2 -0
@@ -46,6 +46,8 @@ static int stm_ftrace_link(struct stm_source_data *data) struct stm_ftrace *sf = container_of(data, struct stm_ftrace, data); sf->ftrace.write = stm_ftrace_write; + sf->ftrace.flags =TRACE_EXPORT_FUNCTION |TRACE_EXPORT_EVENT + |TRACE_EXPORT_MARKER ;return register_ftrace_export (&sf->ftrace); }
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 6/6 stm class: ftrace: use different channel accroding to CPU
In reply to Tingwei ZhangTo avoid mixup of packets from differnt ftrace packets simultaneously, use different channel for packets from different CPU.
--- drivers/hwtracing/stm/ftrace.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/hwtracing/stm/ftrace.c +4 -1
@@ -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 =num_possible_cpus (); ret =stm_source_register_device (NULL , &stm_ftrace.data);if (ret)pr_err ("Failed to register stm_source - ftrace.\n" );
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Hi Mathieu,
May I know your comments for this patch set?
Thanks,
Tingwei
Quoted 36 lines · Tingwei Zhang
Ftrace has ability to export trace packets to other destination. Currently, only function trace can be exported. This series extends the support to event trace and
trace_maker. STM is one possible destination to export ftrace. Use separate channel for each CPU to avoid mixing up packets
from different CPUs together.Change from v2:
Change flag definition toBIT(). (Steven)
Add comment instm_ftrace_write()to clarify it's safe to usesmp_processor_id()here since preempt is disabled. (Steven)Change from v1:
All changes are suggested by Steven Rostedt.
User separate flag to control function trace, event trace and trace mark. Allocate channels according tonum_possible_cpu()dynamically. Moveftrace_exportsroutines up so all ftrace can use them.Tingwei Zhang (6):
stm class: ftrace: change dependency to TRACING
tracing: add flag to control different traces
tracing: addtrace_exportsupport for event trace
tracing: addtrace_exportsupport fortrace_markerstm class: ftrace: enable supported trace export flag stm class: ftrace: use different channel accroding to CPUdrivers/hwtracing/stm/Kconfig | 2 +- drivers/hwtracing/stm/ftrace.c | 7 +- include/linux/trace.h | 7 + kernel/trace/trace.c | 270 ++++++++++++++++++--------------- 4 files changed, 159 insertions(+), 127 deletions(-)Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Quoted 3 lines · Tingwei Zhang
Hi Mathieu,
May I know your comments for this patch set?
I do not maintain any of these files.
Quoted 41 lines
Thanks,
TingweiQuoted 36 lines · Tingwei Zhang
Ftrace has ability to export trace packets to other destination. Currently, only function trace can be exported. This series extends the support to event trace and
trace_maker. STM is one possible destination to export ftrace. Use separate channel for each CPU to avoid mixing up packets
from different CPUs together.Change from v2:
Change flag definition toBIT(). (Steven)
Add comment instm_ftrace_write()to clarify it's safe to usesmp_processor_id()here since preempt is disabled. (Steven)Change from v1:
All changes are suggested by Steven Rostedt.
User separate flag to control function trace, event trace and trace mark. Allocate channels according tonum_possible_cpu()dynamically. Moveftrace_exportsroutines up so all ftrace can use them.Tingwei Zhang (6):
stm class: ftrace: change dependency to TRACING
tracing: add flag to control different traces
tracing: addtrace_exportsupport for event trace
tracing: addtrace_exportsupport fortrace_markerstm class: ftrace: enable supported trace export flag stm class: ftrace: use different channel accroding to CPUdrivers/hwtracing/stm/Kconfig | 2 +- drivers/hwtracing/stm/ftrace.c | 7 +- include/linux/trace.h | 7 + kernel/trace/trace.c | 270 ++++++++++++++++++--------------- 4 files changed, 159 insertions(+), 127 deletions(-)Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Quoted 7 lines · Mathieu Poirier
Quoted 3 lines · Tingwei Zhang
Hi Mathieu,
May I know your comments for this patch set?
I do not maintain any of these files.
Sorry for my wrong assumption.
Quoted 46 lines
Quoted 7 lines
Thanks,
TingweiQuoted 2 lines · Tingwei Zhang
Ftrace has ability to export trace packets to other destination. Currently, only function trace can be exported. This series extends
the
Quoted 1 line
Quoted 1 line
support to event trace and
trace_maker. STM is one possibledestination to
Quoted 4 lines
Quoted 4 lines
export ftrace. Use separate channel for each CPU to avoid mixing up packets
from different CPUs together.Quoted 8 lines
Quoted 8 lines
Change from v2:
Change flag definition toBIT(). (Steven)
Add comment instm_ftrace_write()to clarify it's safe to usesmp_processor_id()here since preempt is disabled. (Steven)Change from v1:
All changes are suggested by Steven Rostedt.
User separate flag to control function trace, event trace and tracemark.
Quoted 11 lines
Quoted 11 lines
Allocate channels according to
num_possible_cpu()dynamically. Moveftrace_exportsroutines up so all ftrace can use them.Tingwei Zhang (6):
stm class: ftrace: change dependency to TRACING
tracing: add flag to control different traces
tracing: addtrace_exportsupport for event trace
tracing: addtrace_exportsupport fortrace_markerstm class: ftrace: enable supported trace export flag stm class: ftrace: use different channel accroding to CPUQuoted 4 lines
Quoted 4 lines
drivers/hwtracing/stm/Kconfig | 2 +- drivers/hwtracing/stm/ftrace.c | 7 +- include/linux/trace.h | 7 + kernel/trace/trace.c | 270++++++++++++++++++---------------
Quoted 4 lines
Quoted 4 lines
4 files changed, 159 insertions(+), 127 deletions(-)Signature · 1 line
The Qualcomm Innovation Center, Inc. is a member of the Code AuroraForum,
Quoted 2 lines
Quoted 2 lines
a Linux Foundation Collaborative Project
Hi Alexander,
May I know your comments for this patch set?
Thanks,
Tingwei
Quoted 36 lines · Tingwei Zhang
Ftrace has ability to export trace packets to other destination. Currently, only function trace can be exported. This series extends the support to event trace and
trace_maker. STM is one possible destination to export ftrace. Use separate channel for each CPU to avoid mixing up packets
from different CPUs together.Change from v2:
Change flag definition toBIT(). (Steven)
Add comment instm_ftrace_write()to clarify it's safe to usesmp_processor_id()here since preempt is disabled. (Steven)Change from v1:
All changes are suggested by Steven Rostedt.
User separate flag to control function trace, event trace and trace mark. Allocate channels according tonum_possible_cpu()dynamically. Moveftrace_exportsroutines up so all ftrace can use them.Tingwei Zhang (6):
stm class: ftrace: change dependency to TRACING
tracing: add flag to control different traces
tracing: addtrace_exportsupport for event trace
tracing: addtrace_exportsupport fortrace_markerstm class: ftrace: enable supported trace export flag stm class: ftrace: use different channel accroding to CPUdrivers/hwtracing/stm/Kconfig | 2 +- drivers/hwtracing/stm/ftrace.c | 7 +- include/linux/trace.h | 7 + kernel/trace/trace.c | 270 ++++++++++++++++++--------------- 4 files changed, 159 insertions(+), 127 deletions(-)Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Steven Rostedt
maintainerQuoted 3 lines · On Wed, 2 Sep 2020 07:28:39 +0800 Tingwei Zhang <[email protected]> wrote:
Hi Alexander,
May I know your comments for this patch set?
I ran your patch set against get_maintainers.pl and it came up with this:
Alexander Shishkin <[email protected]> (maintainer:SYSTEM TRACE MODULE CLASS) Maxime Coquelin <[email protected]> (maintainer:ARM/STM32 ARCHITECTURE) Alexandre Torgue <[email protected]> (maintainer:ARM/STM32 ARCHITECTURE) Steven Rostedt <[email protected]> (maintainer:TRACING)
Ingo Molnar <[email protected]> (maintainer:TRACING) [email protected] (moderated list:ARM/STM32 ARCHITECTURE) [email protected] (moderated list:ARM/STM32 ARCHITECTURE) [email protected] (open list)
I would use that to know who to send to.
You have Alexander, myself, Ingo and LKML, but you should add the others in that list for this series, and then it may get noticed. Please use get_maintainers.pl for future patches if you don't know who to send them to.
-- Steve
Quoted 41 lines
Thanks,
TingweiQuoted 36 lines · Tingwei Zhang
Ftrace has ability to export trace packets to other destination. Currently, only function trace can be exported. This series extends the support to event trace and
trace_maker. STM is one possible destination to export ftrace. Use separate channel for each CPU to avoid mixing up packets
from different CPUs together.Change from v2:
Change flag definition toBIT(). (Steven)
Add comment instm_ftrace_write()to clarify it's safe to usesmp_processor_id()here since preempt is disabled. (Steven)Change from v1:
All changes are suggested by Steven Rostedt.
User separate flag to control function trace, event trace and trace mark. Allocate channels according tonum_possible_cpu()dynamically. Moveftrace_exportsroutines up so all ftrace can use them.Tingwei Zhang (6):
stm class: ftrace: change dependency to TRACING
tracing: add flag to control different traces
tracing: addtrace_exportsupport for event trace
tracing: addtrace_exportsupport fortrace_markerstm class: ftrace: enable supported trace export flag stm class: ftrace: use different channel accroding to CPUdrivers/hwtracing/stm/Kconfig | 2 +- drivers/hwtracing/stm/ftrace.c | 7 +- include/linux/trace.h | 7 + kernel/trace/trace.c | 270 ++++++++++++++++++--------------- 4 files changed, 159 insertions(+), 127 deletions(-)Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Quoted 25 lines · Steven Rostedt
Quoted 3 lines · On Wed, 2 Sep 2020 07:28:39 +0800 Tingwei Zhang <[email protected]> wrote:
Hi Alexander,
May I know your comments for this patch set?
I ran your patch set against get_maintainers.pl and it came up with this:
Alexander Shishkin <[email protected]> (maintainer:SYSTEM TRACE MODULE CLASS)
Maxime Coquelin <[email protected]> (maintainer:ARM/STM32 ARCHITECTURE)
Alexandre Torgue <[email protected]> (maintainer:ARM/STM32 ARCHITECTURE)
Steven Rostedt <[email protected]> (maintainer:TRACING)
Ingo Molnar <[email protected]> (maintainer:TRACING) [email protected] (moderated list:ARM/STM32 ARCHITECTURE)
[email protected] (moderated list:ARM/STM32 ARCHITECTURE)
[email protected] (open list)I would use that to know who to send to.
Quoted 8 lines
You have Alexander, myself, Ingo and LKML, but you should add the others in
that list for this series, and then it may get noticed. Please use get_maintainers.pl for future patches if you don't know who to send them to.-- Steve
Thanks a lot for the detail instructions, Steve. I noticed that after senting previous mail to Alexander.
I sent the patchset to maintainers and mail list as you mentioned in
https://patchwork.kernel.org/cover/11752107/.
Thanks,
Tingwei
Quoted 47 lines
Quoted 7 lines
Thanks,
TingweiQuoted 2 lines · Tingwei Zhang
Ftrace has ability to export trace packets to other destination. Currently, only function trace can be exported. This series extends
the
Quoted 1 line
Quoted 1 line
support to event trace and
trace_maker. STM is one possibledestination to
Quoted 4 lines
Quoted 4 lines
export ftrace. Use separate channel for each CPU to avoid mixing up packets
from different CPUs together.Quoted 8 lines
Quoted 8 lines
Change from v2:
Change flag definition toBIT(). (Steven)
Add comment instm_ftrace_write()to clarify it's safe to usesmp_processor_id()here since preempt is disabled. (Steven)Change from v1:
All changes are suggested by Steven Rostedt.
User separate flag to control function trace, event trace and tracemark.
Quoted 11 lines
Quoted 11 lines
Allocate channels according to
num_possible_cpu()dynamically. Moveftrace_exportsroutines up so all ftrace can use them.Tingwei Zhang (6):
stm class: ftrace: change dependency to TRACING
tracing: add flag to control different traces
tracing: addtrace_exportsupport for event trace
tracing: addtrace_exportsupport fortrace_markerstm class: ftrace: enable supported trace export flag stm class: ftrace: use different channel accroding to CPUQuoted 4 lines
Quoted 4 lines
drivers/hwtracing/stm/Kconfig | 2 +- drivers/hwtracing/stm/ftrace.c | 7 +- include/linux/trace.h | 7 + kernel/trace/trace.c | 270++++++++++++++++++---------------
Quoted 4 lines
Quoted 4 lines
4 files changed, 159 insertions(+), 127 deletions(-)Signature · 1 line
The Qualcomm Innovation Center, Inc. is a member of the Code AuroraForum,
Quoted 2 lines
Quoted 2 lines
a Linux Foundation Collaborative Project