Clemens,
Hi. Thanks for the response. It's very helpful and good information.
Since I think there is still some differences between your software and my
hardware points of view so I'll continue to ask a few questions and document
my points below. No *major* disagreements with what you wrote, maybe one
minor one at the very end. Mostly this is still clarification and
comparison.
- Mark
<SNIP>
Lower-priority interrupts don't automatically get suppressed, or much
delayed.
Possibly true, or should be if software is designed right.
The priority is simply used to choose between several
interrupts occuring at the same time, which happens almost never.
Speaking as a hardware designer who has worked on chipset and many different
I/O controller technologies (SCSI, EIDE, Ethernet, 1394, USB and legacy) I
can assure you that this is not always true. None the less, it only takes
one delay to create an xrun and blow a live recording.
and when a piece of Ethernet driver code crashes
nothing would be
able to break in. Not good.
Apparently, you've never developed a driver. ;-) When any interrupt
handler crashes, Linux prints the following dreaded message after the
usual report:
| Kernel panic: Aiee, killing interrupt handler!
| In interrupt handler - not syncing
and _everything_ halts -- no interrupts, no keyboard, no Alt+SysRq.
All you can do is a hard reset and be delighted at what fsck tells
you.
;-) OK, now it's extremely well known fact that I'm not a programmer. Why
would you think there was *any* chance I'd ever written a driver? ;-)
(Though I have managed Windows SCSI driver programmers and have some
first-person background...)
<SNIP>
> NR Log Phy Mask Trig IRR Pol Stat Dest Deli Vect:
> 00 000 00 1 0 0 0 0 0 0 00
> 14 000 00 1 0 0 0 0 0 0 00
> 17 000 00 1 0 0 0 0 0 0 00
<SNIP>
Indeed, IRQ22 does have the highest priority in your system.
(BTW, 17 = 0x11)
It was not marked as such in my system. 17 was marked 0x00. None the less,
it wouldn't change thing much. (0x00 vs. 0x11)
And in APIC mode, Linux doesn't use interrupt 0 for the timer (vector
0 is reserved, so interrupts 0, 20, and 23 are unused). Instead, the
local APIC timer is used (this is the "LOC:" line in
/proc/interrupts).
Ah! Ok, that's good info although my system sort of makes it look like LOC:
and IRQ0: are the same thing since they always have the same number of
interrupts.
<SNIP>
The APIC mode affects PCI interrupts only. The so-called 'legacy'
devices still use interrupts below 16, and the mapping from device to
interrupt number doesn't change. (Actually, it can be changed, but
the configuration of the Super-I/O chip is done only by the BIOS.)
OK, so then the real question is how does APIC mode change the relationship
between all of the older 'legacy' devices and the PCI bus. It's not
difficult to show, so let's map this out, old style vs. APIC style. I'll
show the highest priority interrupts at the top of the list (legacy style)
since I expect that someone like Jan Depner might be reading this and
possibly someday it would make it onto his pages. I'll add an APIC column
for what I think I'm reading in your words and then we'll correct my
misunderstanding or your POV.
Legacy Function APIC Style
IRQ255
...
IRQ16 PCI slots??????
IRQ0 Timer Timer
IRQ1 Keyboard Keyboard
IRQ2 Cascade->IRQ8-15 Cascade
IRQ8 RTC RTC
IRQ9 PCI
IRQ10 PCI
IRQ11 PCI/VGA
IRQ12 PS/2 Mouse PS/2 Mouse
IRQ13 (Old FPU)
IRQ14 IDE0 IDE0
IRQ15 IDE1 IDE1
IRQ3 Com2/PCI Com2
IRQ4 Com1/PCI Com1
IRQ5 Parallel/PCI Parallel
IRQ6 Floppy Floppy
IRQ7 Printer/PCI Printer
Now, my point is that I do not think/believe/agree that the PCI slots are
intended to have higher priority than the Timer or the keyboard. I could
certainly be wrong, but to me it doesn't make sense. On the other hand, I
could certainly agree with the idea that all of the APIC stuff could link in
around IRQ9 (like it does on an XP machine) with a second level of priority
assigned by the vector in the table.
I am just not sure which you are suggesting is true.
Notes for casual readers:
a) I add PCI to IRQs 3, 4, 5 & 7 from personal experience. Not all
motherboards support this.
b) I do not show onboard devices that may share interrupts, such as USB, USB
2.0 or 1394. Consult your motherboard manual or 'lspci -v' for more info on
your system. Manufacturers are free to rearrange most anything if they don't
care about DOS compatibility.
c) VGA interrupts are often shared with a PCI slot. On many systems the
interrupt number can be reassigned. On many of my legacy systems I run it at
IRQ11.
<SNIP>
Well, I think all these technical details obscured the point I was
trying to make, which is that, for all practical purposes, interrupt
priorities don't matter when tuning a sound card.
I think you wouldn't say this if you placed an active Gigabit Ethernet
adapter at interrupt 22 and a sound card at interrupt 21. Maybe that's not
practical enough
What about a 10/100 Ethernet at 22, a 1394 adapter at 21, maybe a USB
controller at 20 and your sound card at 19. Over time my experience is that
you will see xruns. Change the order to sound card at 22 and you see fewer
xruns. Or that's my experience.
Regards,
Clemens
With best regards to you too!
- Mark