Udostępnij przez


HvCallFlushVirtualAddressList

HvCallFlushVirtualAddressList hypercall unieważnia części wirtualnego modułu TLB należącego do określonej przestrzeni adresowej.

Architektura: tylko x64.

Interfejs

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
   );

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.

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 nie ma sensu dla tego wywołania i jest traktowany jako nieprawidłowa opcja.

Wszystkie inne flagi są zarezerwowane i muszą być ustawione na zero.

To wywołanie pobiera listę zakresów GVA. Każdy zakres ma podstawową GVA. Ponieważ opróżnienia są wykonywane z szczegółowością strony, dolnej 12 bitów GVA można użyć do zdefiniowania długości zakresu. Te bity kodują liczbę dodatkowych stron (poza początkową stroną) w zakresie. Dzięki temu każdy wpis może kodować zakres od 1 do 4096 stron.

GVA mieszczące się w mapowaniu "dużej strony" (2 MB lub 4MB) spowoduje opróżnienie całej dużej strony z wirtualnego modułu TLB.

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.

Nieprawidłowe GVA (te, które określają adresy poza końcem przestrzeni GVA partycji) są ignorowane.

Jeśli docelowy procesor wirtualny TLB wymaga opróżnienia i że procesor wirtualny hamuje opróżnianie TLB, procesor wirtualny obiektu wywołującego jest zawieszony. Gdy opróżnienia TLB nie są już hamowane, procesor wirtualny jest "nierozpoznany", a hiperwzlot zostanie ponownie wyświetlony.

Kod wywołania

0x0003 (Rep)

Parametry wejściowe

Name Przesunięcie Rozmiar Podane informacje
AddressSpace 0 8 Określa identyfikator przestrzeni adresowej (wartość CR3).
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.

Input List, element

Name Przesunięcie Rozmiar Podane informacje
GvaRange 0 8 Zakres GVA