LinuxでPCIデバイスをリセットする


12

LinuxでコマンドラインからPCIデバイスをリセットする一般的な方法はありますか?つまり、PCIバスにリセットコマンドを発行させます。

回答:


6

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.

5

PCIバスがデバイスレベルのリセットに最も近いのは、電源状態をD3に変更し、D0に戻すことです。ドライバーをアンロードした後(ドライバーの下からハードウェアをリセットするのは悪いでしょう)、使用setpciして制御レジスターに書き込み、電源状態を変更できますが、これはドライバーをアンロードすると自動的に発生すると思います。


1

汎用PCIデバイスはホットプラグ対応ではないため、リセットしてカーネルに再列挙させる方法はありません。

どんな種類の問題を解決しようとしても、それをリセットするよりも確実に良い方法があります。


4
QEMUでPCIデバイスをシミュレートしており、開発中にその状態をリセットする必要があります。ゲストの中からやりたかった。
ジョナサン

バグのあるpci cctvカードがありますが、動作していますが、セグメンテーション違反で死ぬことがあります。その後、システム全体を再起動する必要がありますが、PCIリセットを行うとこれは回避できます...毎日マシン全体。(特に、6か月間そのマシンから8000km離れている場合)
-Gipsz Jakab

1

上記のソリューションの問題は、デバイスの協調性が必要なことです。ただし、ほとんどのシナリオでは、リセットする理由はまさに非協調性です。

ただし、ここで説明しているように、PCIレベルでリセットする別の「より難しい」方法があります。PCIバスから削除してから、再スキャンで再挿入します。

手順:

  1. echo 1 >/sys/bus/pci/<pci-id-of-device>/removelspciコマンドでPCI IDを見つけることができます。
  2. echo 1 >/sys/bus/pci/rescan

ここにはバグのあるpciデバイスがあり、時にはPCIレベルのリセットがあり、時にはこの読み取り専用のトリックがそれを修正します。これを自動的に行うスクリプトを作成しようとしています。:-)


あー USBコントローラーは、このリセット後もまだバグがあります。
クリス

@Chrisそれはコントローラーであり、その上のデバイスではないのですか?
peterh-モニカを

はい、私はそれがコントローラーだと確信しています00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller。VFIO経由でVMに渡します。VMの再起動後、ホストを再起動して再度動作させる必要があります。そうしないと、USBプラグインが検出されますが、通信は失敗します。
クリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.