다음을 통해 공유


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

상태는 각각 입력으로 제공된 레지스터 이름에 해당하는 일련의 레지스터 값으로 작성됩니다.

레지스터 값이 수정될 때 최소 오류 검사가 수행됩니다. 특히 하이퍼바이저는 레지스터의 예약된 비트가 0으로 설정되고, 항상 0 또는 1을 포함하는 것으로 아키텍처로 정의된 비트가 적절하게 설정되고, 레지스터의 아키텍처 크기를 초과하는 지정된 비트가 0으로 설정되어 있는지 확인합니다.

이 호출은 읽기 전용 레지스터의 값을 수정하는 데 사용할 수 없습니다.

레지스터 수정의 부작용은 수행되지 않습니다. 여기에는 예외 생성, 파이프라인 동기화, TLB 플러시 등이 포함됩니다.

제한 사항

  • 호출자는 PartitionId로 지정된 파티션의 부모이거나 지정된 파티션은 "자체"여야 하며 파티션에는 AccessVpRegisters 권한이 있어야 합니다.

호출 코드

0x0051 (담당자)

입력 매개 변수

이름 상쇄 Size 제공된 정보
PartitionId 0 8 파티션 ID를 지정합니다.
VpIndex 8 4 가상 프로세서의 인덱스를 지정합니다.
TargetVtl 12 1 는 대상 VTL을 지정합니다.
RsvdZ 13 3

Input List 요소

이름 상쇄 Size 제공된 정보
RegisterName 0 4 수정할 레지스터의 이름을 지정합니다.
RsvdZ 4 12
RegisterValue 16 16 지정된 레지스터의 새 값을 지정합니다.

초기 등록 목록(ARM64)

ARM64에서는 게스트 OS ID 레지스터(HvRegisterGuestOsId)가 0이 아닌 값으로 설정되기 전에 이 하이퍼콜을 사용하여 특정 레지스터를 설정할 수 있습니다. 이렇게 하면 부팅 프로세스 중에 중요한 시스템 레지스터를 초기화할 수 있습니다.

게스트 OS 식별 전에 다음 레지스터를 설정할 수 있습니다.

등록 이름 Description
HvRegisterGuestOsId 게스트 운영 체제 식별 레지스터
HvArm64RegisterSyntheticVbarEl1 EL1에 대한 가상 벡터 기본 주소 레지스터
HvRegisterGuestCrashCtl 게스트 크래시 제어 레지스터
HvRegisterGuestCrashP0 게스트 크래시 매개 변수 0
HvRegisterGuestCrashP1 게스트 크래시 매개 변수 1
HvRegisterGuestCrashP2 게스트 크래시 매개 변수 2
HvRegisterGuestCrashP3 게스트 크래시 매개 변수 3
HvRegisterGuestCrashP4 게스트 크래시 매개 변수 4

다른 모든 레지스터는 이 하이퍼콜을 통해 수정하기 전에 게스트 OS ID를 설정(0이 아닌)해야 합니다.

메모: 0이 아닌 값으로 설정 HvRegisterGuestOsId 하면 하이퍼바이저에 대한 게스트 운영 체제를 식별하고 전체 레지스터 집합에 액세스할 수 있으므로 일반적으로 하이퍼바이저 초기화 시퀀스의 첫 번째 단계가 됩니다.

참고하십시오

HV_REGISTER_NAME

HV_REGISTER_VALUE