andy baxter wrote:
The specific problem I'm trying to solve is that
the firewire card in
the laptop is on the same irq as the onboard sound card and one of the
usb ports:
17: 271 120 IO-APIC-fasteoi uhci_hcd:usb6, HDA Intel, ohci1394
[USB] Buses 1 and 2 are used by plug-in devices; 3 is used by onboard
peripherals, and the rest seem to be unused, so I assume that it doesn't
matter that usb6 is shared; only the sound-card.
When an interrupt on line 17 arrives, the kernel asks all attached
drivers whether their device needs servicing.
Big latencies usually are the result of long-running interrupt handlers,
so an unused device does not matter much, but these interrupt checks
still are unneeded work.
Please note that UHCI and EHCI controllers share ports; UHCI is for
USB 1.x devices, EHCI, for 2.0 ones. Therefore, one of your ports
will be usb6 when you connect a full- or low-speed device. (Only very
incompetent laptop makers wouldn't deactivate unused controllers.)
Is what you're saying that the only way round the
problem is to disable
the other devices on that irq altogether?
I'm not sure whether those other interrupt handlers are much of
a problem, but if they are, yes.
Please note that shared interrupts are not the only latency source;
interrupt handlers for any device (or system management interrupt
handlers installed by the BIOS) could block the CPU for too long.
And just to show off: here is my /proc/interrupts, with four PCI(e) cards:
:-)
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5
0: 135 0 0 7 779 205506 IO-APIC-edge
timer
1: 1 0 0 0 9 7300 IO-APIC-edge
i8042
4: 0 0 0 0 0 2 IO-APIC-edge
7: 0 0 0 0 0 0 IO-APIC-edge
parport0
9: 0 0 0 0 0 0 IO-APIC-fasteoi
acpi
14: 0 0 0 0 1 53 IO-APIC-edge
pata_atiixp
15: 0 0 0 0 0 0 IO-APIC-edge
pata_atiixp
16: 0 0 0 0 3 885 IO-APIC-fasteoi
hda_intel
17: 0 0 0 0 0 5 IO-APIC-fasteoi
firewire_ohci
18: 0 0 0 0 2 1712 IO-APIC-fasteoi
radeon
19: 0 0 0 0 2 18 IO-APIC-fasteoi
hda_intel
20: 0 0 0 0 134 42418 IO-APIC-fasteoi
oxygen
21: 0 0 0 0 0 0 IO-APIC-fasteoi
EMU10K1
22: 0 0 0 0 0 0 IO-APIC-fasteoi
YMFPCI
23: 0 0 0 0 0 5 IO-APIC-fasteoi
firewire_ohci
40: 565565 0 0 0 0 0 HPET_MSI-edge
hpet2
41: 0 0 0 0 0 0 PCI-MSI-edge
aerdrv, PCIe PME
42: 0 0 0 0 0 0 PCI-MSI-edge
aerdrv, PCIe PME
43: 0 0 0 0 36 15254 PCI-MSI-edge
ahci
44: 0 0 0 0 0 0 PCI-MSI-edge
eth0
45: 0 0 0 0 16 713 PCI-MSI-edge
ehci_hcd:usb1
46: 0 0 0 0 0 0 PCI-MSI-edge
ehci_hcd:usb2
47: 0 0 0 0 0 804 PCI-MSI-edge
ohci_hcd:usb3
48: 0 0 0 0 0 40 PCI-MSI-edge
ohci_hcd:usb4
49: 0 0 0 0 0 1 PCI-MSI-edge
ohci_hcd:usb5
50: 0 0 0 0 0 1 PCI-MSI-edge
ohci_hcd:usb6
51: 0 0 0 0 0 0 PCI-MSI-edge
ohci_hcd:usb7
NMI: 0 0 0 0 0 0 Non-maskable
interrupts
LOC: 159 538453 575689 528275 507949 690032 Local timer
interrupts
SPU: 0 0 0 0 0 0 Spurious
interrupts
PMI: 0 0 0 0 0 0 Performance
monitoring interrupts
IWI: 0 0 0 0 0 0 IRQ work
interrupts
RES: 34599 25532 23354 12203 15350 13619 Rescheduling
interrupts
CAL: 1122 7777 981 718 1188 11005 Function call
interrupts
TLB: 279 8399 908 624 485 550 TLB shootdowns
THR: 0 0 0 0 0 0 Threshold APIC
interrupts
MCE: 0 0 0 0 0 0 Machine check
exceptions
MCP: 23 23 23 23 23 23 Machine check
polls
ERR: 0
MIS: 0
Regards,
Clemens