Messages in this thread | | | Date | Wed, 23 Jul 2014 15:24:07 +0200 | From | Daniel Lezcano <> | Subject | Re: [PATCH 1/4] tracepoint: add generic tracepoint definitions for IPI tracing |
| |
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
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |