Yanıtlar:
http://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci uyarınca, destekleniyorsa cihazın ayrı işlevlerini sıfırlayabilirsiniz:
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.
PCI veri yolunun cihaz düzeyinde sıfırlanmasına en yakın şey, güç durumunu D3'e ve tekrar D0'a değiştirmektir. Sürücüyü kaldırdıktan sonra (donanımı sürücünün altından sıfırlamak kötü olurdu), setpci
güç durumunu değiştirmek için kontrol kayıtlarına yazmak için kullanabilirsiniz , ancak sürücüyü kaldırdığınızda bunun otomatik olarak gerçekleştiğine inanıyorum.
Genel bir PCI aygıt çalışırken takılabilir olmadığından, cihazı sıfırlamanın ve çekirdeği yeniden numaralandırmanın bir yolu olmayacaktır.
Çözmeye çalıştığınız sorunlar ne olursa olsun, kesinlikle sıfırlamaktan daha iyi bir yol var.
Yukarıdaki çözümlerle ilgili sorun, cihazın işbirliğini gerektirmesidir; ancak çoğu senaryoda bunu sıfırlamanın nedeni tam olarak işbirlikçi olmamasıdır.
Ancak, burada açıklandığı gibi , PCI düzeyinde sıfırlamanın başka bir "daha zor" yolu vardır: PCI veriyolundan çıkarırız ve sonra yeniden taramayla yeniden takarız.
Adımlar:
echo 1 >/sys/bus/pci/<pci-id-of-device>/remove
. PCI kimliğini bir lspci
komutla bulabiliriz.echo 1 >/sys/bus/pci/rescan
Burada buggy pci cihazım var, bazen PCI seviyesinde sıfırlama var, bazen bu kaldırma-okuma hilesi onu düzeltir. Ben otomatik olarak yapmak için bir senaryo yazmak üzereyim. :-)
00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller
. VFIO aracılığıyla VM'ye geçiyorum ve VM yeniden başlatıldıktan sonra, tekrar çalışması için ana bilgisayarı yeniden başlatmam gerekiyor, aksi takdirde takılı herhangi bir USB tespit ediliyor, ancak iletişim başarısız oluyor.