VFIO 仮想デバイス
サポートするデバイスタイプ:
KVM_DEV_TYPE_VFIO
VM ごとに VFIO インスタンスは 1 つしか生成できない。生成されたデバイスは、 その VM が使用中の VFIO ファイル(group または device)と、VM の正しさと 高速化にとって重要なそれら group/device の機能を追跡する。VM が group/device を使用可能/使用不可にしたら、その存在を KVM に伝える必要がある。KVM に 登録されると、その VFIO ファイルへの参照は KVM が保持する。
- Groups:
- KVM_DEV_VFIO_FILE
別名: KVM_DEV_VFIO_GROUP
- KVM_DEV_VFIO_FILE の属性:
- KVM_DEV_VFIO_FILE_ADD: VFIO ファイル(group/device)を VFIO-KVM デバイスの
追跡対象に追加する
kvm_device_attr.addr は、VFIO ファイルのファイルディスクリプタ(int32_t)を 指す。
- KVM_DEV_VFIO_FILE_DEL: VFIO ファイル(group/device)を VFIO-KVM デバイスの
追跡対象から削除する
kvm_device_attr.addr は、VFIO ファイルのファイルディスクリプタ(int32_t)を 指す。
- KVM_DEV_VFIO_GROUP(VFIO group fd の扱いに限定された従来の kvm デバイスグループ):
- KVM_DEV_VFIO_GROUP_ADD: group fd のみを対象とする点を除き、
KVM_DEV_VFIO_FILE_ADD と同じ
- KVM_DEV_VFIO_GROUP_DEL: group fd のみを対象とする点を除き、
KVM_DEV_VFIO_FILE_DEL と同じ
- KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE: sPAPR KVM が確保した、ゲストから見える
TCE テーブルを関連付ける。 kvm_device_attr.addr は次の構造体を指す:
struct kvm_vfio_spapr_tce { __s32 groupfd; __s32 tablefd; };
where: - @groupfd は VFIO グループのファイルディスクリプタである。 - @tablefd は KVM_CREATE_SPAPR_TCE で確保した TCE テーブルの
ファイルディスクリプタである。
上記の FILE/GROUP_ADD 操作は、VFIO_GROUP_GET_DEVICE_FD でデバイスのファイル ディスクリプタにアクセスする前に呼び出す必要がある。これは、.open_device() コールバックで kvm ポインタが設定されていることを要求するドライバに対応する ためである。VFIO_DEVICE_BIND_IOMMUFD 経由でデバイスにアクセスするキャラクタ デバイスのオープンでも同じである。そのようなファイルディスクリプタでは、 先の文で述べたドライバに対応するため、VFIO_DEVICE_BIND_IOMMUFD の前に FILE_ADD を呼び出す必要がある。