Since this came up in another thread. Trivial implementations of
CLOCK_VIRTUAL and CLOCK_PROF, modeled after what FreeBSD does.
- todd
Index: sys/sys/_time.h
===================================================================
RCS file: /home/cvs/openbsd/src/sys/sys/_time.h,v
retrieving revision 1.6
diff -u -r1.6 _time.h
--- sys/sys/_time.h 6 Oct 2013 01:27:49 -0000 1.6
+++ sys/sys/_time.h 15 Oct 2014 13:40:28 -0000
@@ -38,6 +38,7 @@
#define CLOCK_MONOTONIC 3
#define CLOCK_THREAD_CPUTIME_ID 4
#define CLOCK_UPTIME 5
+#define CLOCK_PROF 6
#if __BSD_VISIBLE
#define __CLOCK_USE_TICKET_LOCKS 8 /* flag for
__thrsleep() */
Index: sys/kern/kern_time.c
===================================================================
RCS file: /home/cvs/openbsd/src/sys/kern/kern_time.c,v
retrieving revision 1.88
diff -u -r1.88 kern_time.c
--- sys/kern/kern_time.c 15 May 2014 04:36:33 -0000 1.88
+++ sys/kern/kern_time.c 15 Oct 2014 14:31:06 -0000
@@ -108,12 +108,20 @@
int
clock_gettime(struct proc *p, clockid_t clock_id, struct timespec *tp)
{
+ struct timespec sys;
struct bintime bt;
struct proc *q;
switch (clock_id) {
case CLOCK_REALTIME:
nanotime(tp);
+ break;
+ case CLOCK_VIRTUAL:
+ calctsru(&p->p_p->ps_tu, tp, &sys, NULL);
+ break;
+ case CLOCK_PROF:
+ calctsru(&p->p_p->ps_tu, tp, &sys, NULL);
+ timespecadd(tp, &sys, tp);
break;
case CLOCK_UPTIME:
binuptime(&bt);