Subject: Re: aic7xxx still missing interrupt on poweredge 4200
To: Douglas Brebner <netbsd@fang.demon.co.uk>
From: Geoffrey Lee <glee@bluesat.unsw.edu.au>
List: current-users
Date: 08/11/2004 10:00:58
On Tue, Jul 27, 2004 at 12:23:25AM +0100, Douglas Brebner wrote:


Hi all,

[ sending to port-i386 too, that might get a wider audience. ]

I think I made have found a possible reason why the Dell PowerEdge and the
Prioris are missing interrupt on the SCSI card.  The linux folks seem to have
this problem too.

Apparently, there are problems with certain i82093, version 0x11 (17).
Under certain conditions, it is possible for a level-triggered interrupt
to be delivered as an edge triggered interrupt, but the irr gets set 
anyway.  So, the I/O unit expects and EOI but it never arrives.

They fix it by simulating an EOI manually.  This is done by setting the trigger
mode to edge when this mode gets detected in the TMR of a lapic during
a level-triggered interrupt.

The source is masked in between to prevent problems with missing an 
edge-triggered interrupt.

I think this is a very likely reason which also corresponds to why
I have irrpending set in my ioapic flags during ioapic_print_redir().

Is it possible that someone whip out a test patch, and I can give it a spin?
The handling of this in NetBSD seems to be done in some asm glue, I would
have difficulty attempting to fix myself.  I am not sure I am not alone with
these non-functional-under-NetBSD Dell and Prioris MP machines.


	-- geoff.

> On Mon, 26 Jul 2004 15:16:47 +1000
> Geoffrey Lee <glee@bluesat.unsw.edu.au> wrote:
> 
> > Hi all.
> > 
> > 
> > I've had problems with the aic7xxx card missing an interrupt on a 
> > dual processor poweredge 4200.  Unfortunately, this is still the case
> > with the latest -current.
> [snip]
> 
> I get exactly the same problem on a dual processor Prioris MX 6200.
> It also happens with a MP kernel running on a single processor
> 
> 
> -- 
> Douglas

-- 
char p[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  "\x80\xe8\xdc\xff\xff\xff/bin/sh";