KVM/arm64 暴露給客戶機的特定超級呼叫

本文件記錄了 KVM/arm64 可能暴露給客戶機作業系統的 KVM/arm64 特定的超級呼叫。這些超級呼叫是根據 Arm SMC 呼叫約定(DEN0028/C)1.1 版使用 HVC 指令發出的。

https://developer.arm.com/docs/den0028/c

所有 KVM/arm64 特定的超級呼叫都分配在“供應商特定 Hypervisor 服務呼叫”範圍內,其 UID 為 28b46fb6-2ec5-11e9-a9ca-4b564d003a74。客戶機應使用標準“呼叫 UID”函式查詢服務範圍,以確定 KVM/arm64 特定的超級呼叫是否可用。

ARM_SMCCC_VENDOR_HYP_KVM_FEATURES_FUNC_ID

為其他 KVM/arm64 超級呼叫提供發現機制。

存在性

KVM/arm64 UID 強制要求

呼叫約定

HVC32

函式 ID

(uint32)

0x86000000

引數

返回值

(uint32)

R0

可用函式編號 0-31 的點陣圖

(uint32)

R1

可用函式編號 32-63 的點陣圖

(uint32)

R2

可用函式編號 64-95 的點陣圖

(uint32)

R3

可用函式編號 96-127 的點陣圖

ARM_SMCCC_VENDOR_HYP_KVM_PTP_FUNC_ID

參見 arm/arm64 的 PTP_KVM 支援

ARM_SMCCC_KVM_FUNC_HYP_MEMINFO

查詢 pKVM 受保護虛擬機器 的記憶體保護引數。

存在性

可選;僅限 pKVM 受保護客戶機。

呼叫約定

HVC64

函式 ID

(uint32)

0xC6000002

引數

(uint64)

R1

保留 / 必須為零

(uint64)

R2

保留 / 必須為零

(uint64)

R3

保留 / 必須為零

返回值

(int64)

R0

錯誤時為 INVALID_PARAMETER (-3),否則為位元組表示的記憶體保護粒度

ARM_SMCCC_KVM_FUNC_MEM_SHARE

與 KVM 主機共享記憶體區域,授予其讀、寫和執行許可權。區域大小等於 ARM_SMCCC_KVM_FUNC_HYP_MEMINFO 所公佈的記憶體保護粒度。

存在性

可選;僅限 pKVM 受保護客戶機。

呼叫約定

HVC64

函式 ID

(uint32)

0xC6000003

引數

(uint64)

R1

要共享的記憶體區域的基準 IPA

(uint64)

R2

保留 / 必須為零

(uint64)

R3

保留 / 必須為零

返回值

(int64)

R0

成功 (0)

無效引數 (-3)

ARM_SMCCC_KVM_FUNC_MEM_UNSHARE

撤銷 KVM 主機對先前透過 ARM_SMCCC_KVM_FUNC_MEM_SHARE 共享的記憶體區域的訪問許可權。區域大小等於 ARM_SMCCC_KVM_FUNC_HYP_MEMINFO 所公佈的記憶體保護粒度。

存在性

可選;僅限 pKVM 受保護客戶機。

呼叫約定

HVC64

函式 ID

(uint32)

0xC6000004

引數

(uint64)

R1

要取消共享的記憶體區域的基準 IPA

(uint64)

R2

保留 / 必須為零

(uint64)

R3

保留 / 必須為零

返回值

(int64)

R0

成功 (0)

無效引數 (-3)

ARM_SMCCC_KVM_FUNC_MMIO_GUARD

請求 hypervisor 將給定記憶體區域作為 MMIO 處理,從而允許 KVM 主機模擬對此區域的訪問。區域大小等於 ARM_SMCCC_KVM_FUNC_HYP_MEMINFO 所公佈的記憶體保護粒度。

存在性

可選;僅限 pKVM 受保護客戶機。

呼叫約定

HVC64

函式 ID

(uint32)

0xC6000007

引數

(uint64)

R1

MMIO 記憶體區域的基準 IPA

(uint64)

R2

保留 / 必須為零

(uint64)

R3

保留 / 必須為零

返回值

(int64)

R0

成功 (0)

無效引數 (-3)

ARM_SMCCC_VENDOR_HYP_KVM_DISCOVER_IMPL_VER_FUNC_ID

請求客戶機 VM 的目標 CPU 實現版本資訊和目標實現數量。

存在性

可選;僅限 KVM/ARM64 客戶機

呼叫約定

HVC64

函式 ID

(uint32)

0xC6000040

引數

返回值

(int64)

R0

成功 (0)

不支援 (-1)

(uint64)

R1

位 [63:32] 保留/必須為零

位 [31:16] 主版本

位 [15:0] 次版本

(uint64)

R2

目標實現數量

(uint64)

R3

保留 / 必須為零

ARM_SMCCC_VENDOR_HYP_KVM_DISCOVER_IMPL_CPUS_FUNC_ID

請求客戶機 VM 的目標 CPU 實現資訊。客戶機核心將使用此資訊來啟用相關的勘誤表。

存在性

可選;僅限 KVM/ARM64 客戶機

呼叫約定

HVC64

函式 ID

(uint32)

0xC6000041

引數

(uint64)

R1

選定的實現索引

(uint64)

R2

保留 / 必須為零

(uint64)

R3

保留 / 必須為零

返回值

(int64)

R0

成功 (0)

無效引數 (-3)

(uint64)

R1

選定實現的 MIDR_EL1

(uint64)

R2

選定實現的 REVIDR_EL1

(uint64)

R3

選定實現的 AIDR_EL1