]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Oct 2016 15:35:54 +0000 (17:35 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Oct 2016 15:35:54 +0000 (17:35 +0200)
added patches:
time-add-cycles-to-nanoseconds-translation.patch

queue-4.4/series
queue-4.4/time-add-cycles-to-nanoseconds-translation.patch [new file with mode: 0644]
queue-4.4/timekeeping-fix-__ktime_get_fast_ns-regression.patch

index e1f5408df023da3d16bfe88714ed940f18750b13..34f717a6c172fa8ba75ea05a3f783ee7c7052660 100644 (file)
@@ -1 +1,2 @@
+time-add-cycles-to-nanoseconds-translation.patch
 timekeeping-fix-__ktime_get_fast_ns-regression.patch
diff --git a/queue-4.4/time-add-cycles-to-nanoseconds-translation.patch b/queue-4.4/time-add-cycles-to-nanoseconds-translation.patch
new file mode 100644 (file)
index 0000000..60663f1
--- /dev/null
@@ -0,0 +1,78 @@
+From 6bd58f09e1d8cc6c50a824c00bf0d617919986a1 Mon Sep 17 00:00:00 2001
+From: "Christopher S. Hall" <christopher.s.hall@intel.com>
+Date: Mon, 22 Feb 2016 03:15:19 -0800
+Subject: time: Add cycles to nanoseconds translation
+
+From: Christopher S. Hall <christopher.s.hall@intel.com>
+
+commit 6bd58f09e1d8cc6c50a824c00bf0d617919986a1 upstream.
+
+The timekeeping code does not currently provide a way to translate
+externally provided clocksource cycles to system time. The cycle count
+is always provided by the result clocksource read() method internal to
+the timekeeping code. The added function timekeeping_cycles_to_ns()
+calculated a nanosecond value from a cycle count that can be added to
+tk_read_base.base value yielding the current system time. This allows
+clocksource cycle values external to the timekeeping code to provide a
+cycle count that can be transformed to system time.
+
+Cc: Prarit Bhargava <prarit@redhat.com>
+Cc: Richard Cochran <richardcochran@gmail.com>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Ingo Molnar <mingo@kernel.org>
+Cc: Andy Lutomirski <luto@amacapital.net>
+Cc: kevin.b.stanton@intel.com
+Cc: kevin.j.clarke@intel.com
+Cc: hpa@zytor.com
+Cc: jeffrey.t.kirsher@intel.com
+Cc: netdev@vger.kernel.org
+Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Christopher S. Hall <christopher.s.hall@intel.com>
+Signed-off-by: John Stultz <john.stultz@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/time/timekeeping.c |   25 +++++++++++++++++++++----
+ 1 file changed, 21 insertions(+), 4 deletions(-)
+
+--- a/kernel/time/timekeeping.c
++++ b/kernel/time/timekeeping.c
+@@ -298,17 +298,34 @@ u32 (*arch_gettimeoffset)(void) = defaul
+ static inline u32 arch_gettimeoffset(void) { return 0; }
+ #endif
++static inline s64 timekeeping_delta_to_ns(struct tk_read_base *tkr,
++                                        cycle_t delta)
++{
++      s64 nsec;
++
++      nsec = delta * tkr->mult + tkr->xtime_nsec;
++      nsec >>= tkr->shift;
++
++      /* If arch requires, add in get_arch_timeoffset() */
++      return nsec + arch_gettimeoffset();
++}
++
+ static inline s64 timekeeping_get_ns(struct tk_read_base *tkr)
+ {
+       cycle_t delta;
+-      s64 nsec;
+       delta = timekeeping_get_delta(tkr);
++      return timekeeping_delta_to_ns(tkr, delta);
++}
+-      nsec = (delta * tkr->mult + tkr->xtime_nsec) >> tkr->shift;
++static inline s64 timekeeping_cycles_to_ns(struct tk_read_base *tkr,
++                                          cycle_t cycles)
++{
++      cycle_t delta;
+-      /* If arch requires, add in get_arch_timeoffset() */
+-      return nsec + arch_gettimeoffset();
++      /* calculate the delta since the last update_wall_time */
++      delta = clocksource_delta(cycles, tkr->cycle_last, tkr->mask);
++      return timekeeping_delta_to_ns(tkr, delta);
+ }
+ /**
index f931f9c6715925e87c90aa3b6af84492398ca5ad..44f30634b1f6bf93c04bd928e6078e649f40f1e5 100644 (file)
@@ -68,7 +68,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
 --- a/kernel/time/timekeeping.c
 +++ b/kernel/time/timekeeping.c
-@@ -385,8 +385,11 @@ static __always_inline u64 __ktime_get_f
+@@ -402,8 +402,11 @@ static __always_inline u64 __ktime_get_f
                tkr = tkf->base + (seq & 0x01);
                now = ktime_to_ns(tkr->base);