From: daniel.lezcano@linaro.org (Daniel Lezcano)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/4] tracepoint: add generic tracepoint definitions for IPI tracing
Date: Wed, 23 Jul 2014 15:24:07 +0200 [thread overview]
Message-ID: <53CFB777.6070308@linaro.org> (raw)
In-Reply-To: <1405660735-13408-2-git-send-email-nicolas.pitre@linaro.org>
On 07/18/2014 07:18 AM, Nicolas Pitre wrote:
> The Inter Processor Interrupt is used to make another processor do a
> specific action such as rescheduling tasks, signal a timer event or
> execute something in another CPU's context. IRQs are already traceable
> but IPIs were not. Tracing them is useful for monitoring IPI latency,
> or to verify when they are the source of CPU wake-ups with power
> management implications.
>
> Three trace hooks are defined: ipi_raise, ipi_entry and ipi_exit. To make
> them portable, a string is used to identify them and correlate related
> events. Additionally, ipi_raise records a bitmask representing targeted
> CPUs.
>
> Signed-off-by: Nicolas Pitre <nico@linaro.org>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> ---
> include/trace/events/ipi.h | 89 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 89 insertions(+)
> create mode 100644 include/trace/events/ipi.h
>
> diff --git a/include/trace/events/ipi.h b/include/trace/events/ipi.h
> new file mode 100644
> index 0000000000..834a7362a6
> --- /dev/null
> +++ b/include/trace/events/ipi.h
> @@ -0,0 +1,89 @@
> +#undef TRACE_SYSTEM
> +#define TRACE_SYSTEM ipi
> +
> +#if !defined(_TRACE_IPI_H) || defined(TRACE_HEADER_MULTI_READ)
> +#define _TRACE_IPI_H
> +
> +#include <linux/tracepoint.h>
> +
> +/**
> + * ipi_raise - called when a smp cross call is made
> + *
> + * @mask: mask of recipient CPUs for the IPI
> + * @reason: string identifying the IPI purpose
> + *
> + * It is necessary for @reason to be a static string declared with
> + * __tracepoint_string.
> + */
> +TRACE_EVENT(ipi_raise,
> +
> + TP_PROTO(const struct cpumask *mask, const char *reason),
> +
> + TP_ARGS(mask, reason),
> +
> + TP_STRUCT__entry(
> + __bitmask(target_cpus, nr_cpumask_bits)
> + __field(const char *, reason)
> + ),
> +
> + TP_fast_assign(
> + __assign_bitmask(target_cpus, cpumask_bits(mask), nr_cpumask_bits);
> + __entry->reason = reason;
> + ),
> +
> + TP_printk("target_mask=%s (%s)", __get_bitmask(target_cpus), __entry->reason)
> +);
> +
> +DECLARE_EVENT_CLASS(ipi_handler,
> +
> + TP_PROTO(const char *reason),
> +
> + TP_ARGS(reason),
> +
> + TP_STRUCT__entry(
> + __field(const char *, reason)
> + ),
> +
> + TP_fast_assign(
> + __entry->reason = reason;
> + ),
> +
> + TP_printk("(%s)", __entry->reason)
> +);
> +
> +/**
> + * ipi_entry - called immediately before the IPI handler
> + *
> + * @reason: string identifying the IPI purpose
> + *
> + * It is necessary for @reason to be a static string declared with
> + * __tracepoint_string, ideally the same as used with trace_ipi_raise
> + * for that IPI.
> + */
> +DEFINE_EVENT(ipi_handler, ipi_entry,
> +
> + TP_PROTO(const char *reason),
> +
> + TP_ARGS(reason)
> +);
> +
> +/**
> + * ipi_exit - called immediately after the IPI handler returns
> + *
> + * @reason: string identifying the IPI purpose
> + *
> + * It is necessary for @reason to be a static string declared with
> + * __tracepoint_string, ideally the same as used with trace_ipi_raise for
> + * that IPI.
> + */
> +DEFINE_EVENT(ipi_handler, ipi_exit,
> +
> + TP_PROTO(const char *reason),
> +
> + TP_ARGS(reason)
> +);
> +
> +#endif /* _TRACE_IPI_H */
> +
> +/* This part must be outside protection */
> +#include <trace/define_trace.h>
>
--
<http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
next prev parent reply other threads:[~2014-07-23 13:24 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-18 5:18 [PATCH 0/4] basic IPI tracing Nicolas Pitre
2014-07-18 5:18 ` [PATCH 1/4] tracepoint: add generic tracepoint definitions for " Nicolas Pitre
2014-07-23 13:24 ` Daniel Lezcano [this message]
2014-07-18 5:18 ` [PATCH 2/4] ARM: add IPI tracepoints Nicolas Pitre
2014-07-18 20:04 ` Steven Rostedt
2014-07-18 20:55 ` Nicolas Pitre
2014-07-18 21:22 ` Steven Rostedt
2014-07-19 2:55 ` Nicolas Pitre
2014-07-19 3:30 ` Steven Rostedt
2014-07-19 19:10 ` Ard Biesheuvel
2014-07-19 20:28 ` Steven Rostedt
2014-07-19 20:50 ` Ard Biesheuvel
2014-07-19 21:56 ` Steven Rostedt
2014-07-19 21:59 ` Nicolas Pitre
2014-07-23 22:18 ` Nicolas Pitre
2014-07-18 5:18 ` [PATCH 3/4] ARM64: " Nicolas Pitre
2014-07-21 10:36 ` Catalin Marinas
2014-07-18 5:18 ` [PATCH 4/4] (RFC) X86: " Nicolas Pitre
2014-07-18 20:27 ` Steven Rostedt
2014-07-18 20:59 ` Nicolas Pitre
2014-07-21 22:54 ` Steven Rostedt
2014-07-23 22:00 ` Nicolas Pitre
2014-07-20 20:25 ` Davidlohr Bueso
2014-07-21 22:35 ` Nicolas Pitre
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=53CFB777.6070308@linaro.org \
--to=daniel.lezcano@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).