Nicht alle verwendeten Interrupts in /proc/interrupts zu sehen
Hallo, Beispiel: user@linux:~> cat /proc/interrupts CPU0 0: 76498 XT-PIC timer 1: 747 XT-PIC keyboard 2: 0 XT-PIC cascade 8: 3 XT-PIC rtc 10: 2214 XT-PIC HiSax 11: 1398 XT-PIC eth0, VIA686A 12: 1578 XT-PIC usb-uhci, usb-uhci 14: 304 XT-PIC ide0 15: 28500 XT-PIC ide1 NMI: 0 LOC: 0 ERR: 0 MIS: 0 Aber auch (lspci -v): 01:00.0 VGA compatible controller: nVidia Corporation NV11 [GeForce2 MX/MX 400] (rev a1) (prog-if 00 [VGA]) Subsystem: Elsa AG: Unknown device 0c60 Flags: bus master, 66Mhz, medium devsel, latency 32, IRQ 10 ^^^^^^ Memory at dc000000 (32-bit, non-prefetchable) [size=16M] Memory at d0000000 (32-bit, prefetchable) [size=128M] Expansion ROM at <unassigned> [disabled] [size=64K] Capabilities: <available only to root> Das Grafikkarten Ihren Interrup (wenn sie einen nutzen) nicht immer über /proc/interrupts preisgeben ist mir schon lange bekannt. Vermutlich lässt sich tatsächlich auf über AGP angeschlossene Grafikkarten beschränken. Zwei Fragen: 1. Gibt es noch andere Geräte(klassen), die die von ihnen benutzen Interrupts nicht über /proc/interrupts preisgeben? und vor allem: 2. Warum ist der Interrupt der Grafikkarte nicht in /proc/interrupts zu sehen? Ich bin natürlich an einer Erklärung interessiert die darüber hinaus geht festzustellen, dass das bei AGP-Karten eben so ist. Schöne Grüße aus Bremen hartmut
Hartmut Meyer wrote:
2. Warum ist der Interrupt der Grafikkarte nicht in /proc/interrupts zu sehen? Ich bin natürlich an einer Erklärung interessiert die darüber hinaus geht festzustellen, dass das bei AGP-Karten eben so ist.
Schau mal in Dein BIOS, meistens gibt es da einen Schalter womit man den irq für grafikkarten ausschalten kann. Würde mich interessieren, ob es den bei Dir gibt, und wie der steht. -- Andreas
Hallo, Am Wed, 24 Sep 2003, Hartmut Meyer schrieb:
Das Grafikkarten Ihren Interrup (wenn sie einen nutzen) nicht immer über /proc/interrupts preisgeben ist mir schon lange bekannt. Vermutlich lässt sich tatsächlich auf über AGP angeschlossene Grafikkarten beschränken.
Nein. # lspci -v | sed -n '/VGA/,/IRQ/p' 00:0a.0 VGA compatible controller: Matrox Graphics, Inc. MGA 1064SG [Mystique] (rev 02) (prog-if 00 [VGA]) Flags: bus master, stepping, medium devsel, latency 32, IRQ 12 # cat /proc/interrupts CPU0 0: 428395 XT-PIC timer 1: 14048 XT-PIC keyboard 2: 0 XT-PIC cascade 4: 22348 XT-PIC serial 7: 0 XT-PIC MAD16 WSS 8: 2 XT-PIC rtc 9: 20 XT-PIC bttv 10: 3698 XT-PIC eth0 11: 0 XT-PIC soundblaster 14: 103677 XT-PIC ide0 15: 48 XT-PIC ide1
Zwei Fragen:
1. Gibt es noch andere Geräte(klassen), die die von ihnen benutzen Interrupts nicht über /proc/interrupts preisgeben?
00:08.0 RAID bus controller: Promise Technology, Inc. 20246 (rev 01) Flags: bus master, medium devsel, latency 32, IRQ 9 [der ist allerdings nur eingesteckt -- ohne Geraet wird ide2/3 nicht gebraucht und somit ist es klar, dass der IRQ nicht in /proc/interrupts auftaucht. Ob der sich mit Geraet meldet weiss ich nicht mehr] Und bei 00:0b.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RT8139 (rev 10) Subsystem: Realtek Semiconductor Co., Ltd. RT8139 Flags: bus master, medium devsel, latency 32, IRQ 10 reicht ein "Modul laden" nicht, das Device muss auch aktiviert werden (ifconfig ... up).
und vor allem:
2. Warum ist der Interrupt der Grafikkarte nicht in /proc/interrupts zu sehen? Ich bin natürlich an einer Erklärung interessiert die darüber hinaus geht festzustellen, dass das bei AGP-Karten eben so ist.
Und offenbar auch bei PCI-Karten... -dnh, der es nicht leiden kann, wenn er die IRQs nicht per Hand verteilen kann. "Spassig" wird's besonders dann, wenn bestimmte HW nur auf bestimmten IRQs/IO-Ports kann... "Spassig", wenn der Automatismus VGA, bttv, Sound, usw. auf einen IRQ legt... -- 175: NT-Admin Turnschuhe, Schweissfüsse Weiß, wo der Computer angeht und daß man Probleme durch Neustart, Neuinstallation oder Neubelegung eines 4000-DM-Kurses in Unterschleißheim lösen kann. (Anders Henke)
On Wed, 2003-09-24 at 20:35, Hartmut Meyer wrote:
Hallo,
Beispiel:
user@linux:~> cat /proc/interrupts CPU0 0: 76498 XT-PIC timer 1: 747 XT-PIC keyboard 2: 0 XT-PIC cascade 8: 3 XT-PIC rtc 10: 2214 XT-PIC HiSax 11: 1398 XT-PIC eth0, VIA686A 12: 1578 XT-PIC usb-uhci, usb-uhci 14: 304 XT-PIC ide0 15: 28500 XT-PIC ide1 NMI: 0 LOC: 0 ERR: 0 MIS: 0
Aber auch (lspci -v):
01:00.0 VGA compatible controller: nVidia Corporation NV11 [GeForce2 MX/MX 400] (rev a1) (prog-if 00 [VGA]) Subsystem: Elsa AG: Unknown device 0c60 Flags: bus master, 66Mhz, medium devsel, latency 32, IRQ 10 ^^^^^^ Memory at dc000000 (32-bit, non-prefetchable) [size=16M] Memory at d0000000 (32-bit, prefetchable) [size=128M] Expansion ROM at <unassigned> [disabled] [size=64K] Capabilities: <available only to root>
Das Grafikkarten Ihren Interrup (wenn sie einen nutzen) nicht immer über /proc/interrupts preisgeben ist mir schon lange bekannt. Vermutlich lässt sich tatsächlich auf über AGP angeschlossene Grafikkarten beschränken.
Hmm, korrigiere mich wenn ich falsch liege, aber soweit ich mich errinnere, gilt * AGP ist lediglich eine "Eigenschaft" (Capability) eines am PCI-Bus hängenden Gerätes, d.h. aus Sicht von CPU/Kernel ein "PCI-Gerät" unter mehreren. * /proc/interrupts Einträge kommen dadurch zustande, dass sein ein Treiber einen Interrupt-Handler (ISR) für einen bestimmten Interrupt registriert. Daraus folgere ich, dass zwischen der Ausgabe von lspci (Abfrage des Status der Geräte am PCI-Bus) und /proc/interrupts (Kernel-interner Status der IRQ->ISR Zuweisungen) zunächst einmal keine direkte Kopplung besteht. Jegliche IRQ->ISR Zuweisung/Treiberregistrierung findet im Kernel anhand von Verhandlungen mit den Geräten am PCI-Bus statt. Das würde heissen, dass deine Beobachtung durch einen oder mehrere Fehler in der Kette Kernel->Treiber->ISR->BIOS(?)->Bus->BIOS/Firmware im Gerät zustande kommt. Die entscheidende Frage wäre "wo und wann"?
Zwei Fragen:
1. Gibt es noch andere Geräte(klassen), die die von ihnen benutzen Interrupts nicht über /proc/interrupts preisgeben? Hmm, diese Frage verwirrt mich. Meiner Meinung nach sind es nicht die Geräte (PCI-Devices), sondern der Kernel der Interrupt-Handler/ISR zuweist.
Auf jeden Fall zeigt deine Beobachtung eine Inkonsistenz zwischen Kernel und PCI-Bus auf. [Zu "Vor-AGP-Zeiten" hatte ich mal eine PCI-GraKa, die einen Jumper besass, mit dem auf der GraKa der "Interrupt-Betrieb" ein/abgeschaltet wurde. Aus irgendeinem Grund klappte das Zusammenspiel zw. Kernel und GraKa nicht, was genau, daran errinnere ich mich nicht mehr. Ich errinnere mich nur noch daran, dass ich irgendwo bez. IRQs (GraKa, Kernel, BIOS, X11-Treiber) eingreifen musste um diese Karte zum Laufen zu bewegen.]
und vor allem:
2. Warum ist der Interrupt der Grafikkarte nicht in /proc/interrupts zu sehen? Siehe oben. Ich mutmasse: Weil der Kernel dem IRQ keine ISR zugewiesen hat.
Ich bin natürlich an einer Erklärung interessiert die darüber hinaus geht festzustellen, dass das bei AGP-Karten eben so ist. Wie gesagt, ich sehe keinen direkten Zusammenhang zu AGP, ein Problem mit PCI i.A., vermutlich bei der Initialisierung der PCI-Geräte (evtl. im Mainboard BIOS).
Ralf
Ralf Corsepius schrieb:
On Wed, 2003-09-24 at 20:35, Hartmut Meyer wrote:
[...] 2. Warum ist der Interrupt der Grafikkarte nicht in /proc/interrupts zu sehen?
Siehe oben. Ich mutmasse: Weil der Kernel dem IRQ keine ISR zugewiesen hat.
Aber wie soll sie dann funktionieren? Du kannst die Grafikkarte ja wohl kaum im Polling-Betrieb betreiben. Und zum Handling der IRQs muss definitiv eine Interrupt-ServiceRoutine (ISR) existieren. Bei der Kernel-Routine request_irq(...) wird auch der Name uebergeben; dieser wird vom proc-Dateisystem benutzt, um den Eigentuemer des IRQs anzuzeigen. Das gibt dann z.B. das "rtc" oder "ide0" bei der Ausgabe von /proc/interrupts. Koennte mir vorstellen, dass hier et- was schief laeuft und beim Installieren der IRQs kein Name oder so uebergeben wird und deswegen auch keine Ausgabe in /proc/interrupts auftaucht. Ist aber eine reine Vermutung... Wuerde letztendlich be- deuten, dass schon IRQs fuer das Geraet verwendet werden und der Betrieb auch gut funktioniert und eine ISR existiert, lediglich die Ausgabe in /proc/interrupts fehlt. CU, Thomson
On Sat, 2003-09-27 at 09:47, Thomas Hertweck wrote:
Ralf Corsepius schrieb:
On Wed, 2003-09-24 at 20:35, Hartmut Meyer wrote:
[...] 2. Warum ist der Interrupt der Grafikkarte nicht in /proc/interrupts zu sehen?
Siehe oben. Ich mutmasse: Weil der Kernel dem IRQ keine ISR zugewiesen hat.
Aber wie soll sie dann funktionieren? Du kannst die Grafikkarte ja wohl kaum im Polling-Betrieb betreiben. Oh doch, das geht durchaus - Betrieb von GraKa ohne Interrupt oder mit abgeschalteten Interrupts sind alles andere als selten.
Insb. war es zu ISA-Zeiten und zu Zeiten als Linux noch kein IRQ-Sharing beherrschte, durchaus nicht unüblich, IRQ-Betrieb auf Grafikkarten abzuschalten, um freie Interrupts zu gewinnen. BTW, Hartmut, eines meiner Systeme zeigt ebenfalls das von Dir beschriebene Phänomen: # lspci -v .. 01:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA 2164W [Millennium II] AGP (prog-if 00 [VGA]) Subsystem: Matrox Graphics, Inc.: Unknown device 0100 Flags: bus master, 66Mhz, medium devsel, latency 64, IRQ 16 Memory at e8000000 (32-bit, prefetchable) [size=16M] .. # cat /proc/interrupts CPU0 CPU1 0: 828874 2214854 IO-APIC-edge timer 1: 5 1 IO-APIC-edge keyboard 2: 0 0 XT-PIC cascade 8: 0 1 IO-APIC-edge rtc 12: 3 17 IO-APIC-edge PS/2 Mouse 17: 92514 93271 IO-APIC-level sym53c8xx 18: 280058 280984 IO-APIC-level eth0 NMI: 0 0 LOC: 3043716 3043715 ERR: 0 MIS: 0
Ralf Corsepius schrieb:
On Sat, 2003-09-27 at 09:47, Thomas Hertweck wrote:
[...] Aber wie soll sie dann funktionieren? Du kannst die Grafikkarte ja wohl kaum im Polling-Betrieb betreiben. Oh doch, das geht durchaus - Betrieb von GraKa ohne Interrupt oder mit abgeschalteten Interrupts sind alles andere als selten.
Insb. war es zu ISA-Zeiten und zu Zeiten als Linux noch kein IRQ-Sharing beherrschte, durchaus nicht unüblich, IRQ-Betrieb auf Grafikkarten abzuschalten, um freie Interrupts zu gewinnen.
Naja, die Zeiten sind ja nun doch vorbei :-)[1] Ich hatte hier uebrigens auch schon ein System, bei dem das Phaenomen auftrat, es ging dabei ebenfalls um eine Grafikkarte - das System ist aber momentan nicht mehr verfuegbar. Hat denn jemand ne Idee wie man rausfinden kann, ob nun tat- saechlich kein IRQ verwendet wird, oder ob nur die Ausgabe in /proc/interrupts fehlt? Vielleicht taugt ja z.B. xosview dazu. Bei mir hier leuchten z.B. die INTs 0 und 11 quasi stetig, und siehe da: 0: 153753 XT-PIC timer 11: 90761 XT-PIC nvidia Waere die Frage, wie das auf Systemen aussieht, wo ein Geraet nicht in /proc/interrupts auftaucht...!? Hat das evtl. auch noch etwas mit ACPI und Konsorten zu tun? CU, Th. [1]Nein, David, Dein System zaehlt nicht :-)))
Hallo, Am Mon, 29 Sep 2003, Thomas Hertweck schrieb: [IRQs in xosview]
Waere die Frage, wie das auf Systemen aussieht, wo ein Geraet nicht in /proc/interrupts auftaucht...!?
Bei mir ist Stille auf dem IRQ der GraKa... -dnh -- Jone's Law: The man who smiles when things go wrong has thought of someone to blame it on.
David Haller schrieb:
Am Mon, 29 Sep 2003, Thomas Hertweck schrieb: [IRQs in xosview]
Waere die Frage, wie das auf Systemen aussieht, wo ein Geraet nicht in /proc/interrupts auftaucht...!?
Bei mir ist Stille auf dem IRQ der GraKa...
Hmm, verwendet denn dann Deine GraKa ueberhaupt einen IRQ? Oder anderst gefragt: wenn der IRQ fuer die GraKa nicht in /proc/interrupts auftaucht, woher weisst Du dann, dass einer verwendet wird? Aeh, irgendwie ein Henne-Ei-Problem... CU, Th.
Hallo, Am Mon, 29 Sep 2003, Thomas Hertweck schrieb:
David Haller schrieb:
Am Mon, 29 Sep 2003, Thomas Hertweck schrieb: [IRQs in xosview]
Waere die Frage, wie das auf Systemen aussieht, wo ein Geraet nicht in /proc/interrupts auftaucht...!?
Bei mir ist Stille auf dem IRQ der GraKa...
Hmm, verwendet denn dann Deine GraKa ueberhaupt einen IRQ?
Soweit ich weiss schon...
Oder anderst gefragt: wenn der IRQ fuer die GraKa nicht in /proc/interrupts auftaucht, woher weisst Du dann, dass einer verwendet wird? Aeh, irgendwie ein Henne-Ei-Problem...
Jep. Hm. ==== dmesg ==== Console: colour VGA+ 80x25 mtrr: v1.40 (20010327) Richard Gooch (rgooch@atnf.csiro.au) mtrr: detected mtrr type: Intel matroxfb: Matrox Mystique (PCI) detected matroxfb: MTRR's turned on matroxfb: 800x600x32bpp (virtual: 800x1309) matroxfb: framebuffer at 0xDC000000, mapped to 0xd481f000, size 4194304 Console: switching to colour frame buffer device 100x37 fb0: MATROX VGA frame buffer device ==== ~.X.err ==== (--) SVGA: PCI: Matrox MGA 1064SG rev 2, Memory @ 0xdb000000, 0xdc000000 (--) SVGA: Linear framebuffer at 0xDC000000 (--) SVGA: MMIO registers at 0xDB000000 (--) SVGA: Video BIOS info block at 0x000c7e60 (--) SVGA: Found and verified enhanced Video BIOS info block Using BIOS value for maxPixelClock: 170000 kHz (**) SVGA: chipset: mga1064sg (**) SVGA: videoram: 4096k (**) SVGA: Option "dac_8_bit" (**) SVGA: Using 32 bpp, Depth 24, Color weight: 888 (--) SVGA: Maximum allowed dot-clock: 170.000 MHz (**) SVGA: Mode "1152x864@85": mode clock = 120.000 (**) SVGA: Mode "1152x864": mode clock = 143.620 (**) SVGA: Mode "1024x768": mode clock = 127.490 (**) SVGA: Mode "800x600@86": mode clock = 56.250 (**) SVGA: Mode "640x480@86": mode clock = 36.000 ==== Hm. Koennte sein, dass das doch alles via MMIO laeuft... Waere mir jedenfalls neu ;) -dnh --
Was ist der Unterschied zwischen Ameisen? je kleiner, desto beiß? Könnte. Wenn nicht auch, dann aber. [Bernd + Alex in suse-talk]
participants (5)
-
Andreas Winkelmann
-
David Haller
-
Hartmut Meyer
-
Ralf Corsepius
-
Thomas Hertweck