Partilhar via


HvCallSetVpRegisters

A hiperchamada HvCallSetVpRegisters grava o estado de um processador 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
   );

O estado é escrito como uma série de valores de registro, cada um correspondendo a um nome de registro fornecido como entrada.

A verificação de erros mínimos é executada quando um valor de registro é modificado. Em particular, o hipervisor validará que os bits reservados de um registro são definidos como zero, os bits que são arquitetonicamente definidos como sempre contendo um zero ou um são definidos apropriadamente e os bits especificados além do tamanho arquitetônico do registro são zerados.

Esta chamada não pode ser usada para modificar o valor de um registro somente leitura.

Os efeitos secundários da modificação de um registo não são realizados. Isso inclui a geração de exceções, sincronizações de pipeline, liberações de TLB e assim por diante.

Restrições

  • O chamador deve ser o pai da partição especificada por PartitionId, ou a partição especificada deve ser "self" e a partição deve ter o privilégio AccessVpRegisters.

Código de Chamada

0x0051 (Rep)

Parâmetros de entrada

Nome Compensação Tamanho Informações Prestadas
PartitionId 0 8 Especifica a ID da partição.
VpIndex 8 4 Especifica o índice do processador virtual.
TargetVtl 12 1 especifica a VTL de destino.
RsvdZ 13 3

Elemento da lista de entrada

Nome Compensação Tamanho Informações Prestadas
RegisterName 0 4 Especifica o nome de um registro a ser modificado.
RsvdZ 4 12
RegisterValue 16 16 Especifica o novo valor para o registro especificado.

Lista de Registos Antecipados (ARM64)

No ARM64, certos registros podem ser definidos usando essa hiperchamada antes que o registro de ID do SO convidado (HvRegisterGuestOsId) seja definido como um valor diferente de zero. Isso permite a inicialização antecipada de registradores críticos do sistema durante o processo de inicialização.

Os seguintes registros podem ser definidos antes da identificação do SO convidado:

Nome do Registo Description
HvRegisterGuestOsId Registo de identificação do sistema operativo convidado
HvArm64RegisterSyntheticVbarEl1 Registro de endereço base vetorial sintético para EL1
HvRegisterGuestCrashCtl Registo de controlo de colisão de convidados
HvRegisterGuestCrashP0 Parâmetro de falha do convidado 0
HvRegisterGuestCrashP1 Parâmetro de falha do convidado 1
HvRegisterGuestCrashP2 Parâmetro de falha do convidado 2
HvRegisterGuestCrashP3 Parâmetro de falha do convidado 3
HvRegisterGuestCrashP4 Parâmetro de falha do convidado 4

Todos os outros registos requerem que o ID do SO convidado seja estabelecido (diferente de zero) antes de poderem ser modificados através desta hiperchamada.

Observação: A configuração HvRegisterGuestOsId para um valor diferente de zero é normalmente a primeira etapa na sequência de inicialização do hipervisor, pois identifica o sistema operacional convidado para o hipervisor e permite o acesso ao conjunto completo de registros.

Consulte também

HV_REGISTER_NAME

HV_REGISTER_VALUE