다음을 통해 공유


HvCallFlushVirtualAddressList

HvCallFlushVirtualAddressList 하이퍼콜은 지정된 주소 공간에 속하는 가상 TLB의 일부를 무효화합니다.

아키텍처: x64만 해당합니다.

인터페이스

HV_STATUS
HvCallFlushVirtualAddressList(
   _In_ HV_ADDRESS_SPACE_ID AddressSpace,
   _In_ HV_FLUSH_FLAGS Flags,
   _In_ UINT64 ProcessorMask,
   _Inout_ UINT32* GvaCount,
   _In_reads_(*GvaCount) const HV_GVA* GvaRangeList
   );

가상 TLB 무효화 작업은 하나 이상의 프로세서에서 작동합니다.

게스트가 플러시해야 할 수 있는 프로세서에 대한 지식이 있는 경우 프로세서 마스크를 지정할 수 있습니다. 마스크의 각 비트는 가상 프로세서 인덱스에 해당합니다. 예를 들어 0x0000000000000051 마스크는 하이퍼바이저가 가상 프로세서 0, 4 및 6의 TLB만 플러시해야 임을 나타냅니다.

다음 플래그를 사용하여 플러시 동작을 수정할 수 있습니다.

  • HV_FLUSH_ALL_PROCESSORS 작업이 파티션 내의 모든 가상 프로세서에 적용되어야 임을 나타냅니다. 이 플래그를 설정하면 ProcessorMask 매개 변수가 무시됩니다.
  • HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES 작업이 모든 가상 주소 공간에 적용되어야 임을 나타냅니다. 이 플래그를 설정하면 AddressSpace 매개 변수가 무시됩니다.
  • HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY 이 호출에 의미가 없으며 잘못된 옵션으로 처리됩니다.

다른 모든 플래그는 예약되어 있으며 0으로 설정해야 합니다.

이 호출은 GVA 범위 목록을 가져옵니다. 각 범위에는 기본 GVA가 있습니다. 페이지 세분성으로 플러시가 수행되므로 GVA의 아래쪽 12비트를 사용하여 범위 길이를 정의할 수 있습니다. 이러한 비트는 범위 내의 추가 페이지 수(초기 페이지 외)를 인코딩합니다. 이렇게 하면 각 항목이 1~4096페이지의 범위를 인코딩할 수 있습니다.

"큰 페이지" 매핑(2MB 또는 4MB) 내에 속하는 GVA는 전체 큰 페이지를 가상 TLB에서 플러시합니다.

이 호출은 시간 컨트롤이 호출자에게 다시 반환될 때 지정된 가상 프로세서에 대한 모든 플러시에서 관찰 가능한 효과가 발생했음을 보장합니다.

잘못된 GVA(파티션의 GVA 공간 끝 이후의 주소를 지정하는 GVA)는 무시됩니다.

대상 가상 프로세서의 TLB에 플러시가 필요하고 가상 프로세서가 TLB 플러시를 억제하는 경우 호출자의 가상 프로세서가 일시 중단됩니다. TLB 플러시가 더 이상 억제되지 않으면 가상 프로세서는 "사용되지 않음"이며 하이퍼콜이 재발행됩니다.

호출 코드

0x0003 (담당자)

입력 매개 변수

이름 상쇄 Size 제공된 정보
AddressSpace 0 8 주소 공간 ID(CR3 값)를 지정합니다.
Flags 8 8 플러시 작업을 수정하는 플래그 비트 집합입니다.
ProcessorMask 16 8 플러시 작업의 영향을 받는 프로세서를 나타내는 프로세서 마스크입니다.

Input List 요소

이름 상쇄 Size 제공된 정보
GvaRange 0 8 GVA 범위