Module Name:    src
Committed By:   pooka
Date:           Wed Apr 14 10:27:53 UTC 2010

Modified Files:
        src/sys/rump/librump/rumpkern: Makefile.rumpkern emul.c intr.c rump.c

Log Message:
Include kern_tc and use a timecounter driver instead of homerolled
kern_tc implementation.


To generate a diff of this commit:
cvs rdiff -u -r1.75 -r1.76 src/sys/rump/librump/rumpkern/Makefile.rumpkern
cvs rdiff -u -r1.124 -r1.125 src/sys/rump/librump/rumpkern/emul.c
cvs rdiff -u -r1.23 -r1.24 src/sys/rump/librump/rumpkern/intr.c
cvs rdiff -u -r1.159 -r1.160 src/sys/rump/librump/rumpkern/rump.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/rump/librump/rumpkern/Makefile.rumpkern
diff -u src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.75 src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.76
--- src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.75	Mon Apr 12 22:17:23 2010
+++ src/sys/rump/librump/rumpkern/Makefile.rumpkern	Wed Apr 14 10:27:53 2010
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.rumpkern,v 1.75 2010/04/12 22:17:23 pooka Exp $
+#	$NetBSD: Makefile.rumpkern,v 1.76 2010/04/14 10:27:53 pooka Exp $
 #
 
 .include "${RUMPTOP}/Makefile.rump"
@@ -39,8 +39,8 @@
 # sys/kern
 SRCS+=	init_sysctl_base.c kern_auth.c kern_descrip.c kern_event.c	\
 	kern_hook.c kern_ksyms.c kern_malloc_stdtype.c kern_module.c	\
-	kern_mutex_obj.c kern_rate.c kern_stub.c kern_sysctl.c		\
-	kern_timeout.c kern_uidinfo.c param.c				\
+	kern_mutex_obj.c kern_ntptime.c kern_rate.c kern_stub.c		\
+	kern_sysctl.c kern_tc.c kern_timeout.c kern_uidinfo.c param.c	\
 	sys_descrip.c sys_generic.c sys_pipe.c sys_select.c syscalls.c
 
 # sys/kern subr (misc)

Index: src/sys/rump/librump/rumpkern/emul.c
diff -u src/sys/rump/librump/rumpkern/emul.c:1.124 src/sys/rump/librump/rumpkern/emul.c:1.125
--- src/sys/rump/librump/rumpkern/emul.c:1.124	Wed Mar 31 14:08:33 2010
+++ src/sys/rump/librump/rumpkern/emul.c	Wed Apr 14 10:27:53 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: emul.c,v 1.124 2010/03/31 14:08:33 pooka Exp $	*/
+/*	$NetBSD: emul.c,v 1.125 2010/04/14 10:27:53 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: emul.c,v 1.124 2010/03/31 14:08:33 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: emul.c,v 1.125 2010/04/14 10:27:53 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/null.h>
@@ -62,8 +62,6 @@
 
 #include "rump_private.h"
 
-time_t time_second = 1;
-
 kmutex_t *proc_lock;
 struct lwp lwp0;
 struct vnode *rootvp;
@@ -112,6 +110,8 @@
 kmutex_t tty_lock;
 krwlock_t exec_lock;
 
+struct lwplist alllwp = LIST_HEAD_INITIALIZER(alllwp);
+
 /* sparc doesn't sport constant page size */
 #ifdef __sparc__
 int nbpg = 4096;
@@ -124,73 +124,6 @@
 	FSCALE,
 };
 
-void
-getnanouptime(struct timespec *ts)
-{
-
-	rump_getuptime(ts);
-}
-
-void
-getmicrouptime(struct timeval *tv)
-{
-	struct timespec ts;
-
-	getnanouptime(&ts);
-	TIMESPEC_TO_TIMEVAL(tv, &ts);
-}
-
-static void
-gettime(struct timespec *ts)
-{
-	uint64_t sec, nsec;
-	int error;
-
-	rumpuser_gettime(&sec, &nsec, &error);
-	ts->tv_sec = sec;
-	ts->tv_nsec = nsec;
-}
-
-void
-nanotime(struct timespec *ts)
-{
-
-	if (rump_threads) {
-		rump_gettime(ts);
-	} else {
-		gettime(ts);
-	}
-}
-
-/* hooray for mick, so what if I do */
-void
-getnanotime(struct timespec *ts)
-{
-
-	nanotime(ts);
-}
-
-void
-microtime(struct timeval *tv)
-{
-	struct timespec ts;
-
-	if (rump_threads) {
-		rump_gettime(&ts);
-		TIMESPEC_TO_TIMEVAL(tv, &ts);
-	} else {
-		gettime(&ts);
-		TIMESPEC_TO_TIMEVAL(tv, &ts);
-	}
-}
-
-void
-getmicrotime(struct timeval *tv)
-{
-
-	microtime(tv);
-}
-
 struct proc *
 p_find(pid_t pid, uint flags)
 {
@@ -317,13 +250,6 @@
 	/* always sleepable, although we should improve this */
 }
 
-void
-tc_setclock(const struct timespec *ts)
-{
-
-	panic("%s: not implemented", __func__);
-}
-
 int
 proc_uidmatch(kauth_cred_t cred, kauth_cred_t target)
 {

Index: src/sys/rump/librump/rumpkern/intr.c
diff -u src/sys/rump/librump/rumpkern/intr.c:1.23 src/sys/rump/librump/rumpkern/intr.c:1.24
--- src/sys/rump/librump/rumpkern/intr.c:1.23	Sat Dec  5 22:44:08 2009
+++ src/sys/rump/librump/rumpkern/intr.c	Wed Apr 14 10:27:53 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: intr.c,v 1.23 2009/12/05 22:44:08 pooka Exp $	*/
+/*	$NetBSD: intr.c,v 1.24 2010/04/14 10:27:53 pooka Exp $	*/
 
 /*
  * Copyright (c) 2008 Antti Kantee.  All Rights Reserved.
@@ -26,13 +26,15 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.23 2009/12/05 22:44:08 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.24 2010/04/14 10:27:53 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/cpu.h>
+#include <sys/kernel.h>
 #include <sys/kmem.h>
 #include <sys/kthread.h>
 #include <sys/intr.h>
+#include <sys/timetc.h>
 
 #include <rump/rumpuser.h>
 
@@ -42,8 +44,6 @@
  * Interrupt simulator.  It executes hardclock() and softintrs.
  */
 
-time_t time_uptime = 0;
-
 #define SI_MPSAFE 0x01
 #define SI_ONLIST 0x02
 #define SI_KILLME 0x04
@@ -67,51 +67,45 @@
 static struct rumpuser_cv *clockcv;
 static struct rumpuser_mtx *clockmtx;
 static struct timespec clockbase, clockup;
-static unsigned clkgen;
 
 kcondvar_t lbolt; /* Oh Kath Ra */
 
-void
-rump_getuptime(struct timespec *ts)
-{
-	int startgen, i = 0;
-
-	do {
-		startgen = clkgen;
-		if (__predict_false(i++ > 10)) {
-			yield();
-			i = 0;
-		}
-		*ts = clockup;
-	} while (startgen != clkgen || clkgen % 2 != 0);
-}
+static u_int ticks;
 
-void
-rump_gettime(struct timespec *ts)
+static u_int
+rumptc_get(struct timecounter *tc)
 {
-	struct timespec ts_up;
 
-	rump_getuptime(&ts_up);
-	timespecadd(&clockbase, &ts_up, ts);
+	KASSERT(rump_threads);
+	return ticks;
 }
 
+static struct timecounter rumptc = {
+	.tc_get_timecount	= rumptc_get,
+	.tc_poll_pps 		= NULL,
+	.tc_counter_mask	= ~0,
+	.tc_frequency		= 0,
+	.tc_name		= "rumpclk",
+	.tc_quality		= 0,
+};
+
 /*
  * clock "interrupt"
  */
 static void
 doclock(void *noarg)
 {
-	struct timespec tick, curtime;
+	struct timespec thetick, curtime;
 	uint64_t sec, nsec;
-	int ticks = 0, error;
+	int error;
 	extern int hz;
 
 	rumpuser_gettime(&sec, &nsec, &error);
 	clockbase.tv_sec = sec;
 	clockbase.tv_nsec = nsec;
 	curtime = clockbase;
-	tick.tv_sec = 0;
-	tick.tv_nsec = 1000000000/hz;
+	thetick.tv_sec = 0;
+	thetick.tv_nsec = 1000000000/hz;
 
 	rumpuser_mutex_enter(clockmtx);
 	rumpuser_cv_signal(clockcv);
@@ -126,15 +120,12 @@
 		
 		/* if !maincpu: continue */
 
-		if (++ticks == hz) {
-			time_uptime++;
-			ticks = 0;
+		if ((++ticks % hz) == 0) {
 			cv_broadcast(&lbolt);
 		}
+		tc_ticktock();
 
-		clkgen++;
-		timespecadd(&clockup, &tick, &clockup);
-		clkgen++;
+		timespecadd(&clockup, &thetick, &clockup);
 		timespecadd(&clockup, &clockbase, &curtime);
 	}
 }
@@ -246,6 +237,9 @@
 			panic("clock thread creation failed: %d", rv);
 	}
 
+	rumptc.tc_frequency = hz;
+	tc_init(&rumptc);
+
 	/*
 	 * Make sure we have a clocktime before returning.
 	 * XXX: mp

Index: src/sys/rump/librump/rumpkern/rump.c
diff -u src/sys/rump/librump/rumpkern/rump.c:1.159 src/sys/rump/librump/rumpkern/rump.c:1.160
--- src/sys/rump/librump/rumpkern/rump.c:1.159	Mon Apr 12 22:17:23 2010
+++ src/sys/rump/librump/rumpkern/rump.c	Wed Apr 14 10:27:53 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump.c,v 1.159 2010/04/12 22:17:23 pooka Exp $	*/
+/*	$NetBSD: rump.c,v 1.160 2010/04/14 10:27:53 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.159 2010/04/12 22:17:23 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.160 2010/04/14 10:27:53 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -58,6 +58,7 @@
 #include <sys/select.h>
 #include <sys/sysctl.h>
 #include <sys/syscall.h>
+#include <sys/timetc.h>
 #include <sys/tty.h>
 #include <sys/uidinfo.h>
 #include <sys/vmem.h>
@@ -186,6 +187,7 @@
 rump__init(int rump_version)
 {
 	char buf[256];
+	struct timespec ts;
 	uint64_t sec, nsec;
 	struct proc *p;
 	struct lwp *l;
@@ -290,6 +292,13 @@
 	rump_schedule();
 
 	percpu_init();
+	inittimecounter();
+	ntp_init();
+
+	rumpuser_gettime(&sec, &nsec, &error);
+	ts.tv_sec = sec;
+	ts.tv_nsec = nsec;
+	tc_setclock(&ts);
 
 	/* we are mostly go.  do per-cpu subsystem init */
 	for (i = 0; i < ncpu; i++) {
@@ -490,6 +499,7 @@
 	l->l_fd = p->p_fd;
 	l->l_cpu = NULL;
 	lwp_initspecific(l);
+	LIST_INSERT_HEAD(&alllwp, l, l_list);
 
 	return l;
 }
@@ -537,6 +547,7 @@
 	if (l->l_name)
 		kmem_free(l->l_name, MAXCOMLEN);
 	lwp_finispecific(l);
+	LIST_REMOVE(l, l_list);
 	kmem_free(l, sizeof(*l));
 }
 

Reply via email to