2015-12-20 27 views
6

Czy każdy podmiot może powiedzieć, dlaczego przerwań MSI nie można udostępniać w systemie Linux.Dlaczego przerwania MSI nie są udostępniane?

Przerwania oparte na kodzie PIN mogą być współużytkowane przez urządzenia, ale przerwania MSI nie są udostępniane przez urządzenia, każde urządzenie otrzymuje swój własny numer IRQ MSI. Dlaczego nie można udostępniać przerwań MSI?

Odpowiedz

4

przerwania udostępniania jest hack z powodu ograniczonych zasobów, jak nie wystarczy fizyczne linii IRQ dla każdego urządzenia, które chce uwagę. Jeśli przerwania są reprezentowane przez wiadomości, które mają dużą przestrzeń identyfikatora, dlaczego miałbyś to zrobić?

"To" oznacza: nadanie im tej samej tożsamości, aby urządzenia musiały zostać sprawdzone, aby dowiedzieć się, które z tych zderzających się z tym samym identyfikatorem zostały faktycznie przerwane.

W rzeczywistości czasami chcielibyśmy mieć wiele przerwań dla jednego urządzenia. Na przykład, przydatne jest, jeśli ID przerwania informuje nas nie tylko o tym, które urządzenie zostało przerwane również z tego powodu: jak to jest z powodu nadejścia wejścia lub opróżnienia bufora wyjściowego? Jeśli linie przerwań są "tanie", ponieważ są to tylko identyfikatory oprogramowania z dużą ilością bitów, możemy to mieć.

5

Stary INTx przerywa dwa problematyczne właściwości:

  1. Każdy sygnał INTx wymaga oddzielnej linii sygnału w sprzęcie; i
  2. sygnał przerwania jest niezależny od innych sygnałów danych i jest wysyłany asynchronicznie.

Konsekwencje są takie, że

  1. 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
  2. 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.