Partilhar via


HvCallFlushVirtualAddressSpace

A hiperchamada HvCallFlushVirtualAddressSpace invalida todas as entradas virtuais do TLB que pertencem a um espaço de endereçamento especificado.

Interfaz

HV_STATUS
HvCallFlushVirtualAddressSpace(
   _In_ HV_ADDRESS_SPACE_ID AddressSpace,
   _In_ HV_FLUSH_FLAGS Flags,
   _In_ UINT64 ProcessorMask
   );

A operação de invalidação de TLB virtual atua em um ou mais processadores.

Se o convidado tiver conhecimento sobre quais processadores podem precisar ser liberados, ele pode especificar uma máscara de processador. Cada bit na máscara corresponde a um índice de processador virtual. Por exemplo, uma máscara de 0x0000000000000051 indica que o hipervisor deve limpar apenas o TLB dos processadores virtuais 0, 4 e 6. Um processador virtual pode determinar o seu índice lendo o registo sintético HvRegisterVpIndex (via HvCallGetVpRegisters) ou em x64 a partir do HV_X64_MSR_VP_INDEX MSR.

Os seguintes sinalizadores podem ser usados para modificar o comportamento da descarga:

  • HV_FLUSH_ALL_PROCESSORS indica que a operação deve ser aplicada a todos os processadores virtuais dentro da partição. Se esse sinalizador for definido, o parâmetro ProcessorMask será ignorado.
  • HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES indica que a operação deve ser aplicada a todos os espaços de endereço virtual. Se esse sinalizador for definido, o parâmetro AddressSpace será ignorado.
  • HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY indica que o hipervisor é necessário apenas para limpar mapeamentos de página que não foram mapeados como "global" (em x64, o bit "G" na entrada da tabela de páginas; no ARM64, o bit nG). As entradas globais podem ser (mas não são obrigatórias) deixadas sem limpar pelo hipervisor.

Todos os outros sinalizadores são reservados e devem ser definidos como zero.

Essa chamada garante que, no momento em que o controle retorna ao chamador, os efeitos observáveis de todas as liberações nos processadores virtuais especificados ocorreram.

Se o TLB de um processador virtual alvo exigir limpeza e o TLB desse processador virtual estiver atualmente "bloqueado", o processador virtual do chamador é suspenso. Quando o processador virtual do chamador é "dessuspenso", a chamada hiper é reemitida.

Código de Chamada

0x0002 (Simples)

Parâmetros de entrada

Nome Compensação Tamanho Informações Prestadas
AddressSpace 0 8 Especifica um ID de espaço de endereçamento (CR3 em x64, tabela de tradução baseada em ARM64).
Flags 8 8 Conjunto de bits de sinalizador que modificam a operação da descarga.
ProcessorMask 16 8 Máscara do processador indicando quais processadores devem ser afetados pela operação de descarga.