Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der HvCallFlushVirtualAddressList-Hypercall ungültigt Teile der virtuellen TLB, die zu einem angegebenen Adressraum gehören.
Architektur: nur x64.
Schnittstelle
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
);
Der virtuelle TLB-Ungültigheitsvorgang wirkt auf einen oder mehrere Prozessoren.
Wenn der Gast Wissen darüber hat, welche Prozessoren möglicherweise geleert werden müssen, kann er eine Prozessormaske angeben. Jedes Bit in der Maske entspricht einem virtuellen Prozessorindex. Beispielsweise gibt eine Maske von 0x0000000000000051 an, dass der Hypervisor nur die TLB der virtuellen Prozessoren 0, 4 und 6 leeren soll.
Die folgenden Flags können verwendet werden, um das Verhalten der Spülung zu ändern:
- HV_FLUSH_ALL_PROCESSORS gibt an, dass der Vorgang auf alle virtuellen Prozessoren innerhalb der Partition angewendet werden soll. Wenn dieses Flag festgelegt ist, wird der ProcessorMask-Parameter ignoriert.
- HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES gibt an, dass der Vorgang auf alle virtuellen Adressräume angewendet werden soll. Wenn dieses Flag festgelegt ist, wird der AddressSpace-Parameter ignoriert.
- HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY ist für diesen Anruf nicht sinnvoll und wird als ungültige Option behandelt.
Alle anderen Flags sind reserviert und müssen auf Null festgelegt werden.
Dieser Aufruf akzeptiert eine Liste der GVA-Bereiche. Jeder Bereich verfügt über eine Basis-GVA. Da Leerungen mit Seiten granularität durchgeführt werden, können die unteren 12 Bits der GVA verwendet werden, um eine Bereichslänge zu definieren. Diese Bits codieren die Anzahl zusätzlicher Seiten (über die ursprüngliche Seite hinaus) innerhalb des Bereichs. Dadurch kann jeder Eintrag einen Bereich von 1 bis 4096 Seiten codieren.
Eine GVA, die in eine Zuordnung mit großen Seiten (2 MB oder 4 MB) fällt, bewirkt, dass die gesamte große Seite aus der virtuellen TLB geleert wird.
Dieser Aufruf garantiert, dass durch das Zeitsteuerelement wieder an den Aufrufer zurückgegeben wird, die observierbaren Effekte aller Leerungen auf die angegebenen virtuellen Prozessoren aufgetreten sind.
Ungültige GVAs (diejenigen, die Adressen über das Ende des GVA-Bereichs der Partition angeben) werden ignoriert.
Wenn die TLB eines virtuellen Zielprozessors geleert werden muss und der virtuelle Prozessor TLB-Leerungen hemmt, wird der virtuelle Prozessor des Anrufers angehalten. Wenn TLB-Spülungen nicht mehr hemmt werden, ist der virtuelle Prozessor "unsuspended", und der Hypercall wird neu hergestellt.
Anrufcode
0x0003 (Rep)
Eingabe-Parameter
| Name | Offset | Größe | Bereitgestellte Informationen |
|---|---|---|---|
AddressSpace |
0 | 8 | Gibt eine Adressraum-ID (CR3-Wert) an. |
Flags |
8 | 8 | Set of flag bits that modify the operation of the flush. |
ProcessorMask |
16 | 8 | Prozessormaske, die angibt, welche Prozessoren durch den Spülvorgang beeinflusst werden sollen. |
Eingabelistenelement
| Name | Offset | Größe | Bereitgestellte Informationen |
|---|---|---|---|
GvaRange |
0 | 8 | GVA-Bereich |