Files
msm-5.15/include/linux
Salman Qazi 9993bc635d sched/x86: Fix overflow in cyc2ns_offset
When a machine boots up, the TSC generally gets reset.  However,
when kexec is used to boot into a kernel, the TSC value would be
carried over from the previous kernel.  The computation of
cycns_offset in set_cyc2ns_scale is prone to an overflow, if the
machine has been up more than 208 days prior to the kexec.  The
overflow happens when we multiply *scale, even though there is
enough room to store the final answer.

We fix this issue by decomposing tsc_now into the quotient and
remainder of division by CYC2NS_SCALE_FACTOR and then performing
the multiplication separately on the two components.

Refactor code to share the calculation with the previous
fix in __cycles_2_ns().

Signed-off-by: Salman Qazi <sqazi@google.com>
Acked-by: John Stultz <john.stultz@linaro.org>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Turner <pjt@google.com>
Cc: john stultz <johnstul@us.ibm.com>
Link: http://lkml.kernel.org/r/20120310004027.19291.88460.stgit@dungbeetle.mtv.corp.google.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2012-03-13 16:27:51 +01:00
..
2012-01-22 15:08:43 -05:00
2011-12-13 15:30:49 -05:00
2011-07-22 08:25:37 -07:00
2011-11-02 16:07:03 -07:00
2011-07-20 20:47:43 -04:00
2011-10-26 15:43:25 -04:00
2011-07-26 16:49:47 -07:00
2011-07-26 16:49:47 -07:00
2011-08-03 11:30:42 -04:00
2011-07-31 22:05:09 +02:00
2011-07-26 16:49:47 -07:00
2012-01-10 16:30:42 -08:00
2012-01-03 22:54:57 -05:00
2011-08-25 16:25:33 -07:00
2011-10-29 21:20:22 +02:00
2011-07-06 14:44:42 -07:00
2011-07-25 20:57:16 -07:00
2011-12-13 09:26:45 +00:00
2011-07-05 23:42:17 -07:00
2011-07-26 16:49:47 -07:00
2011-11-07 23:54:53 +01:00
2012-02-20 19:46:36 +11:00
2011-05-23 10:47:06 -05:00
2012-01-04 08:56:31 -06:00
2011-05-29 13:03:09 +01:00
2011-10-31 20:19:04 +00:00
2011-05-24 10:21:29 +02:00
2011-11-26 14:59:39 -05:00
2011-12-09 17:35:51 -08:00
2011-12-11 18:25:16 -05:00
2012-01-12 20:13:04 -08:00
2011-09-14 15:24:51 -04:00
2012-01-03 22:54:58 -05:00
2011-07-26 16:49:47 -07:00
2011-07-26 16:49:47 -07:00
2011-12-13 11:58:49 +01:00
2011-07-01 15:34:45 -07:00
2011-06-28 10:48:34 +02:00
2012-01-12 20:13:08 -08:00
2011-07-01 10:37:15 +02:00
2012-01-03 22:54:56 -05:00
2011-11-13 16:10:10 -05:00
2011-07-21 13:47:54 -07:00
2012-01-03 22:55:17 -05:00
2011-12-11 18:25:16 -05:00
2011-09-27 18:08:04 +02:00
2012-01-09 13:52:09 +01:00
2011-07-26 16:49:47 -07:00
2012-01-17 15:40:51 -08:00
2011-12-27 11:26:41 +02:00
2011-09-16 19:20:20 -04:00
2011-07-26 16:49:47 -07:00
2012-01-12 20:13:10 -08:00
2011-07-26 16:49:47 -07:00
2011-11-14 00:47:54 -05:00
2011-07-31 12:18:16 -04:00
2011-10-31 14:03:22 +01:00
2012-01-06 12:10:26 -08:00
2012-01-12 15:23:04 -08:00
2011-05-26 17:12:37 -07:00
2011-12-13 09:26:45 +00:00
2011-11-02 16:07:02 -07:00
2012-01-03 22:55:07 -05:00
2012-01-03 22:54:56 -05:00
2011-07-26 14:50:01 -07:00
2012-03-13 16:26:52 +01:00
2011-06-07 10:02:35 +02:00
2012-01-03 22:52:40 -05:00
2012-01-09 09:33:57 +09:00
2011-07-30 08:44:19 -10:00
2011-07-26 16:49:47 -07:00
2011-12-13 09:26:45 +00:00
2011-07-26 16:49:47 -07:00
2011-07-25 20:57:11 -07:00
2011-10-31 17:30:47 -07:00
2011-08-16 00:16:49 -07:00
2011-08-03 14:25:22 -10:00
2012-01-03 22:54:56 -05:00
2012-02-28 15:06:33 -05:00
2011-06-27 20:30:08 +02:00
2011-06-07 09:05:42 -07:00
2012-01-24 12:25:14 -08:00
2011-11-02 16:07:02 -07:00
2011-07-26 16:49:47 -07:00
2011-09-14 15:24:51 -04:00