Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
HvCallFlushVirtualAddressList invalida partes del TLB virtual que pertenecen a un espacio de direcciones especificado.
Arquitectura: solo x64.
Interfaz
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
);
La operación de invalidación de TLB virtual actúa en uno o varios procesadores.
Si el invitado tiene conocimiento sobre qué procesadores pueden necesitar vaciarse, puede especificar una máscara de procesador. Cada bit de la máscara corresponde a un índice de procesador virtual. Por ejemplo, una máscara de 0x0000000000000051 indica que el hipervisor debe vaciar solo el TLB de los procesadores virtuales 0, 4 y 6.
Las marcas siguientes se pueden usar para modificar el comportamiento del vaciado:
- HV_FLUSH_ALL_PROCESSORS indica que la operación debe aplicarse a todos los procesadores virtuales de la partición. Si se establece esta marca, se omite el parámetro ProcessorMask.
- HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES indica que la operación debe aplicarse a todos los espacios de direcciones virtuales. Si se establece esta marca, se omite el parámetro AddressSpace.
- HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY no tiene sentido para esta llamada y se trata como una opción no válida.
Todas las demás marcas están reservadas y deben establecerse en cero.
Esta llamada toma una lista de intervalos de GVA. Cada rango tiene una GVA base. Dado que los vaciados se realizan con granularidad de página, se pueden usar los 12 bits inferiores de la GVA para definir una longitud de intervalo. Estos bits codifican el número de páginas adicionales (más allá de la página inicial) dentro del intervalo. Esto permite que cada entrada codifique un intervalo de 1 a 4096 páginas.
Una GVA que se encuentra dentro de una asignación de "página grande" (2 MB o 4 MB) hará que toda la página grande se vacíe del TLB virtual.
Esta llamada garantiza que, en el control de tiempo, vuelva al autor de la llamada, se hayan producido los efectos observables de todos los vaciados en los procesadores virtuales especificados.
Se omiten las GV no válidas (aquellas que especifican direcciones más allá del final del espacio de GVA de la partición).
Si el TLB de un procesador virtual de destino requiere vaciado y ese procesador virtual está inhibiendo los vaciados de TLB, se suspende el procesador virtual del autor de la llamada. Cuando los vaciados de TLB ya no se inhiban, el procesador virtual es "sin abrir" y se volverá a emitir la hiperllamada.
Código de llamada
0x0003 (Rep)
Parámetros de entrada
| Nombre | Desplazar | Tamaño | Información proporcionada |
|---|---|---|---|
AddressSpace |
0 | 8 | Especifica un identificador de espacio de direcciones (valor CR3). |
Flags |
8 | 8 | Conjunto de bits de marca que modifican la operación del vaciado. |
ProcessorMask |
16 | 8 | Máscara de procesador que indica qué procesadores deben verse afectados por la operación de vaciado. |
Elemento Input List
| Nombre | Desplazar | Tamaño | Información proporcionada |
|---|---|---|---|
GvaRange |
0 | 8 | Intervalo de GVA |