web-dev-qa-db-ja.com

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

私はこのマシンに2つのRadeonカード、 Radeon HD 657Radeon HD 695 を持っています:

lspci | grep VGA

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

VGAパススルーを [〜#〜] kvm [〜#〜] on Debian 7 (Wheezy)で動作させ、6950をセカンダリとして通過させようとしています。 Windows 7ゲスト用のビデオカード。 /etc/modprobe.d/を介してradeonカーネルモジュールをブラックリストに登録すると、これは正常に機能します。

6570でX11(または [〜#〜] kms [〜#〜] コンソールのみ)を実行するためにブラックリストを削除すると、radeonモジュールが両方カード:

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

pci 0000:01:00.0:[1002:6759] type 0 class 0x000300
pci 0000:01:00.0:reg 10:[mem 0xe0000000-0xefffffff 64bit pref]
pci 0000:01:00.0:reg 18:[mem 0xf7e20000-0xf7e3ffff64ビット]
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:D1D2をサポート
pci 0000:02:00.0:[1002:6719]タイプ0クラス0x000300
pci 0000:02:00.0:reg 10:[mem 0xd0000000-0xdfffffff 64bit pref]
pci 0000:02:00.0:reg 18:[mem 0xf7d20000-0xf7d3ffff64ビット]
pci 0000:02:00.0:reg 20:[io 0xd000-0xd0ff]
pci 0000:02:00.0:reg 30:[mem 0xf7d00000-0xf7d1ffff pref]
pci 0000:02:00.0:D1D2をサポート
vgaarb:追加されたデバイス:PCI:0000:01:00.0、decodes = io + mem、owns = io + mem、locks = none
vgaarb:追加されたデバイス:PCI:0000:02:00.0、decodes = io + mem、owns = none、locks = none
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のirq46
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-0x000000007FFFFFFF(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]マイナー1の0000:02:00.0用に初期化されたradeon 2.12.0 20080528
[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のirq49

これにより、Windows 7 VMは起動時にブルースクリーンになります。

モジュールradeonが6570にのみ接続され、6950には接続されないように構成するにはどうすればよいですか?

13
genpfault

pci_stubにいくつかの rc.local関連の行 がありましたが、これは明らかに起動プロセスでは遅すぎて、radeonがいじり始めた後に実行されました。物事。

pci_stubカーネルモジュールのものをinitramfsに移動して、問題を修正しました。

  1. lspci -nn | grep Caymanは、6950とそのHDMIポートのvendor:device番号(行の最後)を検索します。

    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_stubradeonを打ち負かしているのを観察します。

    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パススルーをお楽しみください!

14
genpfault

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をロードしようとするとき、最初に1つのビデオカードのハードウェアを予約するpci-stubをロードし、drmが何らかのデバイスに接続するのを防ぎます。

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

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

5
Weber K.