git: kernel - Refactor sysclock_t from 32 to 64 bits

Matthew Dillon dillon at crater.dragonflybsd.org
Tue Jun 9 09:38:41 PDT 2020


commit 8fbc264d2bc2add66aefe4f4a7966c4364da1211
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Tue Jun 9 09:08:16 2020 -0700

    kernel - Refactor sysclock_t from 32 to 64 bits
    
    * Refactor the core cpu timer API, changing sysclock_t from 32
      to 64 bits.  Provide a full 64-bit count from all sources.
    
    * Implement muldivu64() using gcc's 128-bit integer type.  This
      functions takes three 64-bit valus, performs (a * b) / d
      using a 128-bit intermediate calculation, and returns a 64-bit
      result.
    
      Change all timer scaling functions to use this function which
      effectively gives systimers the capability of handling any
      timeout that fits 64 bits for the timer's resolution.
    
    * Remove TSC frequency scaling, it is no longer needed.  The
      TSC timer is now used at its full resolution.
    
    * Use atomic_fcmpset_long() instead of a clock spinlock when
      updating the msb bits for hardware timer sources less than
      64 bits wide.
    
    * Properly recalculate existing systimers when the clock source
      is changed.  Existing systimers were not being recalculated,
      leading to the system failing to boot when time sources had
      radically different clock frequencies.

Summary of changes:
 sys/conf/kern.pre.mk                       |   4 +-
 sys/cpu/x86_64/misc/cputimer_tsc.c         |  24 ++---
 sys/dev/acpica/acpi_hpet.c                 |  46 +++++++++-
 sys/dev/acpica/acpi_timer.c                | 142 +++++++++++++----------------
 sys/dev/virtual/hyperv/vmbus/vmbus.c       |   2 +-
 sys/kern/kern_clock.c                      |  22 +++--
 sys/kern/kern_cputimer.c                   |  19 ++--
 sys/kern/kern_nrandom.c                    |   2 +-
 sys/kern/kern_systimer.c                   |  78 +++++++++++++---
 sys/kern/kern_time.c                       |   9 +-
 sys/kern/usched_bsd4.c                     |   3 +-
 sys/platform/pc64/apic/lapic.c             |  51 ++++++-----
 sys/platform/pc64/isa/clock.c              |  63 +++++++------
 sys/platform/vkernel64/platform/systimer.c |   8 +-
 sys/sys/proc.h                             |   3 +-
 sys/sys/systimer.h                         |  34 +++----
 sys/sys/systm.h                            |  17 ++++
 17 files changed, 306 insertions(+), 221 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/8fbc264d2bc2add66aefe4f4a7966c4364da1211


-- 
DragonFly BSD source repository


More information about the Commits mailing list