Hallo,
also, da scheinen ein paar Irrtümer rumzugeistern, deshalb mal alles zusammengefasst:

PCI kann Interrupt-Sharing, weil die Interrupts nicht per Level (also logisch Null 
statt 
logisch 1) 
gemeldet werden, sondern per Flanke. Ich glaube sogar, dass ist die ansteigende 
Flanke. 
Da der Ruhepegel aber auch auf der Eins ist, muss ein Baustein, der einen Interrupt 
anfordern 
will, erst auf die Null schalten (dann ist die Leitung natürlich belegt, da eine 
weitere Null 
natürlich nicht auffällt), dann aber auf die Eins zurück, weil erst diese Flanke den 
Interrupt tatsächlich auslöst. ISA hatte noch Pegeltriggerung und damit sich der PIC 
(der 
Interrupt-Empfänger vor der CPU) nicht verhedderte, musste der Pegel sogar bis zum 
Ende der Service-Routine stehen bleiben.

Jeder On-Board-Baustein hat einen fest zugeordneten Interrupt, an dem sich in der 
Regel auch nicht rütteln lässt. Das betrifft zum Beispiel im vorliegenden Fall 
wahrscheinlich den USB-Teil des Ganzen (außer, das ist eine Steckkarte).

Ein eventueller PCMCIA-Slot (ich denke mal, eth0 ist sowas) ist natürlich auch fest an 
einen IRQ geklemmt (durch die PCMCIA-Schnittstelle).

Steckkarten sind auch festgelegt, aber auf einen bestimmten PCI-Interrupt. Das sind 
vier Kontakte an den Steckern, die INT A bis INT D heißen. Die sind alle vier an allen 
vier Slots zu finden, insgesamt hat PCI aber auch nur vier System-Interrupts zum 
Verteilen. Deshalb werden diese INT-Leitungen der Slots geschickt miteinander 
verdrahtet (INT A von Slot 1 mit INT B von Slot 2 usw.) Die genaue Zuordnung macht 
jeder Hersteller nach seinem Gusto. Bei Laptops sind ja meist keine oder nur wenige 
PCI-Slots da. Da wird dieses Problem also weniger. Es ist aber klar: 
Angenommen, ich habe zwei Karten a und b. Bei a ist INT A benutzt, bei b INT B (die 
Norm verlangt zwar, dass alle INT A benutzen, außer bei Kombikarten, aber da hält sich 
nicht jeder dran). Secke ich Karte a in Slot 1 und Karte b in den Zweier, dann kann es 
sein, dass die beiden auf dem gleichen IRQ auftauchen, denn Slot 1 INT A ist oft mit 
Slot 
2 INT B zusammen. Auch ein Umsetzen des PCI-INT auf einen anderen IRQ nützt 
nichts, es trifft beide. Tauschen aber hilft, denn Slot 1 INT B ist umgekehrt eher 
selten 
dann auch wieder mit Slot 2 INT A zusammen (zumindest nicht bei diesem MB). 

Ein zu massiv geshareter IRQ kann sehr wohl zu Problemen führen, denn innerhalb der 
Handler-Routine (ein Vor-Handler ist dafür nötig) muss der tatsächlich um den 
Interrupt 
nachsuchende Baustein ja erst per Polling ermittelt werden. Das stört manchmal den 
laufenden Betrieb, da das betreffende Register bei den heute meist nur aus einem Chip 
mit ein wenig Kleinkram drumherum bestehenden Steckkarten eben in diesem Chip ist. 
Da kann es dann sein, dass der Zugriff auf das Interrupt-Pending-Flag über eben den 
internen Datenbus des Peripherie-Chips läuft, der gerade eigentlich anderweitig 
benötigt 
wird. 

Dann stört sowas, vor allem, wenn dieser Chip eben gerade nicht bedient werden wollte, 
weil er eigentlich schon voll mit Arbeit eingedeckt ist. USB ist da ein gewisser 
Störfaktor, 
da diese Chips (warum auch immer) recht viele Interrupts erzeugen. Außerdem stimmt 
es nicht ganz, dass zwei Interrupts nicht parallel laufen können, aber bei geshareten 
Interrupts muss das nicht klappen. Der erste Interrupt aus diesem Kanal läuft ja noch, 
also ist unter Umständen das Interrupt-Pending-Flag dieses entsprechenden Bausteins 
gesetzt. Bei einem erneuten Interrupt auf diesem IRQ wird ja auch von Neuem gepollt 
und dann irrigerweise dieses gesetzte Interrupt-Pending-Flag für ein Zeichen einer 
neuen Anforderung gehalten, dabei wurde die dazu gehörende Runde der Service-
Routine gerade unterbrochen. So kommt dann der den Interrupt tatsächlich brauchende 
Baustein nie zu seinem Service, und der andere wird nie fertig mit dieser Schleife. Ob 
sowas passiert, hängt natürlich von der Reihenfolge beim Pollen ab (und die wiederrum 
von der Reihenfolge des Einbindens der Hardware). 

Auch bei PCI gibt es also durchaus ein paar Klippen zu Umschiffen. 

Wenn die Soundkarte im Slot steckt und da ist noch einer, wäre ein Tauschen des Slots 
die beste Lösung für das Problem. Sonst bleibt eigentlich nur noch eine teurere 
Soundkarte mit mehr Hardware für den Sound, die mehr alleine machen kann. Dann 
fallen zumindest die Störungen durch falsches Polling (siehe direkt obendrüber) nicht 
so 
sehr auf. Auch kann es dann sein, dass auf dem internen Bus ein Parallelbetrieb von 
CPU-Zugriffen und internem Verkehr möglich ist. Dann stört auch das Polling nicht 
mehr. 

Tschüß

Manfred

From:                   Hans Freitag <[EMAIL PROTECTED]>
To:                     [EMAIL PROTECTED]
Subject:                Re: [PUG] Alles auf IRQ 11
Send reply to:          [EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]?subject=subscribe>
        <mailto:[EMAIL PROTECTED]?subject=unsubscribe>
Date sent:              Fri, 7 Feb 2003 09:45:21 +0100

> On Fri, Feb 07, 2003 at 09:01:26AM +0100, Valentin Heinitz wrote:
> > Aber wenn ich so nachdenke, arbeitet CPU beim Intrrupt sowieso eine Interrupt
> > Service Routine ab. Die Nummer ist dabei voellig egal. Zwei Interrupt Service
> > Routinen koennen sowieso nicht gleichzeitig ausgefuert werden. 
> 
> Das problem ist glaube ich eher zu erkennen welche Interrupt service
> routine ausgeführt werden soll.
> 
> 
> -- 
> May the source be with you!
> 
> ----------------------------------------------------------------------------
> PUG - Penguin User Group Wiesbaden - http://www.pug.org


----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an