From: Greg Kroah-Hartman Date: Thu, 13 Oct 2016 15:35:54 +0000 (+0200) Subject: 4.4-stable patches X-Git-Tag: v4.4.25~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8b4dd0169819f5e4e9b01fcadc808a9ab8480101;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: time-add-cycles-to-nanoseconds-translation.patch --- diff --git a/queue-4.4/series b/queue-4.4/series index e1f5408df02..34f717a6c17 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -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 index 00000000000..60663f1fae2 --- /dev/null +++ b/queue-4.4/time-add-cycles-to-nanoseconds-translation.patch @@ -0,0 +1,78 @@ +From 6bd58f09e1d8cc6c50a824c00bf0d617919986a1 Mon Sep 17 00:00:00 2001 +From: "Christopher S. Hall" +Date: Mon, 22 Feb 2016 03:15:19 -0800 +Subject: time: Add cycles to nanoseconds translation + +From: Christopher S. Hall + +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 +Cc: Richard Cochran +Cc: Thomas Gleixner +Cc: Ingo Molnar +Cc: Andy Lutomirski +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 +Signed-off-by: Christopher S. Hall +Signed-off-by: John Stultz +Signed-off-by: Greg Kroah-Hartman + +--- + 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); + } + + /** diff --git a/queue-4.4/timekeeping-fix-__ktime_get_fast_ns-regression.patch b/queue-4.4/timekeeping-fix-__ktime_get_fast_ns-regression.patch index f931f9c6715..44f30634b1f 100644 --- a/queue-4.4/timekeeping-fix-__ktime_get_fast_ns-regression.patch +++ b/queue-4.4/timekeeping-fix-__ktime_get_fast_ns-regression.patch @@ -68,7 +68,7 @@ Signed-off-by: Greg Kroah-Hartman --- 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);