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 指示哪些处理器应受刷新操作影响的处理器掩码。