Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A hiperchamada HvCallFlushVirtualAddressList invalida partes do TLB virtual que pertencem a um espaço de endereço especificado.
Arquitetura: somente x64.
Interfase
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
);
A operação de invalidação de TLB virtual atua em um ou mais processadores.
Se o convidado tiver conhecimento sobre quais processadores talvez precisem ser liberados, ele poderá 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 liberar apenas o TLB dos processadores virtuais 0, 4 e 6.
Os sinalizadores a seguir podem ser usados para modificar o comportamento da liberação:
- 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 não faz sentido para essa chamada e é tratada como uma opção inválida.
Todos os outros sinalizadores são reservados e devem ser definidos como zero.
Essa chamada usa uma lista de intervalos de GVA. Cada intervalo tem uma GVA base. Como as liberações são executadas com granularidade de página, os 12 bits inferiores da GVA podem ser usados para definir um comprimento de intervalo. Esses bits codificam o número de páginas adicionais (além da página inicial) dentro do intervalo. Isso permite que cada entrada codificar um intervalo de 1 a 4.096 páginas.
Um GVA que se enquadra em um mapeamento de "página grande" (2 MB ou 4 MB) fará com que toda a página grande seja liberada do TLB virtual.
Essa chamada garante que, pelo controle de tempo, retorne ao chamador, os efeitos observáveis de todas as liberações nos processadores virtuais especificados ocorreram.
GVAs inválidas (aquelas que especificam endereços além do final do espaço GVA da partição) são ignoradas.
Se o TLB de um processador virtual de destino exigir liberação e esse processador virtual estiver inibindo liberações de TLB, o processador virtual do chamador será suspenso. Quando as liberações de TLB não são mais inibidas, o processador virtual é "não gasto" e a hiperchamada será reemissada.
Código de chamada
0x0003 (Rep)
Parâmetros de Entrada
| Nome | Offset | Tamanho | Informações fornecidas |
|---|---|---|---|
AddressSpace |
0 | 8 | Especifica uma ID de espaço de endereço (valor CR3). |
Flags |
8 | 8 | Conjunto de bits de sinalizador que modificam a operação da liberação. |
ProcessorMask |
16 | 8 | Máscara de processador que indica quais processadores devem ser afetados pela operação de liberação. |
Elemento Input List
| Nome | Offset | Tamanho | Informações fornecidas |
|---|---|---|---|
GvaRange |
0 | 8 | Intervalo de GVA |