Compartir a través de


HvCallFlushVirtualAddressSpace

HvCallFlushVirtualAddressSpace invalida todas las entradas de TLB virtuales que pertenecen a un espacio de direcciones especificado.

Interfaz

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

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. Un procesador virtual puede determinar su índice leyendo el registro sintético HvRegisterVpIndex (a través de HvCallGetVpRegisters) o en x64 desde el HV_X64_MSR_VP_INDEX MSR.

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 indica que el hipervisor solo es necesario para vaciar las asignaciones de página que no se asignaron como "globales" (en x64, el bit "G" de la entrada de la tabla de páginas; en ARM64, el bit nG). Las entradas globales pueden ser (pero no necesarias para ser) dejar influshed por el hipervisor.

Todas las demás marcas están reservadas y deben establecerse en cero.

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.

Si el TLB de un procesador virtual de destino requiere vaciado y ese TLB del procesador virtual está actualmente "bloqueado", se suspende el procesador virtual del autor de la llamada. Cuando el procesador virtual del autor de la llamada es "no abierto", se volverá a emitir la hiperllamada.

Código de llamada

0x0002 (Simple)

Parámetros de entrada

Nombre Desplazar Tamaño Información proporcionada
AddressSpace 0 8 Especifica un identificador de espacio de direcciones (CR3 en x64, base de tabla de traducción en ARM64).
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.