Stary INTx przerywa dwa problematyczne właściwości:
- Każdy sygnał INTx wymaga oddzielnej linii sygnału w sprzęcie; i
- sygnał przerwania jest niezależny od innych sygnałów danych i jest wysyłany asynchronicznie.
Konsekwencje są takie, że
- wiele urządzeń i sterowniki muszą być zdolne do dzielenia przerwań (przerwanie obsługi musi sprawdzić, czy jego urządzenie rzeczywiście podniósł przerwanie); i
- gdy kierowca otrzyma przerwanie, to musi zrobić odczytu rejestru jakiegoś urządzenia, aby zapewnić, że każda poprzednia DMA pisze wykonane przez urządzenie są widoczne na CPU.
Zazwyczaj oba przypadki są obsługiwane przez kierowcę czytającego jego rejestr statusu przerwań.
Message-sygnalizowane Przerwania nie wymagają oddzielnej linii sygnału, ale są wysyłane jako wiadomość poprzez magistralę danych. Oznacza to, że ten sam sprzęt może obsługiwać wiele więcej przerwań (tak dzieląc to nie jest konieczne), a przerwanie wiadomość jest automatycznie synchronizowany z dowolnego dostępu DMA. W konsekwencji przerywnik nie musi nic robić; Przerwanie jest gwarantowane, że pochodzi z jego urządzenia, a dane DMA są już zapewnione.
Jeśli niektóre sterowniki zostały zapisane w celu udostępnienia niektórych MSI, przerywnik musiałby ponownie sprawdzić, czy przerwanie faktycznie pochodzi z własnego urządzenia i nie będzie żadnej przewagi nad przerwaniami INTx.
inicjatyw wielostronnych nie są udostępniane, ponieważ nie byłoby możliwe, ale ponieważ nie jest konieczne.
Należy pamiętać, że dzielenie MSI jest rzeczywiście możliwe: jak widać w tym fragment z /proc/interrupts
, Advanced Error Reporting, Power Management Events, a kierowcy hotplugging dzielić jedno przerwanie:
64: 0 0 PCI-MSI-edge aerdrv, PCIe PME, pciehp
te sterowniki w rzeczywistości są podłączone do urządzenia z tym samym, ale nadal zachowują się podobnie do sterowników INTx, tj. rejestrują przerwanie z IRQF_SHARED
, a procedury obsługi przerwania sprawdzają, czy była to ich własna funkcja, która wywołała przerwanie.