On Wed, Sep 12, 2018 at 02:42:08PM +0200, Thomas Gleixner wrote: > Subject: x86/tsc: Prevent result truncation on 32 bit > From: Chuanhua Lei <chuanhua.lei@xxxxxxxxxxxxxxx> > Date: Thu Sep 6 18:03:23 2018 +0800 > > From: Chuanhua Lei <chuanhua.lei@xxxxxxxxxxxxxxx> > > Commit 17f6bac2249356c795339e03a0742cd79be3cab8 upstream. > > Loops per jiffy is calculated by multiplying tsc_khz with 1e3 and then > dividing it by HZ. > > Both tsc_khz and the temporary variable holding the multiplication result > are of type unsigned long, so on 32bit the result is truncated to the lower > 32bit. > > Use u64 as type for the temporary variable and cast tsc_khz to it before > multiplying. > > [ tglx: Backport to stable. Due to massive code changes is the upstream > commit not applicable anymore. The issue has gone unnoticed in > kernels pre 4.19 because the bogus LPJ value gets fixed up in a > later stage of early boot, but it still might cause subtle and hard > to debug issues between these two points. ] Thanks for the backport, now queued up. greg k-h