RTC clock doesn't generate interrupts

Dan Nelson dnelson at allantgroup.com
Mon May 21 00:32:32 UTC 2007


In the last episode (May 20), Victor Balada Diaz said:
> On Mon, May 21, 2007 at 05:11:23AM +1000, Peter Jeremy wrote:
> > On 2007-May-20 18:26:30 +0200, Victor Balada Diaz <victor at bsdes.net> wrote:
> > >I have a server with FreeBSD 6.2 that is not generating RTC IRQs.
> > >When the system boots everything it's working fine and I get 128
> > >interrupts per second but after a few hours the system starts
> > >losing RTC interrupts. If I enable powerd it happens much faster
> > >than without it.
> > 
> > The RTC has a "feature" that if you ever lose an RTC interrupt
> > (because the interrupt handler wasn't called fast enough), you
> > don't get any more interrupts because the RTC knows it has an
> > interrupt pending and so doesn't generate any more interrupts.
> > 
> > I have also bumped into this problem whilst trying to work around a
> > problem with a TurionX2 CPU.  I just got the correct fix to work
> > and ignored the work-around.
> > 
> > I did find that you can restart the RTC interrupts by setting
> > machdep.adjkerntz (you can leave the value the same, it's the
> > assignment that's important).
> 
> Thanks for your fast reply!
> 
> I tried the machdep.adjkerntz trick and didn't work very well.
> If i'm on 0 irqs per second after changing the value i get 1
> irq per second. If i'm on 20 i get 21, and so on.
> 
> Do you know of any other workaround/patch that i can try?

Here's what I use on a couple of Dell 2400's.  I put it in cron to fire
every 5 minutes:

#! /bin/sh
# fixrtc - kick the RTC if it stops running

# get the interrupt rate for the stat clock over one second
getticks() {
  ( vmstat -i ; sleep 1 ; vmstat -i ) | 
  awk '/rtc/ { if (sum) sum+=$3; else sum-=$3 } END { print sum }'
}

ticks=$( getticks )

# It should be firing at 128 hz.  If not, kick it
if [ $ticks -lt 64 ] ; then
  echo "Stat clock has died.  Attempting to reset."
  echo
  /etc/rc.d/ntpd stop
  echo
  /usr/sbin/ntpdate -b pool.ntp.org
  echo
  /etc/rc.d/ntpd start
  echo
  echo "RTC interrupt rate is now $(getticks)"
fi


-- 
	Dan Nelson
	dnelson at allantgroup.com


More information about the freebsd-stable mailing list