次の方法で共有


HvCallFlushVirtualAddressSpace

HvCallFlushVirtualAddressSpace ハイパーコールは、指定されたアドレス空間に属するすべての仮想 TLB エントリを無効にします。

インターフェイス

HV_STATUS
HvCallFlushVirtualAddressSpace(
   _In_ HV_ADDRESS_SPACE_ID AddressSpace,
   _In_ HV_FLUSH_FLAGS Flags,
   _In_ UINT64 ProcessorMask
   );

仮想 TLB 無効化操作は、1 つ以上のプロセッサに対して機能します。

フラッシュが必要なプロセッサに関する知識がある場合は、プロセッサ マスクを指定できます。 マスク内の各ビットは、仮想プロセッサ インデックスに対応します。 たとえば、0x0000000000000051のマスクは、ハイパーバイザーが仮想プロセッサ 0、4、6 の TLB のみをフラッシュする必要があることを示します。 仮想プロセッサは、HvRegisterVpIndex 合成レジスタ ( HvCallGetVpRegisters 経由) を読み取るか、HV_X64_MSR_VP_INDEX MSR から x64 上でインデックスを決定できます。

フラッシュの動作を変更するには、次のフラグを使用できます。

  • HV_FLUSH_ALL_PROCESSORSは、パーティション内のすべての仮想プロセッサに操作を適用する必要があることを示します。 このフラグが設定されている場合、ProcessorMask パラメーターは無視されます。
  • HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACESは、操作をすべての仮想アドレス空間に適用する必要があることを示します。 このフラグが設定されている場合、AddressSpace パラメーターは無視されます。
  • HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLYは、ハイパーバイザーが必要なのは、"グローバル" としてマップされていないページ マッピング (x64 では、ページ テーブル エントリの "G" ビット、ARM64 の場合は nG ビット) をフラッシュすることだけであることを示します。 グローバル エントリは、ハイパーバイザーによってフラッシュされずに残されている可能性があります (ただし、必須ではありません)。

他のすべてのフラグは予約済みであり、ゼロに設定する必要があります。

この呼び出しにより、制御が呼び出し元に戻るまでに、指定された仮想プロセッサに対するすべてのフラッシュの観測可能な影響が発生したことが保証されます。

ターゲット仮想プロセッサの TLB でフラッシュが必要であり、その仮想プロセッサの TLB が現在 "ロック" されている場合、呼び出し元の仮想プロセッサは中断されます。 呼び出し元の仮想プロセッサが "非依存" の場合、ハイパーコールは再発行されます。

呼び出しコード

0x0002 (単純)

パラメーターの入力

名前 オフセット サイズ 提供される情報
AddressSpace 0 アドレス空間 ID (x64 の CR3、ARM64 の変換テーブル ベース) を指定します。
Flags フラッシュの操作を変更するフラグ ビットのセット。
ProcessorMask 16 フラッシュ操作の影響を受けるプロセッサを示すプロセッサ マスク。