CVSROOT:        /cvs
Module name:    src
Changes by:     [email protected] 2020/07/06 07:33:09

Modified files:
        lib/libc/arch/aarch64/gen: Makefile.inc 
        lib/libc/arch/alpha/gen: Makefile.inc 
        lib/libc/arch/amd64/gen: Makefile.inc 
        lib/libc/arch/arm/gen: Makefile.inc 
        lib/libc/arch/hppa/gen: Makefile.inc 
        lib/libc/arch/i386/gen: Makefile.inc 
        lib/libc/arch/m88k/gen: Makefile.inc 
        lib/libc/arch/mips64/gen: Makefile.inc 
        lib/libc/arch/powerpc/gen: Makefile.inc 
        lib/libc/arch/sh/gen: Makefile.inc 
        lib/libc/arch/sparc64/gen: Makefile.inc 
        lib/libc/asr   : asr.c 
        lib/libc/crypt : bcrypt.c 
        lib/libc/dlfcn : init.c 
        lib/libc/gen   : auth_subr.c time.c times.c timespec_get.c 
        lib/libc/hidden/sys: time.h 
        lib/libc/hidden: time.h 
        lib/libc/net   : res_random.c 
        lib/libc/rpc   : auth_unix.c clnt_tcp.c clnt_udp.c svc_tcp.c 
        lib/libc/sys   : Makefile.inc 
        lib/libc/thread: synch.h 
        sys/arch/alpha/alpha: clock.c 
        sys/arch/amd64/amd64: tsc.c 
        sys/arch/amd64/isa: clock.c 
        sys/arch/arm/cortex: amptimer.c 
        sys/arch/arm64/dev: agtimer.c 
        sys/arch/armv7/omap: gptimer.c 
        sys/arch/armv7/sunxi: sxitimer.c 
        sys/arch/hppa/dev: clock.c 
        sys/arch/i386/isa: clock.c 
        sys/arch/i386/pci: geodesc.c gscpm.c ichpcib.c 
        sys/arch/loongson/loongson: generic3a_machdep.c 
        sys/arch/luna88k/luna88k: clock.c 
        sys/arch/macppc/macppc: clock.c 
        sys/arch/mips64/mips64: mips64_machdep.c 
        sys/arch/octeon/octeon: machdep.c 
        sys/arch/sgi/sgi: ip27_machdep.c 
        sys/arch/sgi/xbow: xheart.c 
        sys/arch/sparc64/dev: psycho.c 
        sys/arch/sparc64/sparc64: clock.c 
        sys/dev/acpi   : acpihpet.c acpitimer.c 
        sys/dev/pci    : amdpm.c viapm.c 
        sys/dev/pv     : hyperv.c pvclock.c 
        sys/kern       : exec_elf.c kern_exec.c kern_tc.c 
        sys/sys        : exec_elf.h proc.h time.h timetc.h 
        sys/uvm        : uvm_unix.c 
Added files:
        lib/libc/arch/aarch64/gen: usertc.c 
        lib/libc/arch/alpha/gen: usertc.c 
        lib/libc/arch/amd64/gen: usertc.c 
        lib/libc/arch/arm/gen: usertc.c 
        lib/libc/arch/hppa/gen: usertc.c 
        lib/libc/arch/i386/gen: usertc.c 
        lib/libc/arch/m88k/gen: usertc.c 
        lib/libc/arch/mips64/gen: usertc.c 
        lib/libc/arch/powerpc/gen: usertc.c 
        lib/libc/arch/sh/gen: usertc.c 
        lib/libc/arch/sparc64/gen: usertc.c 
        lib/libc/hidden/sys: timetc.h 
        lib/libc/sys   : microtime.c w_clock_gettime.c w_gettimeofday.c 
        regress/lib/libc/timekeep: Makefile test_clock_gettime.c 
                                   test_gettimeofday.c test_time_skew.c 
        sys/arch/alpha/include: timetc.h 
        sys/arch/amd64/include: timetc.h 
        sys/arch/arm/include: timetc.h 
        sys/arch/arm64/include: timetc.h 
        sys/arch/armv7/include: timetc.h 
        sys/arch/hppa/include: timetc.h 
        sys/arch/i386/include: timetc.h 
        sys/arch/landisk/include: timetc.h 
        sys/arch/loongson/include: timetc.h 
        sys/arch/luna88k/include: timetc.h 
        sys/arch/m88k/include: timetc.h 
        sys/arch/macppc/include: timetc.h 
        sys/arch/mips64/include: timetc.h 
        sys/arch/octeon/include: timetc.h 
        sys/arch/powerpc/include: timetc.h 
        sys/arch/powerpc64/include: timetc.h 
        sys/arch/sgi/include: timetc.h 
        sys/arch/sh/include: timetc.h 
        sys/arch/sparc64/include: timetc.h 

Log message:
Add support for timeconting in userland.

This diff exposes parts of clock_gettime(2) and gettimeofday(2) to
userland via libc eliberating processes from the need for a context
switch everytime they want to count the passage of time.

If a timecounter clock can be exposed to userland than it needs to set
its tc_user member to a non-zero value. Tested with one or multiple
counters per architecture.

The timing data is shared through a pointer found in the new ELF
auxiliary vector AUX_openbsd_timekeep containing timehands information
that is frequently updated by the kernel.

Timing differences between the last kernel update and the current time
are adjusted in userland by the tc_get_timecount() function inside the
MD usertc.c file.

This permits a much more responsive environment, quite visible in
browsers, office programs and gaming (apparently one is are able to fly
in Minecraft now).

Tested by robert@, sthen@, naddy@, kmos@, phessler@, and many others!

OK from at least kettenis@, cheloha@, naddy@, sthen@

Reply via email to