From: Leo Yan <leo.yan@linaro.org>
To: Peter Zijlstra <peterz@infradead.org>,
Will Deacon <will@kernel.org>, Marc Zyngier <maz@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Thomas Gleixner <tglx@linutronix.de>,
Allison Randal <allison@lohutok.net>,
Alexios Zavras <alexios.zavras@intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Kate Stewart <kstewart@linuxfoundation.org>,
Enrico Weigelt <info@metux.net>,
"Ahmed S. Darwish" <a.darwish@linutronix.de>,
Paul Cercueil <paul@crapouillou.net>,
"Ben Dooks (Codethink)" <ben.dooks@codethink.co.uk>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Cc: Leo Yan <leo.yan@linaro.org>
Subject: [PATCH v2 2/3] clocksource/drivers/arm_arch_timer: Handle time offset prior to epoch
Date: Tue, 5 May 2020 21:55:43 +0800 [thread overview]
Message-ID: <20200505135544.6003-3-leo.yan@linaro.org> (raw)
In-Reply-To: <20200505135544.6003-1-leo.yan@linaro.org>
Since arch timer can be enabled at any time during boot, this patch
changes to invoke variant sched_clock_register_epoch() so it can
retrieve time offset prior to epoch (in nanosecond).
Arch timer driver doesn't directly use this time offset, but it needs to
pass this value to Perf framework to allow Perf tool to use it for
timestamp calibration. For this purpose, this patch introduces an API
arch_timer_get_epoch_offset() which returns the time offset for arch
timer's counter.
Signed-off-by: Leo Yan <leo.yan@linaro.org>
---
drivers/clocksource/arm_arch_timer.c | 10 +++++++++-
include/clocksource/arm_arch_timer.h | 6 ++++++
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index 2204a444e801..10d0b15a7674 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -78,6 +78,8 @@ static enum vdso_clock_mode vdso_default = VDSO_CLOCKMODE_NONE;
static cpumask_t evtstrm_available = CPU_MASK_NONE;
static bool evtstrm_enable = IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM);
+static u64 epoch_offset;
+
static int __init early_evtstrm_cfg(char *buf)
{
return strtobool(buf, &evtstrm_enable);
@@ -942,6 +944,11 @@ u32 arch_timer_get_rate(void)
return arch_timer_rate;
}
+u64 arch_timer_get_epoch_offset(void)
+{
+ return epoch_offset;
+}
+
bool arch_timer_evtstrm_available(void)
{
/*
@@ -1009,7 +1016,8 @@ static void __init arch_counter_register(unsigned type)
&cyclecounter, start_count);
/* 56 bits minimum, so we assume worst case rollover */
- sched_clock_register(arch_timer_read_counter, 56, arch_timer_rate);
+ sched_clock_register_epoch(arch_timer_read_counter, 56,
+ arch_timer_rate, &epoch_offset);
}
static void arch_timer_stop(struct clock_event_device *clk)
diff --git a/include/clocksource/arm_arch_timer.h b/include/clocksource/arm_arch_timer.h
index 1d68d5613dae..a566e82a40ba 100644
--- a/include/clocksource/arm_arch_timer.h
+++ b/include/clocksource/arm_arch_timer.h
@@ -83,6 +83,7 @@ struct arch_timer_mem {
#ifdef CONFIG_ARM_ARCH_TIMER
extern u32 arch_timer_get_rate(void);
+extern u64 arch_timer_get_epoch_offset(void);
extern u64 (*arch_timer_read_counter)(void);
extern struct arch_timer_kvm_info *arch_timer_get_kvm_info(void);
extern bool arch_timer_evtstrm_available(void);
@@ -94,6 +95,11 @@ static inline u32 arch_timer_get_rate(void)
return 0;
}
+static inline u64 arch_timer_get_epoch_offset(void)
+{
+ return 0;
+}
+
static inline u64 arch_timer_read_counter(void)
{
return 0;
--
2.17.1
next prev parent reply other threads:[~2020-05-05 13:56 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-05 13:55 [PATCH v2 0/3] arm64: perf_event: Fix " Leo Yan
2020-05-05 13:55 ` [PATCH v2 1/3] time/sched_clock: Add new variant sched_clock_register_epoch() Leo Yan
2020-05-05 13:55 ` Leo Yan [this message]
2020-05-05 13:55 ` [PATCH v2 3/3] arm64: perf_event: Fix time_offset for arch timer Leo Yan
2020-05-11 9:22 ` [PATCH v2 0/3] arm64: perf_event: Fix time offset prior to epoch Peter Zijlstra
2020-05-11 9:25 ` Peter Zijlstra
2020-05-12 6:38 ` Leo Yan
2020-05-12 8:57 ` Peter Zijlstra
2020-05-12 9:19 ` Peter Zijlstra
2020-05-12 10:01 ` Mark Rutland
2020-05-12 11:21 ` Peter Zijlstra
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=20200505135544.6003-3-leo.yan@linaro.org \
--to=leo.yan@linaro.org \
--cc=a.darwish@linutronix.de \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=alexios.zavras@intel.com \
--cc=allison@lohutok.net \
--cc=ben.dooks@codethink.co.uk \
--cc=catalin.marinas@arm.com \
--cc=daniel.lezcano@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=info@metux.net \
--cc=jolsa@redhat.com \
--cc=kstewart@linuxfoundation.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=paul@crapouillou.net \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=will@kernel.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
all inboxes | Powered by JetHome®