summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorPavel Tatashin <pasha.tatashin@oracle.com>2017-06-12 22:41:43 +0200
committerDavid S. Miller <davem@davemloft.net>2017-06-13 00:44:02 +0200
commitb5dd4d807f0fe7da67c5cc67b2ec681b60e4994b (patch)
tree37000602710190390a6ea209b17435fa3c3cdff3 /arch
parentsparc64: access tick function from variable (diff)
downloadlinux-b5dd4d807f0fe7da67c5cc67b2ec681b60e4994b.tar.xz
linux-b5dd4d807f0fe7da67c5cc67b2ec681b60e4994b.zip
sparc64: show time stamps from zero
On most platforms, time is shown from the beginning of boot. This patch is adding offset to sched_clock() for SPARC, to also show time from 0. This means we will have one more load, but we saved one in an ealier patch. Signed-off-by: Pavel Tatashin <pasha.tatashin@oracle.com> Reviewed-by: Bob Picco <bob.picco@oracle.com> Reviewed-by: Steven Sistare <steven.sistare@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch')
-rw-r--r--arch/sparc/kernel/time_64.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/sparc/kernel/time_64.c b/arch/sparc/kernel/time_64.c
index 6724bcbc3526..5f53b74dd493 100644
--- a/arch/sparc/kernel/time_64.c
+++ b/arch/sparc/kernel/time_64.c
@@ -392,6 +392,7 @@ static struct sparc64_tick_ops hbtick_operations __read_mostly = {
};
static unsigned long timer_ticks_per_nsec_quotient __read_mostly;
+static unsigned long timer_offset __read_mostly;
unsigned long cmos_regs;
EXPORT_SYMBOL(cmos_regs);
@@ -786,6 +787,10 @@ void __init time_init(void)
timer_ticks_per_nsec_quotient =
clocksource_hz2mult(freq, SPARC64_NSEC_PER_CYC_SHIFT);
+ timer_offset = (tick_operations.get_tick()
+ * timer_ticks_per_nsec_quotient)
+ >> SPARC64_NSEC_PER_CYC_SHIFT;
+
clocksource_tick.name = tick_operations.name;
clocksource_tick.read = clocksource_tick_read;
@@ -813,8 +818,9 @@ unsigned long long sched_clock(void)
{
unsigned long ticks = tick_operations.get_tick();
- return (ticks * timer_ticks_per_nsec_quotient)
- >> SPARC64_NSEC_PER_CYC_SHIFT;
+ return ((ticks * timer_ticks_per_nsec_quotient)
+ >> SPARC64_NSEC_PER_CYC_SHIFT)
+ - timer_offset;
}
int read_current_timer(unsigned long *timer_val)