回答:
http://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pciによると、サポートされている場合、デバイスの個々の機能をリセットできます。
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デバイスはホットプラグ対応ではないため、リセットしてカーネルに再列挙させる方法はありません。
どんな種類の問題を解決しようとしても、それをリセットするよりも確実に良い方法があります。
上記のソリューションの問題は、デバイスの協調性が必要なことです。ただし、ほとんどのシナリオでは、リセットする理由はまさに非協調性です。
ただし、ここで説明しているように、PCIレベルでリセットする別の「より難しい」方法があります。PCIバスから削除してから、再スキャンで再挿入します。
手順:
echo 1 >/sys/bus/pci/<pci-id-of-device>/remove
。lspci
コマンドでPCI IDを見つけることができます。echo 1 >/sys/bus/pci/rescan
ここにはバグのあるpciデバイスがあり、時にはPCIレベルのリセットがあり、時にはこの読み取り専用のトリックがそれを修正します。これを自動的に行うスクリプトを作成しようとしています。:-)
00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller
。VFIO経由でVMに渡します。VMの再起動後、ホストを再起動して再度動作させる必要があります。そうしないと、USBプラグインが検出されますが、通信は失敗します。