PCIe obsługuje różne mechanizmy raportowania błędów , i widzę, jak sterownik urządzenia łączy się z tymi możliwościami, aby obsługiwać określone typy błędów i ponownie inicjować dane urządzenie w razie potrzeby w razie błędów.
Jednak w jaki sposób błąd odczytu PCIe byłby wskazywany programowi przestrzeni użytkownika czytającemu z przestrzeni adresowej odwzorowanej w pamięci, w przypadku, gdy odczyt nie może być spełniony, np. Z powodu błędu magistrali lub odłączonego urządzenia typu hot plug?
O ile rozumiem, istnieją dwie podstawowe możliwości: albo niepoprawne dane są propagowane do aplikacji do odczytu (np. Wszystkie odczyty zwrócą 0x00 lub 0xFF), lub błąd PCI spowoduje błąd lub przerwanie procesora, który będzie obsługiwane przez jądro i tłumaczone na sygnał (jak SIGBUS na Uniksie).
(W przypadku zapisu, prawdopodobnie nie zadziałałoby to, przynajmniej jeśli zostałyby zaimplementowane jako zaksięgowane transakcje PCIe, ponieważ aplikacja przestrzeni użytkownika nie byłaby blokowana w dostępie do pamięci: Sygnał, jeśli w ogóle dostarczony, przybyłby asynchronicznie jakiś czas po awarii pisać.)
To ostatnie wydaje się bezpieczniejszym wyborem, ale znalazłem wzmiankę o wysyłaniu zarówno sygnału, jak i specjalnej wartości ( tu i tutaj ).
Moje pytanie nie ogranicza się do konkretnego systemu, ale ponieważ implementacja błędów PCIe prawdopodobnie zależy w dużym stopniu zarówno od sprzętu, jak i architektury jądra danego systemu, odpowiedzi specyficzne dla systemu również byłyby bardzo mile widziane.
źródło
ff
wróciłem w tym przypadku do odczytu, więc zakładam, że odpowiedź brzmi „oba”.