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@