XICS 割り込みコントローラ

サポートするデバイスタイプ: KVM_DEV_TYPE_XICS

Groups:
  1. KVM_DEV_XICS_GRP_SOURCES

    Attributes:

    割り込みソースごとに 1 つ。ソース番号で添字付けする。

  2. 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 つしか生成できない。