1. 09 Dec, 2021 1 commit
  2. 29 Nov, 2021 1 commit
  3. 16 Nov, 2021 1 commit
  4. 12 Nov, 2021 1 commit
  5. 02 Nov, 2021 1 commit
  6. 24 Oct, 2021 1 commit
  7. 21 Oct, 2021 2 commits
  8. 19 Oct, 2021 1 commit
    • Daniel Lezcano's avatar
      Merge branch 'timers/drivers/armv8.6_arch_timer' into timers/drivers/next · 32cf6d0a
      Daniel Lezcano authored
      The branch is a stable branch shared with ARM maintainers for the
      first 13th patches of the series:
      
      It is based on v5.14-rc3.
      
      As stated by the changelog:
      
      " [... ] enabling ARMv8.6 support for timer subsystem, and was prompted by a
      discussion with Oliver around the fact that an ARMv8.6 implementation
      must have a 1GHz counter, which leads to a number of things to break
      in the timer code:
      
      - the counter rollover can come pretty quickly as we only advertise a
        56bit counter,
      - the maximum timer delta can be remarkably small, as we use the
        countdown interface which is limited to 32bit...
      
      Thankfully, there is a way out: we can compute the minimal width of
      the counter based on the guarantees that the architecture gives us,
      and we can use the 64bit comparator interface instead of the countdown
      to program the timer.
      
      Finally, we start making use of the ARMv8.6 ECV features by switching
      accesses to the counters to a self-synchronising register, removing
      the need for an ISB. Hopefully, implementations will *not* just stick
      an invisible ISB there...
      
      A side effect of the switch to CVAL is that XGene-1 breaks. I have
      added a workaround to keep it alive.
      
      I have added Oliver's original patch[0] to the series and tweaked a
      couple of things. Blame me if I broke anything.
      
      The whole things has been tested on Juno (sysreg + MMIO timers),
      XGene-1 (broken sysreg timers), FVP (FEAT_ECV, CNT*CTSS_EL0).
      "
      
      Link: https://lore.kernel.org/r/20211017124225.3018098-1-maz@kernel.orgSigned-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
      32cf6d0a
  9. 18 Oct, 2021 2 commits
  10. 17 Oct, 2021 11 commits
  11. 16 Oct, 2021 1 commit
    • Randy Dunlap's avatar
      clocksource/drivers/arc_timer: Eliminate redefined macro error · 58100c34
      Randy Dunlap authored
      In drivers/clocksource/, 3 drivers use "TIMER_CTRL_IE" with 3 different
      values.  Two of them (mps2-timer.c and timer-sp804.c/timer-sp.h) are
      localized and left unmodifed.
      
      One of them uses a shared header file (<soc/arc/timers.h>), which is
      what is causing the "redefined" warnings, so change the macro name in
      that driver only. Also change the TIMER_CTRL_NH macro name.
      Both macro names are prefixed with "ARC_" to reduce the likelihood
      of future name collisions.
      
      In file included from ../drivers/clocksource/timer-sp804.c:24:
      ../drivers/clocksource/timer-sp.h:25: error: "TIMER_CTRL_IE" redefined [-Werror]
         25 | #define TIMER_CTRL_IE           (1 << 5)        /*   VR */
      ../include/soc/arc/timers.h:20: note: this is the location of the previous definition
         20 | #define TIMER_CTRL_IE           (1 << 0) /* Interrupt when Count reaches limit */
      
      Fixes: b26c2e38 ("ARC: breakout timer include code into separate header")
      Signed-off-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Cc: Vineet Gupta <vgupta@kernel.org>
      Cc: linux-snps-arc@lists.infradead.org
      Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Shahab Vahedi <Shahab.Vahedi@synopsys.com>
      Acked-by: default avatarVineet Gupta <vgupta@kernel.org>
      Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
      Link: https://lore.kernel.org/r/20210924020825.20317-1-rdunlap@infradead.org
      58100c34
  12. 28 Aug, 2021 1 commit
  13. 26 Aug, 2021 1 commit
  14. 21 Aug, 2021 1 commit
  15. 14 Aug, 2021 3 commits
  16. 13 Aug, 2021 4 commits
  17. 12 Aug, 2021 2 commits
  18. 10 Aug, 2021 5 commits
    • Thomas Gleixner's avatar
      hrtimer: Avoid more SMP function calls in clock_was_set() · 1e7f7fbc
      Thomas Gleixner authored
      By unconditionally updating the offsets there are more indicators
      whether the SMP function calls on clock_was_set() can be avoided:
      
        - When the offset update already happened on the remote CPU then the
          remote update attempt will yield the same seqeuence number and no
          IPI is required.
      
        - When the remote CPU is currently handling hrtimer_interrupt(). In
          that case the remote CPU will reevaluate the timer bases before
          reprogramming anyway, so nothing to do.
      
        - After updating it can be checked whether the first expiring timer in
          the affected clock bases moves before the first expiring (softirq)
          timer of the CPU. If that's not the case then sending the IPI is not
          required.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Link: https://lore.kernel.org/r/20210713135158.887322464@linutronix.de
      1e7f7fbc
    • Marcelo Tosatti's avatar
      hrtimer: Avoid unnecessary SMP function calls in clock_was_set() · 81d741d3
      Marcelo Tosatti authored
      Setting of clocks triggers an unconditional SMP function call on all online
      CPUs to reprogram the clock event device.
      
      However, only some clocks have their offsets updated and therefore
      potentially require a reprogram. That's CLOCK_REALTIME and CLOCK_TAI and in
      the case of resume (delayed sleep time injection) also CLOCK_BOOTTIME.
      
      Instead of sending an IPI unconditionally, check each per CPU hrtimer base
      whether it has active timers in the affected clock bases which are
      indicated by the caller in the @bases argument of clock_was_set().
      
      If that's not the case, skip the IPI and update the offsets remotely which
      ensures that any subsequently armed timers on the affected clocks are
      evaluated with the correct offsets.
      
      [ tglx: Adopted to the new bases argument, removed the softirq_active
        	check, added comment, fixed up stale comment ]
      Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Link: https://lore.kernel.org/r/20210713135158.787536542@linutronix.de
      81d741d3
    • Thomas Gleixner's avatar
      hrtimer: Add bases argument to clock_was_set() · 17a1b882
      Thomas Gleixner authored
      clock_was_set() unconditionaly invokes retrigger_next_event() on all online
      CPUs. This was necessary because that mechanism was also used for resume
      from suspend to idle which is not longer the case.
      
      The bases arguments allows the callers of clock_was_set() to hand in a mask
      which tells clock_was_set() which of the hrtimer clock bases are affected
      by the clock setting. This mask will be used in the next step to check
      whether a CPU base has timers queued on a clock base affected by the event
      and avoid the SMP function call if there are none.
      
      Add a @bases argument, provide defines for the active bases masking and
      fixup all callsites.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Link: https://lore.kernel.org/r/20210713135158.691083465@linutronix.de
      17a1b882
    • Thomas Gleixner's avatar
      time/timekeeping: Avoid invoking clock_was_set() twice · 1b267793
      Thomas Gleixner authored
      do_adjtimex() might end up scheduling a delayed clock_was_set() via
      timekeeping_advance() and then invoke clock_was_set() directly which is
      pointless.
      
      Make timekeeping_advance() return whether an invocation of clock_was_set()
      is required and handle it at the call sites which allows do_adjtimex() to
      issue a single direct call if required.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Link: https://lore.kernel.org/r/20210713135158.580966888@linutronix.de
      1b267793
    • Thomas Gleixner's avatar
      timekeeping: Distangle resume and clock-was-set events · a761a67f
      Thomas Gleixner authored
      Resuming timekeeping is a clock-was-set event and uses the clock-was-set
      notification mechanism. This is in the way of making the clock-was-set
      update for hrtimers selective so unnecessary IPIs are avoided when a CPU
      base does not have timers queued which are affected by the clock setting.
      
      Distangle it by invoking hrtimer_resume() on each unfreezing CPU and invoke
      the new timerfd_resume() function from timekeeping_resume() which is the
      only place where this is needed.
      
      Rename hrtimer_resume() to hrtimer_resume_local() to reflect the change.
      
      With this the clock_was_set*() functions are not longer required to IPI all
      CPUs unconditionally and can get some smarts to avoid them.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Link: https://lore.kernel.org/r/20210713135158.488853478@linutronix.de
      a761a67f