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_SMCCC_KVM_FUNC_HYP_MEMINFO
¶
查询 pKVM 受保护虚拟机 的内存保护参数。
存在性 |
可选;仅限 pKVM 受保护客户机。 |
||
调用约定 |
HVC64 |
||
函数 ID |
(uint32) |
0xC6000002 |
|
参数 |
(uint64) |
R1 |
保留 / 必须为零 |
(uint64) |
R2 |
保留 / 必须为零 |
|
(uint64) |
R3 |
保留 / 必须为零 |
|
返回值 |
(int64) |
R0 |
错误时为 |
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 |
|
|
ARM_SMCCC_VENDOR_HYP_KVM_DISCOVER_IMPL_VER_FUNC_ID
¶
请求客户机 VM 的目标 CPU 实现版本信息和目标实现数量。
存在性 |
可选;仅限 KVM/ARM64 客户机 |
||
调用约定 |
HVC64 |
||
函数 ID |
(uint32) |
0xC6000040 |
|
参数 |
无 |
||
返回值 |
(int64) |
R0 |
|
|
|||
(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 |
|
|
|||
(uint64) |
R1 |
选定实现的 MIDR_EL1 |
|
(uint64) |
R2 |
选定实现的 REVIDR_EL1 |
|
(uint64) |
R3 |
选定实现的 AIDR_EL1 |