diff options
author | Paul Irofti <pirofti@cvs.openbsd.org> | 2020-07-06 13:33:10 +0000 |
---|---|---|
committer | Paul Irofti <pirofti@cvs.openbsd.org> | 2020-07-06 13:33:10 +0000 |
commit | b7e506b86a1d9691ff26019343ff523bfd30b393 (patch) | |
tree | 8a57536b8a2a17951281291a4bd58752705f500f /sys/arch/hppa | |
parent | cce3edda7285834fa934f9d3e3316d3da5a4f28a (diff) |
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@
Diffstat (limited to 'sys/arch/hppa')
-rw-r--r-- | sys/arch/hppa/dev/clock.c | 4 | ||||
-rw-r--r-- | sys/arch/hppa/include/timetc.h | 23 |
2 files changed, 25 insertions, 2 deletions
diff --git a/sys/arch/hppa/dev/clock.c b/sys/arch/hppa/dev/clock.c index 4c594ab5ec7..ac99711224e 100644 --- a/sys/arch/hppa/dev/clock.c +++ b/sys/arch/hppa/dev/clock.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clock.c,v 1.30 2020/05/01 19:56:11 kettenis Exp $ */ +/* $OpenBSD: clock.c,v 1.31 2020/07/06 13:33:07 pirofti Exp $ */ /* * Copyright (c) 1998-2003 Michael Shalayeff @@ -47,7 +47,7 @@ int cpu_hardclock(void *); u_int itmr_get_timecount(struct timecounter *); struct timecounter itmr_timecounter = { - itmr_get_timecount, NULL, 0xffffffff, 0, "itmr", 0, NULL + itmr_get_timecount, NULL, 0xffffffff, 0, "itmr", 0, NULL, 0 }; extern todr_chip_handle_t todr_handle; diff --git a/sys/arch/hppa/include/timetc.h b/sys/arch/hppa/include/timetc.h new file mode 100644 index 00000000000..be5be950d4d --- /dev/null +++ b/sys/arch/hppa/include/timetc.h @@ -0,0 +1,23 @@ +/* $OpenBSD: timetc.h,v 1.1 2020/07/06 13:33:07 pirofti Exp $ */ +/* + * Copyright (c) 2020 Paul Irofti <paul@irofti.net> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _MACHINE_TIMETC_H_ +#define _MACHINE_TIMETC_H_ + +#define TC_LAST 0 + +#endif /* _MACHINE_TIMETC_H_ */ |