Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’hypercall HvCallFlushVirtualAddressList invalide les parties du TLB virtuel qui appartiennent à un espace d’adressage spécifié.
Architecture : x64 uniquement.
Interface
HV_STATUS
HvCallFlushVirtualAddressList(
_In_ HV_ADDRESS_SPACE_ID AddressSpace,
_In_ HV_FLUSH_FLAGS Flags,
_In_ UINT64 ProcessorMask,
_Inout_ UINT32* GvaCount,
_In_reads_(*GvaCount) const HV_GVA* GvaRangeList
);
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.
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 n’a pas de sens pour cet appel et est traité comme une option non valide.
Tous les autres indicateurs sont réservés et doivent être définis sur zéro.
Cet appel prend la liste des plages d’appliances virtuelles réseau. Chaque plage a une appliance virtuelle virtuelle de base. Étant donné que les vidages sont effectués avec une granularité de page, les 12 bits inférieurs de l’appliance virtuelle virtuelle réseau peuvent être utilisés pour définir une longueur de plage. Ces bits encodent le nombre de pages supplémentaires (au-delà de la page initiale) dans la plage. Cela permet à chaque entrée d’encoder une plage de 1 à 4 096 pages.
Une appliance virtuelle de groupe qui se trouve dans un mappage de « grande page » (2 Mo ou 4 Mo) entraîne le vidage de l’intégralité de la grande page à partir de l’équilibrage de charge réseau virtuel.
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.
Les GVA non valides (celles qui spécifient des adresses au-delà de la fin de l’espace DVA de la partition) sont ignorées.
Si le TLB d’un processeur virtuel cible nécessite un vidage et que le processeur virtuel empêche les vidages de L’équilibrage de charge réseau, le processeur virtuel de l’appelant est suspendu. Lorsque les vidages TLB ne sont plus inhibés, le processeur virtuel est « non bloqué » et l’hypercall est réédition.
Code d’appel
0x0003 (Rep)
Paramètres d’entrée
| Nom | Décalage | Taille | Informations fournies |
|---|---|---|---|
AddressSpace |
0 | 8 | Spécifie un ID d’espace d’adressage (valeur CR3). |
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. |
Input List, élément
| Nom | Décalage | Taille | Informations fournies |
|---|---|---|---|
GvaRange |
0 | 8 | Plage d’appliances virtuelles réseau |