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 | Маска процессора, указывающая, какие процессоры должны быть затронуты операцией очистки. |