From: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> To: Steven Rostedt <rostedt@goodmis.org>, Ingo Molnar <mingo@redhat.com>, Laura Abbott <labbott@redhat.com>, Kees Cook <keescook@chromium.org>, Anton Vorontsov <anton@enomsg.org>, Rob Herring <robh+dt@kernel.org>, devicetree@vger.kernel.org, Colin Cross <ccross@android.com>, Jason Baron <jbaron@akamai.com>, Tony Luck <tony.luck@intel.com>, Arnd Bergmann <arnd@arndb.de>, Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will.deacon@arm.com>, Joel Fernandes <joel@joelfernandes.org>, Masami Hiramatsu <mhiramat@kernel.org>, Joe Perches <joe@perches.com>, Jim Cromie <jim.cromie@gmail.com> Cc: Rajendra Nayak <rnayak@codeaurora.org>, Vivek Gautam <vivek.gautam@codeaurora.org>, Sibi Sankar <sibis@codeaurora.org>, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Ingo Molnar <mingo@kernel.org>, Tom Zanussi <tom.zanussi@linux.intel.com>, Prasad Sodagudi <psodagud@codeaurora.org>, tsoni@codeaurora.org, Bryan Huntsman <bryanh@codeaurora.org>, Tingwei Zhang <tingwei@codeaurora.org>, Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> Subject: [PATCH 4/6] arm64/io: Add tracepoint for register accesses Date: Sun, 9 Sep 2018 01:57:05 +0530 [thread overview] Message-ID: <84677d700f0e894142bf3460292c695bb1a946e4.1536430404.git.saiprakash.ranjan@codeaurora.org> (raw) In-Reply-To: <cover.1536430404.git.saiprakash.ranjan@codeaurora.org> Generic IO read/write i.e., __raw_{read,write}{b,l,w,q} are typically used to read/write from/to memory mapped registers, which can cause hangs or some undefined behaviour if access unclocked. Tracing these register accesses can be very helpful to debug such issues during initial development stages. This can be used later for tracing arm IO register accesses. Sample output format of register access trace is below: io_write: type=writel cpu=3 ts:1424714326 data=0xffff00000d1065a4 caller=qcom_smsm_probe+0x52c/0x678 io_write: type=writel cpu=3 ts:1424962659 data=0xffff00000d106608 caller=qcom_smsm_probe+0x52c/0x678 Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> --- arch/arm64/kernel/io.c | 22 +++++++++++ include/asm-generic/io-trace.h | 70 ++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 include/asm-generic/io-trace.h diff --git a/arch/arm64/kernel/io.c b/arch/arm64/kernel/io.c index 79b17384effa..a9db07f66477 100644 --- a/arch/arm64/kernel/io.c +++ b/arch/arm64/kernel/io.c @@ -19,6 +19,10 @@ #include <linux/export.h> #include <linux/types.h> #include <linux/io.h> +#include <linux/sched/clock.h> + +#define CREATE_TRACE_POINTS +#include <asm-generic/io-trace.h> /* * Copy data from IO memory space to "real" memory space. @@ -106,3 +110,21 @@ void __memset_io(volatile void __iomem *dst, int c, size_t count) } } EXPORT_SYMBOL(__memset_io); + +#if defined(CONFIG_TRACING_EVENTS_IO) +void do_trace_io_write(const char *type, void *addr) +{ + trace_io_write(type, raw_smp_processor_id(), sched_clock(), addr, + _RET_IP_); +} +EXPORT_SYMBOL(do_trace_io_write); +EXPORT_TRACEPOINT_SYMBOL(io_write); + +void do_trace_io_read(const char *type, void *addr) +{ + trace_io_read(type, raw_smp_processor_id(), sched_clock(), addr, + _RET_IP_); +} +EXPORT_SYMBOL(do_trace_io_read); +EXPORT_TRACEPOINT_SYMBOL(io_read); +#endif diff --git a/include/asm-generic/io-trace.h b/include/asm-generic/io-trace.h new file mode 100644 index 000000000000..e57b52d8976a --- /dev/null +++ b/include/asm-generic/io-trace.h @@ -0,0 +1,70 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM io + +#if !defined(CONFIG_TRACING_EVENTS_IO) +#define NOTRACE +#endif + +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE io-trace + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH asm-generic + +#if !defined(_TRACE_IO_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_IO_H + +#include <linux/tracepoint.h> + +/* + * Tracepoint for generic IO read/write, i.e., __raw_{read,write}{b,l,w,q}() + */ +DECLARE_EVENT_CLASS(io_trace_class, + + TP_PROTO(const char *type, int cpu, u64 ts, void *addr, + unsigned long ret_ip), + + TP_ARGS(type, cpu, ts, addr, ret_ip), + + TP_STRUCT__entry( + __string( type, type ) + __field( int, cpu ) + __field( u64, ts ) + __field( void *, addr ) + __field( unsigned long, ret_ip ) + ), + + TP_fast_assign( + __assign_str(type, type); + __entry->cpu = cpu; + __entry->ts = ts; + __entry->addr = addr; + __entry->ret_ip = ret_ip; + ), + + TP_printk("type=%s cpu=%d ts:%llu data=0x%lx caller=%pS", + __get_str(type), __entry->cpu, __entry->ts, + (unsigned long)__entry->addr, (void *)__entry->ret_ip) +); + +DEFINE_EVENT(io_trace_class, io_read, + + TP_PROTO(const char *type, int cpu, u64 ts, void *addr, + unsigned long ret_ip), + + TP_ARGS(type, cpu, ts, addr, ret_ip) +); + +DEFINE_EVENT(io_trace_class, io_write, + + TP_PROTO(const char *type, int cpu, u64 ts, void *addr, + unsigned long ret_ip), + + TP_ARGS(type, cpu, ts, addr, ret_ip) +); + +#endif /* _TRACE_IO_H */ + +/* This part must be outside protection */ +#include <trace/define_trace.h> -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
WARNING: multiple messages have this Message-ID (diff)
From: saiprakash.ranjan@codeaurora.org (Sai Prakash Ranjan) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 4/6] arm64/io: Add tracepoint for register accesses Date: Sun, 9 Sep 2018 01:57:05 +0530 [thread overview] Message-ID: <84677d700f0e894142bf3460292c695bb1a946e4.1536430404.git.saiprakash.ranjan@codeaurora.org> (raw) In-Reply-To: <cover.1536430404.git.saiprakash.ranjan@codeaurora.org> Generic IO read/write i.e., __raw_{read,write}{b,l,w,q} are typically used to read/write from/to memory mapped registers, which can cause hangs or some undefined behaviour if access unclocked. Tracing these register accesses can be very helpful to debug such issues during initial development stages. This can be used later for tracing arm IO register accesses. Sample output format of register access trace is below: io_write: type=writel cpu=3 ts:1424714326 data=0xffff00000d1065a4 caller=qcom_smsm_probe+0x52c/0x678 io_write: type=writel cpu=3 ts:1424962659 data=0xffff00000d106608 caller=qcom_smsm_probe+0x52c/0x678 Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> --- arch/arm64/kernel/io.c | 22 +++++++++++ include/asm-generic/io-trace.h | 70 ++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 include/asm-generic/io-trace.h diff --git a/arch/arm64/kernel/io.c b/arch/arm64/kernel/io.c index 79b17384effa..a9db07f66477 100644 --- a/arch/arm64/kernel/io.c +++ b/arch/arm64/kernel/io.c @@ -19,6 +19,10 @@ #include <linux/export.h> #include <linux/types.h> #include <linux/io.h> +#include <linux/sched/clock.h> + +#define CREATE_TRACE_POINTS +#include <asm-generic/io-trace.h> /* * Copy data from IO memory space to "real" memory space. @@ -106,3 +110,21 @@ void __memset_io(volatile void __iomem *dst, int c, size_t count) } } EXPORT_SYMBOL(__memset_io); + +#if defined(CONFIG_TRACING_EVENTS_IO) +void do_trace_io_write(const char *type, void *addr) +{ + trace_io_write(type, raw_smp_processor_id(), sched_clock(), addr, + _RET_IP_); +} +EXPORT_SYMBOL(do_trace_io_write); +EXPORT_TRACEPOINT_SYMBOL(io_write); + +void do_trace_io_read(const char *type, void *addr) +{ + trace_io_read(type, raw_smp_processor_id(), sched_clock(), addr, + _RET_IP_); +} +EXPORT_SYMBOL(do_trace_io_read); +EXPORT_TRACEPOINT_SYMBOL(io_read); +#endif diff --git a/include/asm-generic/io-trace.h b/include/asm-generic/io-trace.h new file mode 100644 index 000000000000..e57b52d8976a --- /dev/null +++ b/include/asm-generic/io-trace.h @@ -0,0 +1,70 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM io + +#if !defined(CONFIG_TRACING_EVENTS_IO) +#define NOTRACE +#endif + +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE io-trace + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH asm-generic + +#if !defined(_TRACE_IO_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_IO_H + +#include <linux/tracepoint.h> + +/* + * Tracepoint for generic IO read/write, i.e., __raw_{read,write}{b,l,w,q}() + */ +DECLARE_EVENT_CLASS(io_trace_class, + + TP_PROTO(const char *type, int cpu, u64 ts, void *addr, + unsigned long ret_ip), + + TP_ARGS(type, cpu, ts, addr, ret_ip), + + TP_STRUCT__entry( + __string( type, type ) + __field( int, cpu ) + __field( u64, ts ) + __field( void *, addr ) + __field( unsigned long, ret_ip ) + ), + + TP_fast_assign( + __assign_str(type, type); + __entry->cpu = cpu; + __entry->ts = ts; + __entry->addr = addr; + __entry->ret_ip = ret_ip; + ), + + TP_printk("type=%s cpu=%d ts:%llu data=0x%lx caller=%pS", + __get_str(type), __entry->cpu, __entry->ts, + (unsigned long)__entry->addr, (void *)__entry->ret_ip) +); + +DEFINE_EVENT(io_trace_class, io_read, + + TP_PROTO(const char *type, int cpu, u64 ts, void *addr, + unsigned long ret_ip), + + TP_ARGS(type, cpu, ts, addr, ret_ip) +); + +DEFINE_EVENT(io_trace_class, io_write, + + TP_PROTO(const char *type, int cpu, u64 ts, void *addr, + unsigned long ret_ip), + + TP_ARGS(type, cpu, ts, addr, ret_ip) +); + +#endif /* _TRACE_IO_H */ + +/* This part must be outside protection */ +#include <trace/define_trace.h> -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
next prev parent reply other threads:[~2018-09-08 20:27 UTC|newest] Thread overview: 141+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-09-08 20:27 [PATCH 0/6] Tracing register accesses with pstore and dynamic debug Sai Prakash Ranjan 2018-09-08 20:27 ` Sai Prakash Ranjan 2018-09-08 20:27 ` [PATCH 1/6] dt-bindings: ramoops: Add event-size property Sai Prakash Ranjan 2018-09-08 20:27 ` Sai Prakash Ranjan 2018-09-17 5:45 ` Rob Herring 2018-09-17 5:45 ` Rob Herring 2018-09-17 17:15 ` Sai Prakash Ranjan 2018-09-17 17:15 ` Sai Prakash Ranjan 2018-09-08 20:27 ` [PATCH 2/6] pstore: Add event tracing support Sai Prakash Ranjan 2018-09-08 20:27 ` Sai Prakash Ranjan 2018-09-11 10:46 ` Sai Prakash Ranjan 2018-09-11 10:46 ` Sai Prakash Ranjan 2018-09-17 17:38 ` Stephen Boyd 2018-09-17 17:38 ` Stephen Boyd 2018-09-17 19:43 ` Sai Prakash Ranjan 2018-09-17 19:43 ` Sai Prakash Ranjan 2018-09-16 7:07 ` Sai Prakash Ranjan 2018-09-16 7:07 ` Sai Prakash Ranjan 2018-09-16 13:55 ` Joel Fernandes 2018-09-17 14:54 ` Kees Cook 2018-09-17 14:54 ` Kees Cook 2018-09-17 14:54 ` Kees Cook 2018-09-17 17:17 ` Sai Prakash Ranjan 2018-09-17 17:17 ` Sai Prakash Ranjan 2018-09-17 17:17 ` Sai Prakash Ranjan 2018-09-17 17:13 ` Sai Prakash Ranjan 2018-09-17 17:13 ` Sai Prakash Ranjan 2018-09-17 17:13 ` Sai Prakash Ranjan 2018-09-17 23:04 ` Steven Rostedt 2018-09-17 23:04 ` Steven Rostedt 2018-09-17 23:04 ` Steven Rostedt 2018-09-18 6:24 ` Sai Prakash Ranjan 2018-09-18 6:24 ` Sai Prakash Ranjan 2018-09-18 6:24 ` Sai Prakash Ranjan 2018-09-17 23:34 ` Steven Rostedt 2018-09-17 23:34 ` Steven Rostedt 2018-09-17 23:34 ` Steven Rostedt 2018-09-18 17:52 ` Sai Prakash Ranjan 2018-09-18 17:52 ` Sai Prakash Ranjan 2018-09-18 17:52 ` Sai Prakash Ranjan 2018-09-18 20:44 ` Steven Rostedt 2018-09-18 20:44 ` Steven Rostedt 2018-09-18 20:44 ` Steven Rostedt 2018-09-18 21:13 ` Sai Prakash Ranjan 2018-09-18 21:13 ` Sai Prakash Ranjan 2018-09-18 21:13 ` Sai Prakash Ranjan 2018-09-22 6:48 ` Sai Prakash Ranjan 2018-09-22 6:48 ` Sai Prakash Ranjan 2018-09-22 6:48 ` Sai Prakash Ranjan 2018-09-22 9:05 ` Joel Fernandes 2018-09-22 9:05 ` Joel Fernandes 2018-09-22 9:05 ` Joel Fernandes 2018-09-22 16:37 ` Sai Prakash Ranjan 2018-09-22 16:37 ` Sai Prakash Ranjan 2018-09-22 16:37 ` Sai Prakash Ranjan 2018-09-22 17:32 ` Sai Prakash Ranjan 2018-09-22 17:32 ` Sai Prakash Ranjan 2018-09-22 17:32 ` Sai Prakash Ranjan 2018-09-22 17:45 ` Sai Prakash Ranjan 2018-09-22 17:45 ` Sai Prakash Ranjan 2018-09-22 17:45 ` Sai Prakash Ranjan 2018-09-23 15:33 ` Sai Prakash Ranjan 2018-09-23 15:33 ` Sai Prakash Ranjan 2018-09-23 15:33 ` Sai Prakash Ranjan 2018-09-25 20:37 ` Joel Fernandes 2018-09-25 20:37 ` Joel Fernandes 2018-09-25 20:37 ` Joel Fernandes 2018-09-25 20:39 ` Joel Fernandes 2018-09-25 20:39 ` Joel Fernandes 2018-09-25 20:39 ` Joel Fernandes 2018-09-25 20:40 ` Joel Fernandes 2018-09-25 20:40 ` Joel Fernandes 2018-09-25 20:40 ` Joel Fernandes 2018-09-26 9:52 ` Sai Prakash Ranjan 2018-09-26 9:52 ` Sai Prakash Ranjan 2018-09-26 9:52 ` Sai Prakash Ranjan 2018-09-08 20:27 ` [PATCH 3/6] tracing: Add tp_pstore cmdline to have tracepoints go to pstore Sai Prakash Ranjan 2018-09-08 20:27 ` Sai Prakash Ranjan 2018-09-25 21:25 ` Joel Fernandes 2018-09-25 21:25 ` Joel Fernandes 2018-09-25 21:25 ` Joel Fernandes 2018-09-26 9:46 ` Sai Prakash Ranjan 2018-09-26 9:46 ` Sai Prakash Ranjan 2018-09-26 9:46 ` Sai Prakash Ranjan 2018-10-08 14:16 ` Sai Prakash Ranjan 2018-10-08 14:16 ` Sai Prakash Ranjan 2018-10-08 14:16 ` Sai Prakash Ranjan 2018-10-08 14:36 ` Steven Rostedt 2018-10-08 14:36 ` Steven Rostedt 2018-10-08 14:36 ` Steven Rostedt 2018-10-08 22:40 ` Joel Fernandes 2018-10-08 22:40 ` Joel Fernandes 2018-10-08 22:40 ` Joel Fernandes 2018-10-09 18:22 ` Sai Prakash Ranjan 2018-10-09 18:22 ` Sai Prakash Ranjan 2018-10-09 18:22 ` Sai Prakash Ranjan 2018-10-10 19:37 ` Steven Rostedt 2018-10-10 19:37 ` Steven Rostedt 2018-10-10 19:37 ` Steven Rostedt 2018-09-08 20:27 ` Sai Prakash Ranjan [this message] 2018-09-08 20:27 ` [PATCH 4/6] arm64/io: Add tracepoint for register accesses Sai Prakash Ranjan 2018-09-08 20:27 ` [PATCH 5/6] arm64/io: Add header for instrumentation of io operations Sai Prakash Ranjan 2018-09-08 20:27 ` Sai Prakash Ranjan 2018-09-17 23:39 ` Steven Rostedt 2018-09-17 23:39 ` Steven Rostedt 2018-09-17 23:39 ` Steven Rostedt 2018-09-18 7:10 ` Sai Prakash Ranjan 2018-09-18 7:10 ` Sai Prakash Ranjan 2018-09-18 7:10 ` Sai Prakash Ranjan 2018-09-18 11:47 ` Will Deacon 2018-09-18 11:47 ` Will Deacon 2018-09-18 11:47 ` Will Deacon 2018-09-18 12:43 ` Sai Prakash Ranjan 2018-09-18 12:43 ` Sai Prakash Ranjan 2018-09-18 12:43 ` Sai Prakash Ranjan 2018-09-08 20:27 ` [PATCH 6/6] dynamic_debug: Add flag for dynamic event tracing Sai Prakash Ranjan 2018-09-08 20:27 ` Sai Prakash Ranjan 2018-09-11 15:11 ` [PATCH 0/6] Tracing register accesses with pstore and dynamic debug Will Deacon 2018-09-11 15:11 ` Will Deacon 2018-09-11 15:11 ` Will Deacon 2018-09-11 16:11 ` Sai Prakash Ranjan 2018-09-11 16:11 ` Sai Prakash Ranjan 2018-09-11 16:11 ` Sai Prakash Ranjan 2018-10-20 5:25 ` Joel Fernandes 2018-10-20 5:25 ` Joel Fernandes 2018-10-20 5:25 ` Joel Fernandes 2018-10-20 6:32 ` Sai Prakash Ranjan 2018-10-20 6:32 ` Sai Prakash Ranjan 2018-10-20 6:32 ` Sai Prakash Ranjan 2018-10-20 16:27 ` Joel Fernandes 2018-10-20 16:27 ` Joel Fernandes 2018-10-20 16:27 ` Joel Fernandes 2018-10-21 3:46 ` Sai Prakash Ranjan 2018-10-21 3:46 ` Sai Prakash Ranjan 2018-10-21 3:46 ` Sai Prakash Ranjan 2018-10-21 4:59 ` Sai Prakash Ranjan 2018-10-21 4:59 ` Sai Prakash Ranjan 2018-10-21 4:59 ` Sai Prakash Ranjan 2018-10-21 5:09 ` Joel Fernandes 2018-10-21 5:09 ` Joel Fernandes 2018-10-21 5:09 ` Joel Fernandes
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=84677d700f0e894142bf3460292c695bb1a946e4.1536430404.git.saiprakash.ranjan@codeaurora.org \ --to=saiprakash.ranjan@codeaurora.org \ --cc=anton@enomsg.org \ --cc=arnd@arndb.de \ --cc=bryanh@codeaurora.org \ --cc=catalin.marinas@arm.com \ --cc=ccross@android.com \ --cc=devicetree@vger.kernel.org \ --cc=gregkh@linuxfoundation.org \ --cc=jbaron@akamai.com \ --cc=jim.cromie@gmail.com \ --cc=joe@perches.com \ --cc=joel@joelfernandes.org \ --cc=keescook@chromium.org \ --cc=labbott@redhat.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mhiramat@kernel.org \ --cc=mingo@kernel.org \ --cc=mingo@redhat.com \ --cc=psodagud@codeaurora.org \ --cc=rnayak@codeaurora.org \ --cc=robh+dt@kernel.org \ --cc=rostedt@goodmis.org \ --cc=sibis@codeaurora.org \ --cc=tingwei@codeaurora.org \ --cc=tom.zanussi@linux.intel.com \ --cc=tony.luck@intel.com \ --cc=tsoni@codeaurora.org \ --cc=vivek.gautam@codeaurora.org \ --cc=will.deacon@arm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.