Re: missing interrupts (was Re: CURRENT is freezing again ...)

2000-11-28 Thread Bruce Evans

On Mon, 27 Nov 2000, Andrew Gallatin wrote:

 
 Bruce Evans writes:
   Possible causes of the problem:
   1) isa_handle_intr() claims to send specific EOIs (0x30 | irq) but
  actually sends non-specific ones (0x20 | garbage).  Since interrupts
 
 I think that sending non-specific EOIs is the problem.  Sending
 specific EOIs seem to eliminate my nic timeouts and the need to
 manually feed an eoi to recover from a missing interrupt.
 
 My question is: how does one send a specific EOI correctly?  I don't
 have decent documentation for this.  Above, you seem to imply that
 0x30 is a specific EOI.  That does not seem to work for me (machine
 locks at boot).
 
 Linux uses 0xe0.  According to some Tru64 docs I have,
 that means "Rotate Priority on specific EOI".  According
 to that same documentation, 0x60 is a specific EOI.  Both of these

Oops, I misread the data sheet.  0x60 is correct, 0x30 is wrong.  The
irq number is in the lowest 3 bits.

 appear to work just fine.   What should the alpha port use?

I think it should use non-specific EOIs and send them early (when
there is no ambiguity about which interrupt is being handled), as in
the i386 port.  Sending them late mainly gives the ICU's braindamaged
interrupt priority scheme for longer than necessary.

Bruce



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message



Re: missing interrupts (was Re: CURRENT is freezing again ...)

2000-11-27 Thread Robert Drehmel

In [EMAIL PROTECTED],
Andrew Gallatin wrote:
 Bruce Evans writes:
   Possible causes of the problem:
   1) isa_handle_intr() claims to send specific EOIs (0x30 | irq) but
  actually sends non-specific ones (0x20 | garbage).  Since interrupts
  may be handled in non-LIFO order, this results in EOIs being sent
  for the wrong interrupts.  I think this just randomizes the
  brokenness caused by delaying sending of EOIs.  I can't see how it
  would result in an EOI being lost -- the right number of EOIs will
  have been sent after all handlers have returned.
 
 
 I think that sending non-specific EOIs is the problem.  Sending
 specific EOIs seem to eliminate my nic timeouts and the need to
 manually feed an eoi to recover from a missing interrupt.
 
 My question is: how does one send a specific EOI correctly?  I don't
 have decent documentation for this.  Above, you seem to imply that
 0x30 is a specific EOI.  That does not seem to work for me (machine
 locks at boot).
 
 Linux uses 0xe0.  According to some Tru64 docs I have,
 that means "Rotate Priority on specific EOI".  According
 to that same documentation, 0x60 is a specific EOI.  Both of these
 appear to work just fine.   What should the alpha port use?

My notes say:

Non-specific EOI : 0x20
Specific EOI : 0x60 | IRQn
EOI + rotate priority: 0xa0
EOI + select lowest priority : 0xe0 | IRQn

-- 
Robert S. F. Drehmel [EMAIL PROTECTED]


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message



Re: missing interrupts (was Re: CURRENT is freezing again ...)

2000-11-27 Thread Andrew Gallatin


Bruce Evans writes:
  Possible causes of the problem:
  1) isa_handle_intr() claims to send specific EOIs (0x30 | irq) but
 actually sends non-specific ones (0x20 | garbage).  Since interrupts
 may be handled in non-LIFO order, this results in EOIs being sent
 for the wrong interrupts.  I think this just randomizes the
 brokenness caused by delaying sending of EOIs.  I can't see how it
 would result in an EOI being lost -- the right number of EOIs will
 have been sent after all handlers have returned.


I think that sending non-specific EOIs is the problem.  Sending
specific EOIs seem to eliminate my nic timeouts and the need to
manually feed an eoi to recover from a missing interrupt.

My question is: how does one send a specific EOI correctly?  I don't
have decent documentation for this.  Above, you seem to imply that
0x30 is a specific EOI.  That does not seem to work for me (machine
locks at boot).

Linux uses 0xe0.  According to some Tru64 docs I have,
that means "Rotate Priority on specific EOI".  According
to that same documentation, 0x60 is a specific EOI.  Both of these
appear to work just fine.   What should the alpha port use?

Thanks,

Drew





To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message