HvCallSetVpRegisters

Гиперквал HvCallSetVpRegisters записывает состояние виртуального процессора.

Интерфейс

HV_STATUS
HvCallSetVpRegisters(
   _In_ HV_PARTITION_ID PartitionId,
   _In_ HV_VP_INDEX VpIndex,
   _In_ HV_INPUT_VTL InputVtl,
   _Inout_ UINT32* RegisterCount,
   _In_reads_(*RegisterCount) const HV_REGISTER_NAME* RegisterNameList,
   _In_reads_(*RegisterCount) const HV_REGISTER_VALUE* RegisterValueList
   );

Состояние записывается в виде ряда значений регистра, каждое из которых соответствует имени регистра, предоставленному в качестве входных данных.

Минимальная проверка ошибок выполняется при изменении значения регистра. В частности, гипервизор проверяет, что зарезервированные биты регистра равны нулю, биты, которые архитектурно определяются как всегда содержащие ноль или один задан соответствующим образом, и указанные биты за пределами архитектурного размера регистра ноль.

Этот вызов нельзя использовать для изменения значения регистра только для чтения.

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

Restrictions

  • Вызывающий объект должен быть родительским элементом секции, указанной PartitionId, или указанный раздел должен быть "самообслуживанием", а раздел должен иметь привилегию AccessVpRegisters.

Код вызова

0x0051 (Республика)

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

Имя Смещение Size Предоставленная информация
PartitionId 0 8 Указывает идентификатор секции.
VpIndex 8 4 Указывает индекс виртуального процессора.
TargetVtl 12 1 указывает целевой VTL.
RsvdZ 13 3

Элемент Input List

Имя Смещение Size Предоставленная информация
RegisterName 0 4 Указывает имя регистра, который необходимо изменить.
RsvdZ 4 12
RegisterValue 16 16 Задает новое значение для указанного регистра.

Список ранних регистраций (ARM64)

В ARM64 некоторые регистры можно задать с помощью этого гиперклака перед регистрацией идентификатора гостевой ОС (HvRegisterGuestOsId) значением, не равным нулю. Это позволяет ранней инициализации критически важных системных регистров во время загрузки.

Перед идентификацией гостевой ОС разрешено задать следующие регистры:

Имя регистрации Description
HvRegisterGuestOsId Регистрация идентификации гостевой операционной системы
HvArm64RegisterSyntheticVbarEl1 Регистрация искусственных векторных базовых адресов для EL1
HvRegisterGuestCrashCtl Регистрация гостевого аварийного сбоя
HvRegisterGuestCrashP0 Параметр аварийного сбоя гостя 0
HvRegisterGuestCrashP1 Параметр аварийного сбоя гостя 1
HvRegisterGuestCrashP2 Параметр аварийного сбоя гостя 2
HvRegisterGuestCrashP3 Параметр аварийного сбоя гостя 3
HvRegisterGuestCrashP4 Параметр аварийного сбоя гостя 4

Все остальные регистры требуют установки идентификатора гостевой ОС (ненулевого) перед их изменением с помощью этого гиперклая.

Заметка: Значение HvRegisterGuestOsId , отличное от нуля, обычно является первым шагом в последовательности инициализации гипервизора, так как он определяет гостевую операционную систему для гипервизора и обеспечивает доступ к полному набору регистров.

См. также

HV_REGISTER_NAME

HV_REGISTER_VALUE