From bfe6c9fabf67cab1d17b6e01358a5b3ed0e86ec1 Mon Sep 17 00:00:00 2001 From: Poul-Henning Kamp Date: Sun, 5 Apr 1998 11:49:36 +0000 Subject: [PATCH] Make the dummy timecounter run at 1 MHz rather than 100kHz (noticed by bde) fix the itimer(REAL) handling. --- sys/kern/kern_clock.c | 4 ++-- sys/kern/kern_tc.c | 4 ++-- sys/kern/kern_time.c | 19 +++++++++---------- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/sys/kern/kern_clock.c b/sys/kern/kern_clock.c index 72e184585667..a22da2bd15d1 100644 --- a/sys/kern/kern_clock.c +++ b/sys/kern/kern_clock.c @@ -39,7 +39,7 @@ static volatile int print_tci = 1; * SUCH DAMAGE. * * @(#)kern_clock.c 8.5 (Berkeley) 1/21/94 - * $Id: kern_clock.c,v 1.63 1998/04/04 13:25:11 phk Exp $ + * $Id: kern_clock.c,v 1.64 1998/04/04 18:46:09 phk Exp $ */ #include @@ -823,7 +823,7 @@ static struct timecounter dummy_timecounter[3] = { 0, dummy_get_timecount, ~0, - 100000, + 1000000, "dummy" } }; diff --git a/sys/kern/kern_tc.c b/sys/kern/kern_tc.c index 72e184585667..a22da2bd15d1 100644 --- a/sys/kern/kern_tc.c +++ b/sys/kern/kern_tc.c @@ -39,7 +39,7 @@ static volatile int print_tci = 1; * SUCH DAMAGE. * * @(#)kern_clock.c 8.5 (Berkeley) 1/21/94 - * $Id: kern_clock.c,v 1.63 1998/04/04 13:25:11 phk Exp $ + * $Id: kern_clock.c,v 1.64 1998/04/04 18:46:09 phk Exp $ */ #include @@ -823,7 +823,7 @@ static struct timecounter dummy_timecounter[3] = { 0, dummy_get_timecount, ~0, - 100000, + 1000000, "dummy" } }; diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c index b8da9b080b99..6337414b9fe5 100644 --- a/sys/kern/kern_time.c +++ b/sys/kern/kern_time.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)kern_time.c 8.1 (Berkeley) 6/10/93 - * $Id: kern_time.c,v 1.48 1998/04/05 10:28:01 phk Exp $ + * $Id: kern_time.c,v 1.49 1998/04/05 11:17:19 peter Exp $ */ #include @@ -102,10 +102,6 @@ settime(tv) ts.tv_nsec = tv->tv_usec * 1000; set_timecounter(&ts); (void) splsoftclock(); - for (p = allproc.lh_first; p != 0; p = p->p_list.le_next) { - if (timerisset(&p->p_realtimer.it_value)) - timevaladd(&p->p_realtimer.it_value, &delta); - } lease_updatetime(delta.tv_sec); splx(s); resettodr(); @@ -479,7 +475,7 @@ getitimer(p, uap) */ aitv = p->p_realtimer; if (timerisset(&aitv.it_value)) { - getmicrotime(&ctv); + getmicroruntime(&ctv); if (timercmp(&aitv.it_value, &ctv, <)) timerclear(&aitv.it_value); else @@ -533,6 +529,8 @@ setitimer(p, uap) if (timerisset(&aitv.it_value)) p->p_ithandle = timeout(realitexpire, (caddr_t)p, tvtohz(&aitv.it_value)); + getmicroruntime(&ctv); + timevaladd(&aitv.it_value, &ctv); p->p_realtimer = aitv; } else p->p_stats->p_timer[uap->which] = aitv; @@ -557,7 +555,7 @@ realitexpire(arg) void *arg; { register struct proc *p; - struct timeval ctv; + struct timeval ctv, ntv; int s; p = (struct proc *)arg; @@ -570,11 +568,12 @@ realitexpire(arg) s = splclock(); /* XXX: still neeeded ? */ timevaladd(&p->p_realtimer.it_value, &p->p_realtimer.it_interval); - getmicrotime(&ctv); + getmicroruntime(&ctv); if (timercmp(&p->p_realtimer.it_value, &ctv, >)) { + ntv = p->p_realtimer.it_value; + timevalsub(&ntv, &ctv); p->p_ithandle = - timeout(realitexpire, (caddr_t)p, - hzto(&p->p_realtimer.it_value) - 1); + timeout(realitexpire, (caddr_t)p, tvtohz(&ntv)); splx(s); return; }