Re: DECstation 5000/200 timekeeping

Mouse <[email protected]>
Newsgroups gmane.os.netbsd.ports.mips.devel
Message-ID <[email protected]>
>> This really looks to me as though the clock interrupt is low enough
>> priority to get locked out by SCSI, serial, and/or Ethernet
>> interrupts; it reminds me of running NetBSD/mac68k, years ago.
> Hmm, that's an r4400 or somesuch, isn't it?

Doh!  I should have quoted.

DECstation 5000/200 (3MAX)
total memory = 32768 KB
avail memory = 28272 KB
timecounter: Timecounters tick every 3.906 msec
mainbus0 (root)
cpu0 at mainbus0: MIPS R3000 CPU (0x220) Rev. 2.0 with MIPS R3010 FPC Rev. 2.0
cpu0: 64KB/4B direct-mapped Instruction cache, 64 TLB entries
cpu0: 64KB/4B direct-mapped write-through Data cache
tc0 at mainbus0: 25 MHz clock
ibus0 at tc0 slot 7 offset 0x0
mcclock0 at ibus0 addr 0x1fe80000: mc146818 or compatible
dz0 at ibus0 addr 0x1fe00000: DC-7085, 4 lines
lkkbd0 at dz0 line 0
wskbd0 at lkkbd0 mux 1
vsms0 at dz0 line 1
wsmouse0 at vsms0 mux 0
le0 at tc0 slot 6 offset 0x0: address 08:00:2b:1b:b7:5f
le0: 32 receive buffers, 8 transmit buffers
asc0 at tc0 slot 5 offset 0x0: NCR53C94, 25MHz, SCSI ID 7
scsibus0 at asc0: 8 targets, 8 luns per target
timecounter: Timecounter "clockinterrupt" frequency 256 Hz quality 0
scsibus0: waiting 2 seconds for devices to settle...
sd0 at scsibus0 target 1 lun 0: <SEAGATE, ST373307LC, 0003> disk fixed
sd0: 69809 MB, 49855 cyl, 4 head, 716 sec, 512 bytes/sect x 142969680 sectors
sd0: sync (200.00ns offset 15), 8-bit (5.000MB/s) transfers, tagged queueing
boot device: sd0
root on sd0a dumps on sd0b
root file system type: ffs

R3000, is that also MIPS3?  I'm having trouble figuring out how that
works.  sys/arch/pmax/conf/std.pmax says "machine pmax mips".
sys/arch/mips/conf/files.mips has a bunch of files which are
conditional on things like mips1, mips3, mips32, mips64, but I have so
far failed to figure out where any of those are defined.  Looking at
the kernel build's list of .o files, I can deduce some things about
what's defined, but not where those definitions come from.

I clearly need to study config(1) more.

The above matches with kern.clockrate and kern.timecounter:

kern.clockrate: tick = 3906, tickadj = 15, hz = 256, profhz = 256, stathz = 256

kern.timecounter.choice = clockinterrupt(q=0, f=256 Hz) dummy(q=-1000000, f=1000000 Hz)
kern.timecounter.hardware = clockinterrupt
kern.timecounter.timestepwarnings = 0

> Looking at the code, one difference between powerpc's clock.c and
> mips' mips3_clockintr.c is that the powerpc code calls hardclock()
> for every missed tick, while the mips code calls it once per
> interrupt.

That's fine if the clock interrupt is high enogh priority and the rest
of the kernel doesn't block it too much.  I guess that must not be
true.

But I'm not sure how relevant it is, because there is no
mips3_clockintr.o in the kernel build directory; the only references to
mips3_clockintr in files* files I see are arch-specific ones for algor,
cobalt, evbmips, and sgimips - no pmax.

Looking at the .o files, the only references to hardclock are
kern_clock.o (the definition) and dec_3max.o.  Looking at dec_3max.c,
it's called from dec_3max_intr(), which itself is presumably called via
platform.iointr because the only reference to it is

	platform.iointr = dec_3max_intr;

In any case, sounds as though this isn't a known hardware misfeature
like the mac68k priority weirdness (where serial line interrupts were
hardwired to higher priority than clock interrupts, IIRC), so I'll just
treat it as a debugging problem.

/~\ The ASCII				  Mouse
\ / Ribbon Campaign
 X  Against HTML		[email protected]
/ \ Email!	     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.