XICS 中斷控制器

支援的裝置型別:KVM_DEV_TYPE_XICS

  1. KVM_DEV_XICS_GRP_SOURCES

    屬性

    每個中斷源一個,按源編號索引。

  2. KVM_DEV_XICS_GRP_CTRL

    屬性

    2.1 KVM_DEV_XICS_NR_SERVERS (只寫)

kvm_device_attr.addr 指向一個 __u32 值,該值表示中斷伺服器的數量(即,可能的最高 vcpu ID 加一)。

錯誤

-EINVAL

值大於 KVM_MAX_VCPU_IDS。

-EFAULT

attr->addr 的使用者指標無效。

-EBUSY

vcpu 已連線到裝置。

此裝置模擬 PAPR 中定義的 XICS(外部中斷控制器規範)。XICS 擁有一組中斷源,每個中斷源由一個 20 位源編號標識;以及一組中斷控制呈現 (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 位。零是最高優先順序,255 表示沒有中斷待處理。

  • 待處理 IPI(處理器間中斷)優先順序,8 位。零是最高優先順序,255 表示沒有 IPI 待處理。

  • 待處理中斷源編號,24 位。零表示沒有中斷待處理,2 表示有 IPI 待處理

  • 當前處理器優先順序,8 位。零是最高優先順序,意味著不能遞送中斷,而 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 位

    如果中斷被遮蔽(無論其優先順序如何都無法遞送),例如透過 ibm,int-off RTAS 呼叫,則此位設定為 1;如果未遮蔽,則設定為 0。

  • 待處理標誌,1 位

    如果源有待處理中斷,則此位為 1,否則為 0。

每個 VM 只能建立一個 XICS 例項。