Radeon ドライバーが特定の PCI デバイスに接続できないようにしますか?

Radeon ドライバーが特定の PCI デバイスに接続できないようにしますか?

このマシンには2枚のRadeonカードが搭載されており、レーデオンHD6570そしてレーデオンHD6950:

lspci | grep VGA

01:00.0 VGA 互換コントローラ: Advanced Micro Devices [AMD] 旧 ATI Turks [Radeon HD 6570]
02:00.0 VGA 互換コントローラ: Advanced Micro Devices [AMD] 旧 ATI Cayman PRO [Radeon HD 6950]

VGAパススルーを動作させようとしています仮想化の上デビアン7(Wheezy)、6950 をセカンダリ ビデオ カードとして Windows 7 ゲストに渡します。radeon経由でカーネル モジュールをブラックリストに登録すると、これは正常に動作します/etc/modprobe.d/

ブラックリストを削除してX11(またはケイエムエス6570のコンソールにradeonモジュールが接続されるようです両方カード:

dmesg | egrep "01:00.0|02:00.0|radeon"

pci 0000:01:00.0: [1002:6759] タイプ 0 クラス 0x000300
pci 0000:01:00.0: reg 10: [mem 0xe0000000-0xefffffff 64bit pref]
pci 0000:01:00.0: reg 18: [mem 0xf7e20000-0xf7e3ffff 64bit]
pci 0000:01:00.0: reg 20: [io 0xe000-0xe0ff]
pci 0000:01:00.0: reg 30: [mem 0xf7e00000-0xf7e1ffff pref]
pci 0000:01:00.0: D1 D2 をサポート
pci 0000:02:00.0: [1002:6719] タイプ 0 クラス 0x000300
pci 0000:02:00.0: reg 10: [mem 0xd0000000-0xdffffffff 64 ビット 優先順位]
pci 0000:02:00.0: reg 18: [mem 0xf7d20000-0xf7d3ffff 64 ビット]
pci 0000:02:00.0: reg 20: [io 0xd000-0xd0ff]
pci 0000:02:00.0: reg 30: [mem 0xf7d00000-0xf7d1ffff 優先順位]
pci 0000:02:00.0: D1 D2 をサポート
vgaarb: デバイスが追加されました: PCI:0000:01:00.0、デコード=io+mem、所有=io+mem、ロック=なし
vgaarb: デバイスが追加されました: PCI:0000:02:00.0、デコード=io+mem、所有=なし、ロック=なし
vgaarb: ブリッジ制御可能 0000:02:00.0
vgaarb: ブリッジ制御可能 0000:01:00.0
pci 0000:01:00.0: ビデオ デバイスのブート
[drm] radeon カーネル モード設定が有効です。
radeon 0000:01:00.0: レイテンシ タイマーを 64 に設定しています
radeon 0000:01:00.0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M 使用)
radeon 0000:01:00.0: GTT: 512M 0x0000000040000000 - 0x000000005FFFFFFF
[drm] radeon: 1024M の VRAM メモリが準備完了です
[drm] radeon: 512M の GTT メモリが準備完了です。
radeon 0000:01:00.0: MSI/MSI-X の irq 46 radeon
0000:01:00.0: radeon: MSI を使用しています。
[drm] radeon: irq が初期化されました。radeon
0000:01:00.0: WB が有効です。
[drm] radeon: ib プールが準備完了です。
[drm] radeon: 電源管理が初期化されました
fbcon: radeondrmfb (fb0) はプライマリ デバイスです
fb0: radeondrmfb フレーム バッファー デバイス
[drm] マイナー 0 で 0000:01:00.0 の radeon 2.12.0 20080528 を初期化しました
radeon 0000:02:00.0: デバイスを有効にしています (0000 -> 0003) radeon
0000:02:00.0: レイテンシ タイマーを 64 に設定しています
radeon 0000:02:00.0: VRAM: 2048M 0x0000000000000000 - 0x000000007FFFFFFFF (2048M 使用)
radeon 0000:02:00.0: GTT: 512M 0x0000000080000000 - 0x000000009FFFFFFF
[drm] radeon: 2048M の VRAM メモリが準備完了
[drm] radeon: 512M の GTT メモリが準備完了。radeon
0000:02:00.0: MSI/MSI-X の irq 49
radeon 0000:02:00.0: radeon: MSI を使用。
[drm] radeon: irq が初期化されました。radeon
0000:02:00.0: WB が有効
[drm] radeon: ib プールが準備完了。
[drm] radeon: 電源管理が初期化されました
fb1: radeondrmfb フレーム バッファー デバイス
[drm] 0000:02:00.0 の radeon 2.12.0 20080528 をマイナー 1 で初期化しました
[drm] radeon: デバイスを終了しています。radeon
0000:02:00.0: ffff88041a941800 ピン解除は不要です
[drm] radeon: ttm が終了しました
pci-stub 0000:02:00.0: スタブによって要求されました
pci-stub 0000:02:00.0: MSI/MSI-X の irq 49

これにより、Windows 7 VM の起動時にブルー スクリーンが表示されます。

モジュールがradeon6950 ではなく 6570 にのみ接続されるように設定するにはどうすればよいですか?

答え1

私はいくつか持っていたpci_stub-関連ライン私のrc.local場合は、どうやら起動プロセスでは遅すぎたようで、その後実行してradeonいろいろいじり始めました。

pci_stubカーネル モジュールを次の場所に移動することで問題を修正しましたinitramfs

  1. lspci -nn | grep Caymanvendor:device6950 とその HDMI ポートの番号 (行の末尾)を見つけるには:

    02:00.0 VGA compatible controller [0300]: Advanced Micro Devices [AMD] nee ATI Cayman PRO [Radeon HD 6950] [1002:6719]
    02:00.1 Audio device [0403]: Advanced Micro Devices [AMD] nee ATI Cayman/Antilles HDMI Audio [Radeon HD 6900 Series] [1002:aa80]
    
  2. 開いて/etc/initramfs-tools/modules新しい行を追加します:

    pci_stub ids=1002:6719,1002:aa80
    
  3. を再構築しますinitramfs:

    sudo update-initramfs -u
    
  4. 再起動して、pci_stub次の結果を確認しますradeon

    dmesg | egrep "pci-stub|radeon"
    
    pci-stub: add 1002:6719 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
    pci-stub 0000:02:00.0: claimed by stub
    pci-stub: add 1002:AA80 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
    pci-stub 0000:02:00.1: claimed by stub
    [drm] radeon kernel modesetting enabled.
    radeon 0000:01:00.0: setting latency timer to 64
    radeon 0000:01:00.0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M used)
    radeon 0000:01:00.0: GTT: 512M 0x0000000040000000 - 0x000000005FFFFFFF
    
  5. ブルースクリーンのない VGA パススルーをお楽しみください!

答え2

genpfault の回答を参考にして、別の回答を作成しました。もっとシンプルだと思います。

最初のステップは上記と同じです。

次に、見つけた引数を含む /lib/modprobe.d/pci-stub.conf というファイルを作成しました:

options pci-stub ids=1002:9715,1002:970f

次に、softdep を使用して /lib/modprobe.d/drm.conf というファイルを作成しました。

softdep drm pre: pci-stub

この方法では、ブート プロセスが drm をロードしようとすると、最初に pci-stub をロードして、1 つのビデオ カードのハードウェアを予約し、drm が一部のデバイスに接続されるのを防ぎます。

後で rc.local の予約を削除できますmodprobe -r pci-stub

modprobe another-moduleオプションで、そのカードに別のモジュールをロードすることもできます。

関連情報