XICS 割り込みコントローラ
サポートするデバイスタイプ: KVM_DEV_TYPE_XICS
- Groups:
- KVM_DEV_XICS_GRP_SOURCES
Attributes:
割り込みソースごとに 1 つ。ソース番号で添字付けする。
- KVM_DEV_XICS_GRP_CTRL
Attributes:
2.1 KVM_DEV_XICS_NR_SERVERS(書き込みのみ)
kvm_device_attr.addr は __u32 の値を指す。これは割り込みサーバ番号の数 (つまり、取りうる最大の vCPU ID に 1 を足したもの)である。
Errors:
-EINVAL
KVM_MAX_VCPU_IDS より大きい値。
-EFAULT
attr->addr のユーザポインタが不正。
-EBUSY
vCPU はすでにデバイスに接続されている。
このデバイスは、PAPR で定義された XICS(eXternal Interrupt Controller Specification)をエミュレートする。XICS は割り込みソースの集合を持ち、 各ソースは 20 ビットのソース番号で識別される。また、Interrupt Control Presentation(ICP)エンティティの集合を持つ。これは「サーバ」とも呼ばれ、 それぞれが仮想 CPU に対応する。
ICP エンティティは、vCPU ごとに KVM_CAP_IRQ_ARCH ケイパビリティを有効にし、 kvm_enable_cap 構造体の args[0] に KVM_CAP_IRQ_XICS を、args[1] に割り込み サーバ番号(XICS から見た vCPU 番号)を指定することで生成する。各 ICP は 64 ビットの状態を持ち、vCPU に対する KVM_GET_ONE_REG と KVM_SET_ONE_REG ioctl で読み書きできる。この 64 ビットの状態ワードには、ワードの最下位側から 次のビットフィールドがある:
未使用、16 ビット
保留中の割り込みの優先度、8 ビット 0 が最高優先度、255 は保留中の割り込みがないことを意味する。
保留中の IPI(プロセッサ間割り込み)の優先度、8 ビット 0 が最高優先度、255 は保留中の IPI がないことを意味する。
保留中の割り込みソース番号、24 ビット 0 は保留中の割り込みがないこと、2 は IPI が保留中であることを意味する。
現在のプロセッサ優先度、8 ビット 0 が最高優先度で、割り込みを配送できないことを意味し、255 が最低優先度 である。
各ソースは 64 ビットの状態を持ち、KVM_GET_DEVICE_ATTR と KVM_SET_DEVICE_ATTR ioctl で読み書きできる。属性グループに KVM_DEV_XICS_GRP_SOURCES を指定し、 属性番号に割り込みソース番号を指定する。この 64 ビットの状態ワードには、 ワードの最下位側から次のビットフィールドがある:
宛先(サーバ番号)、32 ビット
割り込みをどこへ送るかを指定する。宛先 vCPU に対して指定した割り込み サーバ番号である。
優先度、8 ビット
この割り込みソースに指定した優先度である。0 が最高優先度、255 が最低 優先度である。優先度 255 の割り込みは配送されない。
レベル感知フラグ、1 ビット
このビットは、レベル感知の割り込みソースでは 1、エッジ感知(または MSI) では 0 である。
マスク済みフラグ、1 ビット
このビットは、割り込みがマスクされている(優先度に関係なく配送できない) 場合に 1 になる。たとえば ibm,int-off RTAS 呼び出しによる場合である。 マスクされていなければ 0 である。
保留フラグ、1 ビット
このビットは、ソースに保留中の割り込みがあれば 1、そうでなければ 0 で ある。
XICS インスタンスは VM ごとに 1 つしか生成できない。