Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Sep 1998 18:50:30 -0400 (EDT)
From:      Simon Shapiro <shimon@simon-shapiro.org>
To:        "Justin T. Gibbs" <gibbs@plutotech.com>
Cc:        current@FreeBSD.ORG, Adam McDougall <mcdougall@ameritech.net>, Eivind Eklund <eivind@yes.no>
Subject:   Re: options DPT_LOST_IRQ
Message-ID:  <XFMail.980924185030.shimon@simon-shapiro.org>
In-Reply-To: <199809241837.MAA28761@pluto.plutotech.com>

next in thread | previous in thread | raw e-mail | index | archive | help

Justin T. Gibbs, On 24-Sep-98 you wrote:
> >This option is necessary due to interrupts being eaten by the serial
> >driver 'fast interrupt' code (which in some cases blocks interrupts
> >longer than the DPT assert them).
>  
>  Wow.  I thought that the fast interrupt code could only cause interrupts
>  to be deferred, never eaten.  Did anyone ever talk to Bruce about this?
>  I'd hate to have a situation where lots of drivers each have their own
>  little timeout handler to deal with this problem.

Yes, I did.  IT appears I am one of the few who can both reproduce it and
have enough hardware and DPT internals savvy to actually trace it well.

The LOST_IRQ option was a hack.  I kept it this way in the hope that CAM
will make the problem go away.  I can add it back in, especially if there
are reports that it is still needed.

General Background:

a.  I did, in the original driver, carefully read the auxiliary status
    register first, and only read the formal status register later in
    dpt_intr.  Here is why;  Reading the status register clears (from the
    DPT point of view) the interrupt and causes it to immediately start the
    next process, which might wipe out the status packet, the completion
    packet or both.  This will mean certain disaster.

b. In the case of a cache hit, the DPT will complete operations and
   generate interrupts less than a microsecond apart. The (now removed,
   soon to be added again) measure_performance option demonstrates this
   clearly.  Such bursts can have up to 64 interrupts per burst.  The
   FreeBSD interrupt code has known holes in it, that will cause such
   closely spaced interrupts to be lost.  This can also cause the system to
   hang.

c.  If you carefully examine the original dpt_irq you will see this code.

d.  If you need/want to know something about the DPT hardware that is not
    in the public documentation, I am still available and eager to answer
    :-)

I do not think the the lost_irq option was a good solution, but a necessary
hack.  I am quite open to suggestions on how to go about it.

Simon

   

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.980924185030.shimon>