HvCallFlushVirtualAddressSpace
HvCallFlushVirtualAddressSpace hypercall 会使属于指定地址空间的所有虚拟 TLB 条目失效。
接口
HV_STATUS
HvCallFlushVirtualAddressSpace(
_In_ HV_ADDRESS_SPACE_ID AddressSpace,
_In_ HV_FLUSH_FLAGS Flags,
_In_ UINT64 ProcessorMask
);
虚拟 TLB 失效操作作用于一个或多个处理器。
如果来宾知道哪些处理器可能需要刷新,则可以指定处理器掩码。 掩码中的每个位对应于一个虚拟处理器索引。 例如,0x0000000000000051掩码指示虚拟机监控程序应仅刷新虚拟处理器 0、4 和 6 的 TLB。 虚拟处理器可以通过从 MSR HV_X64_MSR_VP_INDEX进行读取来确定其索引。
以下标志可用于修改刷新的行为:
- HV_FLUSH_ALL_PROCESSORS指示操作应应用于分区中的所有虚拟处理器。 如果设置了此标志,则忽略 ProcessorMask 参数。
- HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES指示操作应应用于所有虚拟地址空间。 如果设置了此标志,则忽略 AddressSpace 参数。
- HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY指示仅需要虚拟机监控程序来刷新未映射为“全局”的页面映射 (即,x64“G”位是在页表条目) 中设置的。 全局条目可以 (但不需要) 虚拟机监控程序保持未冲入。
所有其他标志都是保留的,并且必须设置为零。
此调用保证在控制返回给调用方时,已发生指定虚拟处理器上所有刷新的可观察效果。
如果目标虚拟处理器的 TLB 需要刷新,并且虚拟处理器的 TLB 当前已“锁定”,则调用方虚拟处理器将被挂起。 当调用方虚拟处理器“取消挂起”时,将重新发出 hypercall。
调用代码
0x0002
(简单)
输入参数
名称 | Offset | 大小 | 提供的信息 |
---|---|---|---|
AddressSpace |
0 | 8 | 指定地址空间 ID (CR3 值) 。 |
Flags |
8 | 8 | 修改刷新操作的标志位集。 |
ProcessorMask |
16 | 8 | 指示哪些处理器应受刷新操作影响的处理器掩码。 |