Zresetuj urządzenie PCI w systemie Linux


12

Czy istnieje ogólny sposób resetowania urządzenia PCI w systemie Linux z wiersza polecenia? Oznacza to, że magistrala PCI wydaje polecenie resetowania.

Odpowiedzi:


6

zgodnie z http://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci możesz zresetować poszczególne funkcje urządzenia, jeśli jest to obsługiwane:

What:       /sys/bus/pci/devices/.../reset
Description:
            Some devices allow an individual function to be reset
            without affecting other functions in the same device.
            For devices that have this support, a file named reset
            will be present in sysfs.  Writing 1 to this file
            will perform reset.

5

Najbliższą rzeczą, jaką magistrala PCI ma do resetowania poziomu urządzenia, jest zmiana stanu zasilania na D3 i powrót do D0. Po rozładowaniu sterownika (źle byłoby zresetować sprzęt spod sterownika), możesz użyć setpcizapisu do rejestrów kontrolnych, aby zmienić stan zasilania, ale wierzę, że dzieje się to automatycznie po zwolnieniu sterownika.


1

Ponieważ ogólnego urządzenia PCI nie można podłączyć w trybie hot-plug, nie będzie sposobu na jego zresetowanie i ponowne przeliczenie przez jądro.

Niezależnie od rodzaju problemów, które próbujesz rozwiązać, z pewnością istnieje lepszy sposób niż zresetowanie go.


4
Symuluję urządzenie PCI w QEMU i muszę się resetować w miarę rozwoju. Chciałem to zrobić z wnętrza gościa.
Jonathan

1
Mam wadliwą kartę pci cctv, działa, ale czasami umiera z powodu usterki. Następnie należy zrestartować cały system, zresetować PCI, czego można uniknąć ... System jest stabilny, nie szkodzi, tylko wejście wideo staje się puste, więc czasami lepszym rozwiązaniem jest zresetowanie PCI niż ponowne uruchomienie cała maszyna każdego dnia. (zwłaszcza jeśli jesteś 6000 km od tej maszyny przez 6 miesięcy)
Gipsz Jakab

1

Problem z powyższymi rozwiązaniami polega na tym, że wymagają one współpracy urządzenia; jednak w większości scenariuszy powodem zresetowania jest właśnie brak współpracy.

Jednak, jak tu opisano , istnieje inny „trudniejszy” sposób zresetowania go na poziomie PCI: usuwamy go z magistrali PCI, a następnie ponownie wkładamy za pomocą ponownego skanowania.

Kroki:

  1. echo 1 >/sys/bus/pci/<pci-id-of-device>/remove. Możemy znaleźć jego identyfikator PCI za pomocą lspcipolecenia.
  2. echo 1 >/sys/bus/pci/rescan

Mam tutaj wadliwe urządzenie PCI, czasem resetowanie na poziomie PCI, czasem ta sztuczka z odczytem usuwa to. Mam zamiar napisać skrypt, aby zrobić to automatycznie. :-)


Ugh. Mój kontroler USB nadal jest wadliwy, nawet po tym resecie.
Chris

@Chris Czy jesteś pewien, że jest to kontroler, a nie urządzenie?
peterh - Przywróć Monikę

Tak, jestem pewien, że to kontroler 00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller. Przekazuję go do VM przez VFIO i po ponownym uruchomieniu VM muszę również ponownie uruchomić host, aby znów działał, w przeciwnym razie wykryte zostanie każde podłączone USB, ale komunikacja nie powiedzie się.
Chris
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.