Risposte:
secondo http://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci è possibile ripristinare le singole funzioni del dispositivo se supportato:
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.
La cosa più vicina al bus PCI per un reset a livello di dispositivo è cambiare lo stato di alimentazione in D3 e poi di nuovo in D0. Dopo aver scaricato il driver (sarebbe male ripristinare l'hardware da sotto il driver), è possibile utilizzare setpci
per scrivere nei registri di controllo per modificare lo stato di alimentazione, ma credo che ciò avvenga automaticamente quando si scarica il driver.
Poiché un dispositivo PCI generico non è hot plug, non ci sarà modo di reimpostarlo e di re-enumerarlo dal kernel.
Qualunque sia il tipo di problemi che stai cercando di risolvere, c'è sicuramente un modo migliore che ripristinarlo.
Il problema con le soluzioni sopra è che richiedono la cooperatività del dispositivo; tuttavia nella maggior parte degli scenari il motivo per ripristinarlo è esattamente la sua non cooperatività.
Tuttavia, come è descritto qui , esiste un altro modo "più difficile" per reimpostarlo a livello PCI: lo rimuoviamo dal bus PCI e quindi lo reinseriamo con una nuova scansione.
I passi:
echo 1 >/sys/bus/pci/<pci-id-of-device>/remove
. Possiamo trovare il suo ID PCI con un lspci
comando.echo 1 >/sys/bus/pci/rescan
Ho qui un dispositivo PCI difettoso, a volte ripristino a livello PCI, a volte questo trucco letto per la rimozione lo risolve. Sto per scrivere una sceneggiatura per farlo automagicamente. :-)
00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller
. Lo passo alla VM tramite VFIO e dopo il riavvio della VM devo anche riavviare l'host per farlo funzionare di nuovo, altrimenti viene rilevata qualsiasi USB collegata, ma la comunicazione fallisce.