HvCallFlushVirtualAddressSpace

Гипервыск HvCallFlushVirtualAddressSpace делает недействительными все записи виртуальной подсистемы балансировки нагрузки, принадлежащие указанному адресное пространство.

Интерфейс

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

Операция недействительности виртуальной подсистемы балансировки нагрузки действует на одном или нескольких процессорах.

Если гость знает, какие процессоры может потребоваться очистить, он может указать маску процессора. Каждый бит в маске соответствует индексу виртуального процессора. Например, маска 0x0000000000000051 указывает, что низкоуровневая оболочка должна сбрасывать только TLB виртуальных процессоров 0, 4 и 6. Виртуальный процессор может определить свой индекс, считывая HV_X64_MSR_VP_INDEX MSR.

Для изменения поведения очистки можно использовать следующие флаги:

  • HV_FLUSH_ALL_PROCESSORS указывает, что операция должна применяться ко всем виртуальным процессорам в секции. Если этот флаг установлен, параметр ProcessorMask игнорируется.
  • HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES указывает, что операция должна применяться ко всем виртуальным адресным пространствам. Если этот флаг установлен, параметр AddressSpace игнорируется.
  • HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY указывает, что гипервизор требуется только для очистки сопоставлений страниц, которые не были сопоставлены как "глобальные" (то есть бит x64 "G" был задан в записи таблицы страниц). Глобальные записи могут быть оставлены гипервизором (но не обязательно).

Все остальные флаги зарезервированы и должны иметь нулевое значение.

Этот вызов гарантирует, что к тому времени, когда элемент управления временем возвращается вызывающей стороне, наблюдаемые эффекты всех сбросов на указанных виртуальных процессорах.

Если TLB целевого виртуального процессора требует очистки и TLB этого виртуального процессора в настоящее время заблокирован, виртуальный процессор вызывающего объекта приостанавливается. Когда виртуальный процессор вызывающего абонента "не добавлен", гипервызов будет повторно выпущен.

Код вызова

0x0002 (Простой)

Входные параметры

Имя Offset Размер Предоставленные сведения
AddressSpace 0 8 Задает идентификатор адресного пространства (значение CR3).
Flags 8 8 Набор битов флагов, которые изменяют операцию очистки.
ProcessorMask 16 8 Маска процессора, указывающая, какие процессоры должны быть затронуты операцией очистки.