Tracking down zero UNIBUS interrupt vectors

Dave Martindale dmmartindale at watcgl.UUCP
Sun Sep 25 13:29:06 AEST 1983


First, is it a device suddenly spewing forth these vectors, or is it
the slow, gradual collection of 250000 of them over a long period? As
distributed, the system never resets this count and if you seldom crash
this can become a problem.

One "normal" source of zero vectors is DEC interrupt controllers.  Some
of them are designed to speed up DMA transactions by throwing away bus
grants if NPR is asserted.

During a normal interrupt sequence, the device pulls down BR5 (in this
case) and waits to see BG5.  When it gets BG5, it returns SACK and then
eventually asserts BBSY and INTR along with the vector when the
previous transaction completes.  SACK is negated after INTR is
asserted.

This is probably fine on PDP11's, but on the 780 the UBA doesn't know
what priority the processor is at and thus can't issue BG's on its
own.  Thus it just passes the BR on to the processor as an interrupt
request on the SBI, and when the UBA interrupt handler goes to read the
appropriate BRRVR, the UBA then knows that the processor is ready to
handle that interrupt and issues the BG.  Then, if the grant is thrown
away without producing an interrupt vector, the UBA just returns zero
since it has to pass back something.  This produces a zero vector.

(The above description is my own understanding of how this works, based
on reading manuals and circuit diagrams and watching the bus.  I could
be wrong....)

Anyway, you would expect to get these frequently if you have devices
which have this sort of interrupt controller (and I think the DZ's do)
plus lots of Unibus DMA activity.  The Unibus disk would provide the
latter.  Now, if the zero-vector count builds up gradually, there
really isn't much you can do practically about it; just reset it to
zero every once in a while so you don't get unibus resets.

If you really do get very large bursts of zero vectors all at once and
can produce the problem on demand, or observe it while it is happening,
you should be able to find out which device is actually requesting the
interrupt, and which is throwing away the grant, with an oscilloscope
or (better) a logic analyzer.  Probably not an attractive prospect, but
a useful last resort...

Hope this helps.

	Dave Martindale



More information about the Comp.unix.wizards mailing list