Udostępnij przez


HvCallSetVpRegisters

HypercallSetVpRegisters HvCallSetRegisters zapisuje stan procesora wirtualnego.

Interfejs

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

Stan jest zapisywany jako seria wartości rejestru, z których każda odpowiada nazwie rejestru podanej jako dane wejściowe.

Minimalne sprawdzanie błędów jest wykonywane po zmodyfikowaniu wartości rejestru. W szczególności funkcja hypervisor zweryfikuje, że zarezerwowane bity rejestru są ustawione na zero, bity, które są definiowane architektonicznie jako zawsze zawierające zero lub jeden są odpowiednio ustawione, a określone bity poza rozmiarem architektury rejestru są zero.

Tego wywołania nie można użyć do modyfikowania wartości rejestru tylko do odczytu.

Skutki uboczne modyfikowania rejestru nie są wykonywane. Obejmuje to generowanie wyjątków, synchronizacji potoków, opróżniania TLB itd.

Restrictions

  • Obiekt wywołujący musi być elementem nadrzędnym partycji określonej przez PartitionId lub określona partycja musi być "samodzielna", a partycja musi mieć uprawnienie AccessVpRegisters.

Kod wywołania

0x0051 (Rep)

Parametry wejściowe

Name Przesunięcie Rozmiar Podane informacje
PartitionId 0 8 Określa identyfikator partycji.
VpIndex 8 4 Określa indeks procesora wirtualnego.
TargetVtl 12 1 określa docelową bibliotekę VTL.
RsvdZ 13 3

Input List, element

Name Przesunięcie Rozmiar Podane informacje
RegisterName 0 4 Określa nazwę rejestru, który ma zostać zmodyfikowany.
RsvdZ 4 12
RegisterValue 16 16 Określa nową wartość dla określonego rejestru.

Lista wczesnych rejestrów (ARM64)

W usłudze ARM64 niektóre rejestry można ustawić przy użyciu tej funkcji hypercall, zanim rejestr identyfikatora systemu operacyjnego gościa (HvRegisterGuestOsId) jest ustawiony na wartość inną niż zero. Umożliwia to wczesne inicjowanie krytycznych rejestrów systemu podczas procesu rozruchu.

Przed identyfikacją systemu operacyjnego gościa można ustawić następujące rejestry:

Nazwa rejestracji Description
HvRegisterGuestOsId Rejestr identyfikacji systemu operacyjnego gościa
HvArm64RegisterSyntheticVbarEl1 Rejestr adresów podstawowych wektorów syntetycznych dla EL1
HvRegisterGuestCrashCtl Rejestr kontroli awarii gościa
HvRegisterGuestCrashP0 Parametr awarii gościa 0
HvRegisterGuestCrashP1 Parametr awarii gościa 1
HvRegisterGuestCrashP2 Parametr awarii gościa 2
HvRegisterGuestCrashP3 Parametr awarii gościa 3
HvRegisterGuestCrashP4 Parametr awarii gościa 4

Wszystkie inne rejestry wymagają ustanowienia identyfikatora systemu operacyjnego gościa (bez zera), zanim będzie można je zmodyfikować za pomocą tego hiperwołania.

Nuta: Ustawienie HvRegisterGuestOsId wartości innej niż zero jest zazwyczaj pierwszym krokiem w sekwencji inicjowania funkcji hypervisor, ponieważ identyfikuje system operacyjny gościa funkcji hypervisor i umożliwia dostęp do pełnego zestawu rejestrów.

Zobacz także

HV_REGISTER_NAME

HV_REGISTER_VALUE