Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Гиперквал 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 , отличное от нуля, обычно является первым шагом в последовательности инициализации гипервизора, так как он определяет гостевую операционную систему для гипервизора и обеспечивает доступ к полному набору регистров.