Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Jul 1999 18:24:45 -0400
From:      clark@pharlap.com (Clark Jarvis)
To:        .(Andy   V. Oleynik) <andyo@prime.net.ua>, freebsd-questions@FreeBSD.ORG
Subject:   Re: too many stray irq 7's; not logging any more. Solved
Message-ID:  <19990728222426822.AAA228@sugar.pharlap.com@clark>
In-Reply-To: <379F686D.BEA781F2@prime.net.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
In <379F686D.BEA781F2@prime.net.ua>, on 07/28/99 
   at 11:30 PM, .         (Andy   V. Oleynik) <andyo@prime.net.ua> said:

>Yet another half of day and question is "yes, local port is dead as well
>as remote".But I'm still interesting about stray irq 7 and
>interrupt-level overflow. Though the latter is selfexplainig and one look
>in the source confirms guess, first is not obviouse. Anyway link is up
>now, errors in config file (0x0a01 flags to 0x0981) fixed. Thanks to all,
>war is finished, all can go
>back to home :)
>"        .         (Andy V. Oleynik)" wrote:

>> Jul 26 18:59:17 host1 /kernel: stray irq 7
>> -----------------------------------------------
>> Jul 26 18:59:17 host1 last message repeated 4 times
>> Jul 26 18:59:17 host1 /kernel: too many stray irq 7's; not logging any
>> more

I have to make some assumptions here, because I've never seen this with
FreeBSD, just with our embedded OS, and apologies to you if you already
know this.

Stray IRQ7s (and 15s) happen when the 8259 Interrupt controller and CPU
get slightly out of phase with each other.  I.e., somebody (probably your
serial port card) signalled an interrupt to the 8259, which in turn
signalled the CPU.  By the time the CPU responds to the request from the
8259, whatever signal that occurred to cause the 8259 to ask for an
interrupt is either gone or changed, so the 8259 doesn't know what to tell
the CPU to do.  However, the CPU _has_ to have something to do, we're in
an unresolvable state until the CPU gets an interrupt to process. There is
no signal from the 8259 to the CPU to tell the CPU "Nevermind, I was just
kidding, I don't really want an interrupt to happen".

So, the 8259 has to give the CPU something, so it gives a "fake" IRQ7.
Fake, because if you read the Interrupts Pending register of the 8259,
IRQ7 isn't signalled, but the handler for IRQ7 gets invoked.  The handler
checks the pending bit, sees that it isn't set, and notices the "spurious"
IRQ7.

Given that it is probably your serial port card that is the "problem", if
you changed the card's IRQ to a "high" IRQ (between 9-15), you would
probably be getting spurious IRQ15s instead.

I don't know enough about FreeBSDs interrupt handling to know if you can
either ignore or disable the warning.

Some of this is PC-architecture specific - it's probably possible to wire
up the 8259 interrupt controllers and CPU so that spurious IRQs aren't
necesary.  [insert copious criticisms of IBM/Intel PC architecture design
decisions here.]

-- 
Clark



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




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