IRQ 16: nobody cared Problem beim Einsatz von mehreren NVIDIA Grafikkarten beheben

Aus Wiki Thomas-Krenn.AG
Wechseln zu: Navigation, Suche

Beim Einsatz von mehreren NVIDIA Grafikkarten in einem System kann es zum Fehler irq 16: nobody cared kommen wenn der Interrupt einer Grafikkarte aufgrund von Interrupt Sharing auch von einem anderen Subsystem (z.B. USB) genutzt wird. Das Ergänzen des Kernel Parameters acpi=debug kann dieses Problem lösen.

Inhaltsverzeichnis

Problem

Der Betrieb von mehreren NVIDIA GTX460 Grafikkarten führt nach ein paar Sekunden bis Minuten zu einem Absturz der Grafikkausabe. Die Symptome sind dabei:

/var/log/messages zeigt die folgende Fehlermeldung:

kernel: [  473.230583] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  260.19.12  Fri Oct  8 11:17:08 PDT 2010
kernel: [ 4861.031152] irq 16: nobody cared (try booting with the "irqpoll" option)
kernel: [ 4861.031155] Pid: 0, comm: swapper Tainted: P           2.6.32-bpo.3-amd64 #1
kernel: [ 4861.031156] Call Trace:
kernel: [ 4861.031157]  <IRQ>  [<ffffffff8106bf33>] ? ktime_get+0x5c/0xb7
kernel: [ 4861.031165]  [<ffffffff81094c99>] ? __report_bad_irq+0x30/0x7d
kernel: [ 4861.031167]  [<ffffffff81094deb>] ? note_interrupt+0x105/0x16e
kernel: [ 4861.031171]  [<ffffffff810170d1>] ? read_tsc+0xa/0x20
kernel: [ 4861.031173]  [<ffffffff81095450>] ? handle_fasteoi_irq+0x93/0xb5
kernel: [ 4861.031174]  [<ffffffff81013957>] ? handle_irq+0x17/0x1d
kernel: [ 4861.031176]  [<ffffffff81012fb1>] ? do_IRQ+0x57/0xb6
kernel: [ 4861.031178]  [<ffffffff810114d3>] ? ret_from_intr+0x0/0x11
kernel: [ 4861.031179]  <EOI>  [<ffffffffa022a4e6>] ? acpi_idle_enter_bm+0x26a/0x29e [processor]
kernel: [ 4861.031189]  [<ffffffffa022a4df>] ? acpi_idle_enter_bm+0x263/0x29e [processor]
kernel: [ 4861.031192]  [<ffffffff8122dadb>] ? cpuidle_idle_call+0x95/0xee
kernel: [ 4861.031195]  [<ffffffff8100fe90>] ? cpu_idle+0xa2/0xda
kernel: [ 4861.031198]  [<ffffffff814d4140>] ? early_idt_handler+0x0/0x71
kernel: [ 4861.031200]  [<ffffffff814d4cd7>] ? start_kernel+0x3d0/0x3dc
kernel: [ 4861.031202]  [<ffffffff814d43b7>] ? x86_64_start_kernel+0xf9/0x106
kernel: [ 4861.031203] handlers:
kernel: [ 4861.031204] [<ffffffffa002473c>] (usb_hcd_irq+0x0/0x7e [usbcore])
kernel: [ 4861.031214] [<ffffffffa083a57a>] (nv_kern_isr+0x0/0x57 [nvidia])
kernel: [ 4861.031333] [<ffffffffa083a57a>] (nv_kern_isr+0x0/0x57 [nvidia])
kernel: [ 4861.031415] [<ffffffffa083a57a>] (nv_kern_isr+0x0/0x57 [nvidia])
kernel: [ 4861.031497] [<ffffffffa083a57a>] (nv_kern_isr+0x0/0x57 [nvidia])
kernel: [ 4861.031579] Disabling IRQ #16
kernel: [ 5335.503711] NVRM: Xid (0002:00): 16, Head 00000001 Count 00000000
kernel: [ 5336.502372] NVRM: Xid (0002:00): 16, Head 00000000 Count 00000006
kernel: [ 5340.497034] NVRM: os_pci_init_handle: invalid context!

Betroffene Hardware und Software

Das Problem wurde auf folgendem System beobachtet, kann potentiell aber auch auf anderen System auftreten:

Lösung

Eine kurzfristige Lösung war zuerst im BIOS das USB-Subsystem auf disabled zu stellen, da sich offenbar die Grafikkarten und USB den IRQ16 teilen.

Bei aktiviertem USB hat das Ergänzen des Kernel Parameters acpi=debug das Problem dauerhaft gelöst.

Ursache

Eine definitive Ursache ist nicht bekannt. Vermutlich haben die Grafikkarten ein Timing-Problem und nehmen das IRQ-Signal nicht schnell genug vom Bus nach dem die ISR (Interrupt Service Routine) abgearbeitet wurde. Dadurch wird ein neuer IRQ ausgelöst, für den sich dann keine Komponente mehr zuständig fühlt. Durch den Parameter acpi=debug werden im Kernel einige wenige CPU-Instruktionen beim Abarbeiten der ISR zusätzlich ausgeführt, was dann ein paar Nanosekunden dauert. Während diesen wenigen Nanosekunden nimmt die Grafikkarte das IRQ-Signal weg vom Bus - somit kommt es zu keinem fehlerhaften Interrupt mehr.

Credit

Wir danken dem FlightGear Projekt für diesen wertvollen Hinweis.


Share/Save/Bookmark  Feedback zu diesem Artikel geben
Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Kategorien
Drucken/exportieren
Werkzeuge