1. 21 Mar, 2020 23 commits
  2. 19 Mar, 2020 3 commits
  3. 17 Mar, 2020 3 commits
  4. 16 Mar, 2020 8 commits
  5. 12 Mar, 2020 1 commit
  6. 04 Mar, 2020 2 commits
    • Waiman Long's avatar
      tick/common: Make tick_periodic() check for missing ticks · d441dceb
      Waiman Long authored
      The tick_periodic() function is used at the beginning part of the
      bootup process for time keeping while the other clock sources are
      being initialized.
      
      The current code assumes that all the timer interrupts are handled in
      a timely manner with no missing ticks. That is not actually true. Some
      ticks are missed and there are some discrepancies between the tick time
      (jiffies) and the timestamp reported in the kernel log.  Some systems,
      however, are more prone to missing ticks than the others.  In the extreme
      case, the discrepancy can actually cause a soft lockup message to be
      printed by the watchdog kthread. For example, on a Cavium ThunderX2
      Sabre arm64 system:
      
       [   25.496379] watchdog: BUG: soft lockup - CPU#14 stuck for 22s!
      
      On that system, the missing ticks are especially prevalent during the
      smp_init() phase of the boot process. With an instrumented kernel,
      it was found that it took about 24s as reported by the timestamp for
      the tick to accumulate 4s of time.
      
      Investigation and bisection done by others seemed to point to the
      commit 73f38166 ("arm64: Advertise mitigation of Spectre-v2, or
      lack thereof") as the culprit. It could also be a firmware issue as
      new firmware was promised that would fix the issue.
      
      To properly address this problem, stop assuming that there will be no
      missing tick in tick_periodic(). Modify it to follow the example of
      tick_do_update_jiffies64() by using another reference clock to check for
      missing ticks. Since the watchdog timer uses running_clock(), it is used
      here as the reference. With this applied, the soft lockup problem in the
      affected arm64 system is gone and tick time tracks much more closely to the
      timestamp time.
      Signed-off-by: default avatarWaiman Long <longman@redhat.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20200207193929.27308-1-longman@redhat.com
      d441dceb
    • Wen Yang's avatar
      hrtimer: Cast explicitely to u32t in __ktime_divns() · 38f7b0b1
      Wen Yang authored
      do_div() does a 64-by-32 division at least on 32bit platforms, while the
      divisor 'div' is explicitly casted to unsigned long, thus 64-bit on 64-bit
      platforms.
      
      The code already ensures that the divisor is less than 2^32. Hence the
      proper cast type is u32.
      Signed-off-by: default avatarWen Yang <wenyang@linux.alibaba.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20200130130851.29204-1-wenyang@linux.alibaba.com
      38f7b0b1