All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Ahern <dsahern@gmail.com>
To: Thomas Gleixner <tglx@linutronix.de>, John Stultz <johnstul@us.ibm.com>
Cc: linux-kernel@vger.kernel.org, Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [PATCH] timekeeping: Add tracepoints for xtime changes - v2
Date: Tue, 26 Mar 2013 07:44:56 -0600	[thread overview]
Message-ID: <5151A658.5040702@gmail.com> (raw)
In-Reply-To: <1363710477-4203-1-git-send-email-dsahern@gmail.com>

ping... any comments or opinions on the tracepoints?

On 3/19/13 10:27 AM, David Ahern wrote:
> One component of tracking perf_clock timestamps to time-of-day is
> updates to xtime by a user or ntpd. To that end this patch adds
> tracepoints to the timekeeping code as suggested by Thomas:
> https://lkml.org/lkml/2011/3/2/186
>
> v2: use timekeeping_get_ns to retrieve nsec component
>
> Signed-off-by: David Ahern <dsahern@gmail.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: John Stultz <johnstul@us.ibm.com>
> Cc: Steven Rostedt <rostedt@goodmis.org>
> ---
>   include/trace/events/timekeeping.h |   51 ++++++++++++++++++++++++++++++++++++
>   kernel/time/timekeeping.c          |   11 ++++++++
>   2 files changed, 62 insertions(+)
>   create mode 100644 include/trace/events/timekeeping.h
>
> diff --git a/include/trace/events/timekeeping.h b/include/trace/events/timekeeping.h
> new file mode 100644
> index 0000000..ff7a631
> --- /dev/null
> +++ b/include/trace/events/timekeeping.h
> @@ -0,0 +1,51 @@
> +#undef TRACE_SYSTEM
> +#define TRACE_SYSTEM timekeeping
> +
> +#if !defined(_TRACE_TIMEKEEP_H) || defined(TRACE_HEADER_MULTI_READ)
> +#define _TRACE_TIMEKEEP_H
> +
> +#include <linux/tracepoint.h>
> +#include <linux/time.h>
> +
> +DECLARE_EVENT_CLASS(xtime_template,
> +
> +	TP_PROTO(u64 sec, u64 nsec),
> +
> +	TP_ARGS(sec, nsec),
> +
> +	TP_STRUCT__entry(
> +		__field( u64,	sec)
> +		__field( u64,	nsec)
> +	),
> +
> +	TP_fast_assign(
> +		__entry->sec  = sec;
> +		__entry->nsec = nsec;
> +	),
> +
> +	TP_printk("sec=%Lu nsec=%Lu", __entry->sec, __entry->nsec)
> +);
> +
> +DEFINE_EVENT(xtime_template, do_settimeofday,
> +	TP_PROTO(u64 sec, u64 nsec),
> +	TP_ARGS(sec, nsec));
> +
> +DEFINE_EVENT(xtime_template, timekeeping_inject_offset,
> +	TP_PROTO(u64 sec, u64 nsec),
> +	TP_ARGS(sec, nsec));
> +
> +DEFINE_EVENT(xtime_template, timekeeping_inject_sleeptime,
> +	TP_PROTO(u64 sec, u64 nsec),
> +	TP_ARGS(sec, nsec));
> +
> +DEFINE_EVENT(xtime_template, timekeeping_resume,
> +	TP_PROTO(u64 sec, u64 nsec),
> +	TP_ARGS(sec, nsec));
> +
> +DEFINE_EVENT(xtime_template, change_clocksource,
> +	TP_PROTO(u64 sec, u64 nsec),
> +	TP_ARGS(sec, nsec));
> +#endif /*  _TRACE_TIMEKEEP_H */
> +
> +/* This part must be outside protection */
> +#include <trace/define_trace.h>
> diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
> index 9a0bc98..0ce45ec 100644
> --- a/kernel/time/timekeeping.c
> +++ b/kernel/time/timekeeping.c
> @@ -23,6 +23,8 @@
>   #include <linux/stop_machine.h>
>   #include <linux/pvclock_gtod.h>
>
> +#define CREATE_TRACE_POINTS
> +#include <trace/events/timekeeping.h>
>
>   static struct timekeeper timekeeper;
>
> @@ -462,6 +464,8 @@ int do_settimeofday(const struct timespec *tv)
>
>   	timekeeping_update(tk, true);
>
> +	trace_do_settimeofday(tk->xtime_sec, timekeeping_get_ns(tk));
> +
>   	write_sequnlock_irqrestore(&tk->lock, flags);
>
>   	/* signal hrtimers about time change */
> @@ -504,6 +508,8 @@ int timekeeping_inject_offset(struct timespec *ts)
>   error: /* even if we error out, we forwarded the time, so call update */
>   	timekeeping_update(tk, true);
>
> +	trace_timekeeping_inject_offset(tk->xtime_sec, timekeeping_get_ns(tk));
> +
>   	write_sequnlock_irqrestore(&tk->lock, flags);
>
>   	/* signal hrtimers about time change */
> @@ -536,6 +542,7 @@ static int change_clocksource(void *data)
>   			old->disable(old);
>   	}
>   	timekeeping_update(tk, true);
> +	trace_change_clocksource(tk->xtime_sec, timekeeping_get_ns(tk));
>
>   	write_sequnlock_irqrestore(&tk->lock, flags);
>
> @@ -772,6 +779,9 @@ void timekeeping_inject_sleeptime(struct timespec *delta)
>
>   	timekeeping_update(tk, true);
>
> +	trace_timekeeping_inject_sleeptime(tk->xtime_sec,
> +					   timekeeping_get_ns(tk));
> +
>   	write_sequnlock_irqrestore(&tk->lock, flags);
>
>   	/* signal hrtimers about time change */
> @@ -807,6 +817,7 @@ static void timekeeping_resume(void)
>   	tk->ntp_error = 0;
>   	timekeeping_suspended = 0;
>   	timekeeping_update(tk, false);
> +	trace_timekeeping_resume(tk->xtime_sec, timekeeping_get_ns(tk));
>   	write_sequnlock_irqrestore(&tk->lock, flags);
>
>   	touch_softlockup_watchdog();
>


  reply	other threads:[~2013-03-26 13:45 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-19 16:27 [PATCH] timekeeping: Add tracepoints for xtime changes - v2 David Ahern
2013-03-26 13:44 ` David Ahern [this message]
     [not found] ` <CANcMJZCJK_8r6y0MbhhgyTkk=7dMOFZO-KkeVy4MLE5PZxEZqg@mail.gmail.com>
2013-04-01 21:58   ` David Ahern
2013-04-01 22:16     ` John Stultz
2013-04-01 22:47       ` David Ahern

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=5151A658.5040702@gmail.com \
    --to=dsahern@gmail.com \
    --cc=johnstul@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /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 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.