diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c
index 8473adee433e..892f8bbe2edc 100644
--- a/sys/kern/kern_synch.c
+++ b/sys/kern/kern_synch.c
@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)kern_synch.c	8.9 (Berkeley) 5/19/95
- * $Id: kern_synch.c,v 1.73 1999/02/22 16:57:47 bde Exp $
+ * $Id: kern_synch.c,v 1.74 1999/02/28 10:53:29 bde Exp $
  */
 
 #include "opt_ktrace.h"
@@ -64,43 +64,37 @@
 
 static void rqinit __P((void *));
 SYSINIT(runqueue, SI_SUB_RUN_QUEUE, SI_ORDER_FIRST, rqinit, NULL)
+static void sched_setup __P((void *dummy));
+SYSINIT(sched_setup, SI_SUB_KICK_SCHEDULER, SI_ORDER_FIRST, sched_setup, NULL)
 
-u_char	curpriority;		/* usrpri of curproc */
+u_char	curpriority;
 int	hogticks;
-int	lbolt;			/* once a second sleep address */
+int	lbolt;
+int	sched_quantum;		/* Roundrobin scheduling quantum in ticks. */
 
 static void	endtsleep __P((void *));
 static void	roundrobin __P((void *arg));
 static void	schedcpu __P((void *arg));
 static void	updatepri __P((struct proc *p));
 
-#define MAXIMUM_SCHEDULE_QUANTUM	(1000000) /* arbitrary limit */
-#ifndef DEFAULT_SCHEDULE_QUANTUM
-#define DEFAULT_SCHEDULE_QUANTUM 10
-#endif
-static int quantum = DEFAULT_SCHEDULE_QUANTUM; /* default value */
-
 static int
 sysctl_kern_quantum SYSCTL_HANDLER_ARGS
 {
-	int error;
-	int new_val = quantum;
+	int error, new_val;
 
-	new_val = quantum;
+	new_val = sched_quantum * tick;
 	error = sysctl_handle_int(oidp, &new_val, 0, req);
-	if (error == 0) {
-		if ((new_val > 0) && (new_val < MAXIMUM_SCHEDULE_QUANTUM)) {
-			quantum = new_val;
-		} else {
-			error = EINVAL;
-		}
-	}
-	hogticks = 2 * (hz / quantum);
-	return (error);
+        if (error != 0 || req->newptr == NULL)
+		return (error);
+	if (new_val < tick)
+		return (EINVAL);
+	sched_quantum = new_val / tick;
+	hogticks = 2 * sched_quantum;
+	return (0);
 }
 
 SYSCTL_PROC(_kern, OID_AUTO, quantum, CTLTYPE_INT|CTLFLAG_RW,
-	0, sizeof quantum, sysctl_kern_quantum, "I", "");
+	0, sizeof sched_quantum, sysctl_kern_quantum, "I", "");
 
 /* maybe_resched: Decide if you need to reschedule or not
  * taking the priorities and schedulers into account.
@@ -126,10 +120,10 @@ static void maybe_resched(struct proc *chk)
 	}
 }
 
-#define ROUNDROBIN_INTERVAL (hz / quantum)
-int roundrobin_interval(void)
+int 
+roundrobin_interval(void)
 {
-	return ROUNDROBIN_INTERVAL;
+	return (sched_quantum);
 }
 
 /*
@@ -152,7 +146,7 @@ roundrobin(arg)
  		need_resched();
 #endif
 
- 	timeout(roundrobin, NULL, ROUNDROBIN_INTERVAL);
+ 	timeout(roundrobin, NULL, sched_quantum);
 }
 
 /*
@@ -358,11 +352,12 @@ static TAILQ_HEAD(slpquehead, proc) slpque[TABLESIZE];
 int safepri;
 
 void
-sleepinit()
+sleepinit(void)
 {
 	int i;
 
-	hogticks = 2 * (hz / quantum);
+	sched_quantum = hz/10;
+	hogticks = 2 * sched_quantum;
 	for (i = 0; i < TABLESIZE; i++)
 		TAILQ_INIT(&slpque[i]);
 }
@@ -915,7 +910,6 @@ resetpriority(p)
 }
 
 /* ARGSUSED */
-static void sched_setup __P((void *dummy));
 static void
 sched_setup(dummy)
 	void *dummy;
@@ -924,5 +918,4 @@ sched_setup(dummy)
 	roundrobin(NULL);
 	schedcpu(NULL);
 }
-SYSINIT(sched_setup, SI_SUB_KICK_SCHEDULER, SI_ORDER_FIRST, sched_setup, NULL)
 
diff --git a/sys/sys/proc.h b/sys/sys/proc.h
index 53eef6d79f26..1d0a9b721231 100644
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)proc.h	8.15 (Berkeley) 5/19/95
- * $Id: proc.h,v 1.71 1999/02/25 14:28:46 newton Exp $
+ * $Id: proc.h,v 1.72 1999/02/28 10:53:29 bde Exp $
  */
 
 #ifndef _SYS_PROC_H_
@@ -329,6 +329,7 @@ extern struct proc proc0;		/* Process slot for swapper. */
 extern int hogticks;			/* Limit on kernel cpu hogs. */
 extern int nprocs, maxproc;		/* Current and max number of procs. */
 extern int maxprocperuid;		/* Max procs per uid. */
+extern int sched_quantum;		/* Scheduling quantum in ticks */
 extern int switchticks;			/* `ticks' at last context switch. */
 extern struct timeval switchtime;	/* Uptime at last context switch */