Compartir a través de


HvCallSetVpRegisters

La hiperllamada HvCallSetVpRegisters escribe el estado de un procesador virtual.

Interfaz

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

El estado se escribe como una serie de valores de registro, cada uno correspondiente a un nombre de registro proporcionado como entrada.

La comprobación mínima de errores se realiza cuando se modifica un valor de registro. En concreto, el hipervisor validará que los bits reservados de un registro se establecen en cero, los bits que se definen de forma arquitectónica como siempre que contienen un cero o uno se establecen adecuadamente, y los bits especificados más allá del tamaño arquitectónico del registro son ceros.

Esta llamada no se puede usar para modificar el valor de un registro de solo lectura.

No se realizan efectos secundarios de modificar un registro. Esto incluye la generación de excepciones, sincronizaciones de canalización, vaciados de TLB, etc.

Restrictions

  • El autor de la llamada debe ser el elemento primario de la partición especificada por PartitionId o la partición especificada debe ser "self" y la partición debe tener el privilegio AccessVpRegisters.

Código de llamada

0x0051 (Rep)

Parámetros de entrada

Nombre Desplazar Tamaño Información proporcionada
PartitionId 0 8 Especifica el identificador de partición.
VpIndex 8 4 Especifica el índice del procesador virtual.
TargetVtl 12 1 especifica el VTL de destino.
RsvdZ 13 3

Elemento Input List

Nombre Desplazar Tamaño Información proporcionada
RegisterName 0 4 Especifica el nombre de un registro que se va a modificar.
RsvdZ 4 12
RegisterValue 16 16 Especifica el nuevo valor para el registro especificado.

Lista de registros anticipados (ARM64)

En ARM64, se pueden establecer determinados registros mediante esta hiperllamada antes de que el registro de identificador de sistema operativo invitado (HvRegisterGuestOsId) esté establecido en un valor distinto de cero. Esto permite la inicialización temprana de registros críticos del sistema durante el proceso de arranque.

Se permiten establecer los registros siguientes antes de la identificación del sistema operativo invitado:

Nombre del registro Description
HvRegisterGuestOsId Registro de identificación del sistema operativo invitado
HvArm64RegisterSyntheticVbarEl1 Registro de direcciones base de vectores sintéticos para EL1
HvRegisterGuestCrashCtl Registro del control de bloqueo de invitado
HvRegisterGuestCrashP0 Parámetro de bloqueo de invitado 0
HvRegisterGuestCrashP1 Parámetro de bloqueo de invitado 1
HvRegisterGuestCrashP2 Parámetro de bloqueo de invitado 2
HvRegisterGuestCrashP3 Parámetro de bloqueo de invitado 3
HvRegisterGuestCrashP4 Parámetro de bloqueo de invitado 4

Todos los demás registros requieren que se establezca el identificador del sistema operativo invitado (distinto de cero) antes de que se puedan modificar a través de esta hiperllamada.

Nota: Establecer HvRegisterGuestOsId en un valor distinto de cero suele ser el primer paso de la secuencia de inicialización del hipervisor, ya que identifica el sistema operativo invitado al hipervisor y permite el acceso al conjunto de registros completo.

Consulte también

HV_REGISTER_NAME

HV_REGISTER_VALUE