Partager via


HvCallFlushVirtualAddressSpace

L’hypercall HvCallFlushVirtualAddressSpace invalide toutes les entrées TLB virtuelles appartenant à un espace d’adressage spécifié.

Interface

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

L’opération d’invalidation du TLB virtuel agit sur un ou plusieurs processeurs.

Si l’invité a connaissance des processeurs qui doivent être vidés, il peut spécifier un masque de processeur. Chaque bit dans le masque correspond à un index de processeur virtuel. Par exemple, un masque de 0x0000000000000051 indique que l’hyperviseur doit vider uniquement le TLB des processeurs virtuels 0, 4 et 6. Un processeur virtuel peut déterminer son index en lisant le registre synthétique HvRegisterVpIndex (via HvCallGetVpRegisters) ou sur x64 à partir du MSR HV_X64_MSR_VP_INDEX.

Les indicateurs suivants peuvent être utilisés pour modifier le comportement du vidage :

  • HV_FLUSH_ALL_PROCESSORS indique que l’opération doit s’appliquer à tous les processeurs virtuels de la partition. Si cet indicateur est défini, le paramètre ProcessorMask est ignoré.
  • HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES indique que l’opération doit s’appliquer à tous les espaces d’adressage virtuels. Si cet indicateur est défini, le paramètre AddressSpace est ignoré.
  • HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY indique que l’hyperviseur est nécessaire uniquement pour vider les mappages de pages qui n’ont pas été mappés en tant que « global » (sur x64, le bit « G » dans l’entrée de la table de pages ; sur ARM64, le bit nG). Les entrées globales peuvent être (mais ne sont pas obligatoires) laissées non vides par l’hyperviseur.

Tous les autres indicateurs sont réservés et doivent être définis sur zéro.

Cet appel garantit qu’au moment où le contrôle revient à l’appelant, les effets observables de tous les vidages sur les processeurs virtuels spécifiés se sont produits.

Si le TLB d’un processeur virtuel cible nécessite un vidage et que le TLB du processeur virtuel est actuellement « verrouillé », le processeur virtuel de l’appelant est suspendu. Lorsque le processeur virtuel de l’appelant est « non affecté », l’hypercall sera réédité.

Code d’appel

0x0002 (Simple)

Paramètres d’entrée

Nom Décalage Taille Informations fournies
AddressSpace 0 8 Spécifie un ID d’espace d’adressage (CR3 sur x64, base de table de traduction sur ARM64).
Flags 8 8 Ensemble de bits d’indicateur qui modifient l’opération du vidage.
ProcessorMask 16 8 Masque de processeur indiquant quels processeurs doivent être affectés par l’opération de vidage.