Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja hypercallCallFlushVirtualAddressSpace unieważnia wszystkie wirtualne wpisy modułu TLB należące do określonej przestrzeni adresowej.
Interfejs
HV_STATUS
HvCallFlushVirtualAddressSpace(
_In_ HV_ADDRESS_SPACE_ID AddressSpace,
_In_ HV_FLUSH_FLAGS Flags,
_In_ UINT64 ProcessorMask
);
Operacja unieważnienia wirtualnego modułu TLB działa na co najmniej jednym procesorze.
Jeśli gość ma wiedzę o tym, które procesory mogą wymagać opróżnienia, może określić maskę procesora. Każdy bit w masce odpowiada indeksowi procesora wirtualnego. Na przykład maska 0x0000000000000051 wskazuje, że funkcja hypervisor powinna opróżniać tylko TLB procesorów wirtualnych 0, 4 i 6. Procesor wirtualny może określić jego indeks, odczytując rejestr syntetyczny HvRegisterVpIndex (za pośrednictwem HvCallGetVpRegisters) lub na x64 z HV_X64_MSR_VP_INDEX MSR.
Następujące flagi mogą służyć do modyfikowania zachowania opróżniania:
- HV_FLUSH_ALL_PROCESSORS wskazuje, że operacja powinna być stosowana do wszystkich procesorów wirtualnych w ramach partycji. Jeśli ta flaga jest ustawiona, parametr ProcessorMask jest ignorowany.
- HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES wskazuje, że operacja powinna być stosowana do wszystkich wirtualnych przestrzeni adresowych. Jeśli ta flaga jest ustawiona, parametr AddressSpace jest ignorowany.
- HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY wskazuje, że funkcja hypervisor jest wymagana tylko do opróżniania mapowań stron, które nie zostały zamapowane jako "globalne" (na x64, bit "G" we wpisie tabeli stron; w usłudze ARM64, bit sieciowej grupy zabezpieczeń). Wpisy globalne mogą być (ale nie są wymagane) pozostawione przez funkcję hypervisor.
Wszystkie inne flagi są zarezerwowane i muszą być ustawione na zero.
To wywołanie gwarantuje, że kontrola czasu powraca do obiektu wywołującego, zauważalne skutki wszystkich opróżnień na określonych procesorach wirtualnych wystąpiły.
Jeśli docelowy procesor wirtualny TLB wymaga opróżnienia i że TLB procesora wirtualnego jest obecnie "zablokowany", procesor wirtualny obiektu wywołującego jest zawieszony. Gdy procesor wirtualny obiektu wywołującego ma wartość "unsuspended", funkcja hypercall zostanie ponownie wydana.
Kod wywołania
0x0002 (Proste)
Parametry wejściowe
| Name | Przesunięcie | Rozmiar | Podane informacje |
|---|---|---|---|
AddressSpace |
0 | 8 | Określa identyfikator przestrzeni adresowej (CR3 na x64, baza tabeli tłumaczeń na ARM64). |
Flags |
8 | 8 | Zestaw bitów flag, które modyfikują operację opróżniania. |
ProcessorMask |
16 | 8 | Maska procesora wskazująca, które procesory powinny mieć wpływ na operację opróżniania. |