[net.unix-wizards] Zero vector interrupts on a VAX

aps (04/11/83)

Dave, I seem to recall that an NPR has priority over any of the BR's.  I
don't recall that UNIBUS devices refused to pass back BG's if they say
an NPR.  But that doesn't mean that they don't.  Note that the rules say
that an arbitrator may not issue a grant (NPG or BG?) for at least 75 ns
after the negation of SACK to ensure that the arbitrator does not
arbitrate old NPR/BR signals.  At anyrate, I understand that some
devices actually time out before they get grant back from the
arbitrator.  In the case of a VAX, that fact is reported to the CPU
during the interrupt summary read.  In PDP-11's, it is ignored by lower
levels.

As to answer your question, I don't know why the count of zvi's couldn't
be reset every now and then or better yet, note the time of a zvi and if
you get another one in some interval, then do a reset.
	aps.

dmmartindale (04/17/83)

NPR does indeed have priority over any of the BR's, if they occur at the
same time.  However, the case I was describing was one in which there
was no NPR request at the time the UBA committed itself to issuing
the BG, and once the BG is issued no NPR/NPG cycle can occur until
the BG/SACK/INTR/SSYN interrupt transaction is complete.  The interrupt
controllers detect the case where there is an NPR active at the time
the BG reaches them, which is later than the time the UBA committed
itself to the BG.  The grant-stealing I described is actually documented
as a feature of the M7821 interrupt controller in one of the older
PDP11 Peripherals Handbooks (see page 6-32 of the 1975 edition, for
example) and the newer one-chip interrupt controller seems designed
to do it as well.

>From my reading of the UBA description in the VAX Hardware Handbook
it seems that the BG is not issued until the CPU has entered the
UBA interrupt service routine and has tried to read the BRRVR.
My interpretation of what happens is this:
The UBA has to pass back some data as the result of this read.
If the device asserts INTR and presents a vector, that's what gets
returned.  But if the transaction ends without INTR, the UBA just
passes back zero.  On simpler processors, the arbitrator would know
what priority the processor was operating at directly (rather than
having to request an interrupt from the processor to determine whether
it was accepting interrupts) and could thus issue the BG asynchronously
with processor execution.  Then, if the transaction resulted in INTR,
the processor would take the interrupt, while if the BG simply resulted
in SACK and then nothing because of a stolen grant, the processor would
never need to know about it, and the arbitrator could continue along
its merry way.

	Dave Martindale