Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Apr 1997 18:21:44 +1000
From:      Bruce Evans <bde@zeta.org.au>
To:        hackers@freebsd.org, markd@Grizzly.COM
Subject:   Re: User time stopped.
Message-ID:  <199704140821.SAA01659@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>My 2.2.1 system has quit accumulating user time.  I had encountered this

This is probably fixed in -current.  Try this change:

Index: clock.c
===================================================================
RCS file: /a/ncvs/src/sys/i386/isa/clock.c,v
retrieving revision 1.72.2.3
retrieving revision 1.80
diff -c -2 -r1.72.2.3 -r1.80
*** clock.c	1997/03/05 08:19:02	1.72.2.3
--- clock.c	1997/04/06 13:25:48	1.80
***************
*** 312,324 ****
   * The RTC chip requires that we read status register C (RTC_INTR)
   * to acknowledge an interrupt, before it will generate the next one.
   */
  static void
  rtcintr(struct clockframe frame)
  {
! 	u_char stat;
! 	stat = rtcin(RTC_INTR);
! 	if(stat & RTCIR_PERIOD) {
  		statclock(&frame);
- 	}
  }
  
--- 312,329 ----
   * The RTC chip requires that we read status register C (RTC_INTR)
   * to acknowledge an interrupt, before it will generate the next one.
+  * Under high interrupt load, rtcintr() can be indefinitely delayed and
+  * the clock can tick immediately after the read from RTC_INTR.  In this
+  * case, the mc146818A interrupt signal will not drop for long enough
+  * to register with the 8259 PIC.  If an interrupt is missed, the stat
+  * clock will halt, considerably degrading system performance.  This is
+  * why we use 'while' rather than a more straightforward 'if' below.
+  * Stat clock ticks can still be lost, causing minor loss of accuracy
+  * in the statistics, but the stat clock will no longer stop.
   */
  static void
  rtcintr(struct clockframe frame)
  {
! 	while (rtcin(RTC_INTR) & RTCIR_PERIOD)
  		statclock(&frame);
  }

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199704140821.SAA01659>