Date: Fri, 31 Jul 1998 15:41:45 +1000 From: Stephen McKay <syssgm@dtir.qld.gov.au> To: bill schaub <talon@hancock.k12.mo.us> Cc: freebsd-hackers@FreeBSD.ORG, syssgm@dtir.qld.gov.au Subject: Re: you may be intrested in this strange problem i found in 2.2.1 Message-ID: <199807310541.PAA11224@nymph.dtir.qld.gov.au> In-Reply-To: <Pine.BSF.3.95q.980730155818.9652D-100000@hancock.k12.mo.us> from bill schaub at "Thu, 30 Jul 1998 16:19:35 -0500" References: <Pine.BSF.3.95q.980730155818.9652D-100000@hancock.k12.mo.us>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday, 30th July 1998, bill schaub wrote:
>im running 2.2.1 on a 386 for a web and email server ...
>the problem is after the system is runnign for a while it stops reporting
>the cpu useage for any process and systat dies with the alternate system
>clock has died now reverting to "pigs" display iostat keeps reporting a
>bogus reading of 92 % idle 3 % user 3% system and 2% interrupt witch is
>bogus sicne it stays the same even when compileing the kernel
Upgrade to 2.2.7. This problem was fixed in 2.2.2. But if you want a
quick fix, apply this patch to /sys/i386/isa/clock.c:
Index: clock.c
===================================================================
RCS file: /cvs/src/sys/i386/isa/clock.c,v
retrieving revision 1.72.2.3
retrieving revision 1.72.2.4
diff -u -r1.72.2.3 -r1.72.2.4
--- clock.c 1997/03/05 08:19:02 1.72.2.3
+++ clock.c 1997/04/27 13:44:19 1.72.2.4
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)clock.c 7.2 (Berkeley) 5/12/91
- * $Id: clock.c,v 1.72.2.3 1997/03/05 08:19:02 bde Exp $
+ * $Id: clock.c,v 1.72.2.4 1997/04/27 13:44:19 mckay Exp $
*/
/*
@@ -311,15 +311,20 @@
*
* 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)
{
- u_char stat;
- stat = rtcin(RTC_INTR);
- if(stat & RTCIR_PERIOD) {
+ while (rtcin(RTC_INTR) & RTCIR_PERIOD)
statclock(&frame);
- }
}
#include "opt_ddb.h"
>i know i dont have good grammer skills but i am not a total moron
Don't skimp on the capitalisation and punctuation, or most people will
assume the worst.
Stephen.
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199807310541.PAA11224>
