Funzione di callback POFXCALLBACKPROCESSORHALT (pepfx.h)

La routine ProcessorHalt prepara il processore da arrestare.

Sintassi

POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;

NTSTATUS Pofxcallbackprocessorhalt(
  [in]                ULONG Flags,
  [in, out, optional] PVOID Context,
  [in]                PPROCESSOR_HALT_ROUTINE Halt
)
{...}

Parametri

[in] Flags

Flag che indicano le proprietà dello stato inattiva immesso dal processore. Il parametro Flags è impostato su zero o sul bit-OR di uno o più bit di flag seguenti.

Nome flag Valore Descrizione
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE 0x01 La routine di callback stop di PEP è responsabile dello scaricamento delle cache del processore. Se questo flag non è impostato, ProcessorHalt scarica le cache sullo stato di inattività del processore e invaliderà le cache in uscita da questo stato.
PROCESSOR_HALT_CACHE_COHERENT 0x02 Preparare il processore per immettere uno stato inattiva in cui le cache del processore rimarranno coerenti.
PROCESSOR_HALT_CONTEXT_RETAINED 0x04 Preparare il processore per immettere uno stato inattiva in cui verrà mantenuto il contesto del thread del processore.
PROCESSOR_HALT_RETURN_NOT_SAFE 0x08 La routine di callback stop di PEP è garantita per non restituire. Impostare questo flag se il callback Arresta esegue la transizione del processore a uno stato di perdita del contesto, che non può essere annullato dall'hardware. Quando questo flag è impostato, il sistema operativo considera un ritorno dal callback Arresta come errore irreversibile.
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND 0x16

[in, out, optional] Context

Puntatore a un contesto di arresto del processore definito da PEP. Questo puntatore viene passato come parametro alla routine Arresta callback. Questo contesto è opaco al framework di gestione energia di Windows (PoFx).

[in] Halt

Puntatore a una routine di callback interrotta implementata da PEP. PoFx chiama questa routine dopo la preparazione per arrestare il processore. Durante questo callback, il PEP dovrebbe passare il processore allo stato arrestato .

Valore restituito

ProcessorHalt restituisce STATUS_SUCCESS se il processore è riuscito a essere arrestato. I valori restituiti degli errori possibili includono il codice di stato seguente.

Valore restituito Descrizione
STATUS_INVALID_PARAMETER
Il parametro Halt è NULL; o un valore di flag non valido è stato specificato in Flags; o Flag contiene una combinazione illegale di bit di flag. Per altre informazioni, vedere la sezione Osservazioni.
STATUS_UNSUCCESSFUL
La routine di callback stop di PEP ha restituito in modo imprevisto da uno stato inattivo in cui il contesto hardware del processore non è stato mantenuto.

Commenti

Questa routine viene implementata dal framework di risparmio energia (PoFx) e viene chiamata dal plug-in dell'estensione della piattaforma (PEP). Il membro ProcessorHalt della struttura PEP_KERNEL_INFORMATION_STRUCT_V3 è un puntatore a una routine ProcessorHalt .

Prima di arrestare il processore, il PEP chiama la routine ProcessorHalt per offrire a PoFx un'opportunità di salvare il contesto hardware del processore. Se necessario, ProcessorHalt salva questo stato internamente in PoFx in modo che lo stato possa essere ripristinato in seguito quando il processore termina lo stato inattiva. Dopo aver preparato il processore per immettere lo stato inattivo, ProcessorHalt chiama la routine di callback Stop del PEP per arrestare il processore.

Nell'ambito della gestione di una notifica di PEP_NOTIFY_PPM_IDLE_EXECUTE , il PEP deve passare il processore allo stato inattiva selezionato dal PEP. Di seguito sono riportati i due modi per immettere lo stato di inattività del processore:

  • Per uno stato di inattività del processore in cui le cache del processore rimangono coerenti in modo che venga mantenuto tutto lo stato del sistema e del processore, il PEP può immettere direttamente lo stato di inattività senza prima chiamare ProcessorHalt.
  • Per uno stato di inattività del processore in cui le cache del processore potrebbero non rimanere coerenti o uno stato inattivo in cui il contesto hardware del processore non viene mantenuto, il PEP deve chiamare ProcessorHalt prima di passare al processore allo stato inattivo.
Le combinazioni seguenti di bit di flag sono illegali:
  • PROCESSOR_HALT_CONTEXT_RETAINED = 1 e PROCESSOR_HALT_RETURN_NOT_SAFE = 1

    La routine di callback stop di PEP deve restituire da qualsiasi stato in cui viene mantenuto il contesto.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1 e PROCESSOR_HALT_CACHE_COHERENT = 1

    Il flag cache-flush-override deve essere impostato solo se si immette uno stato inattiva che non è coerente nella cache.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 e PROCESSOR_HALT_CACHE_COHERENT = 0

    Il flag cache-flush-override deve essere impostato per qualsiasi arresto coerente della cache.

  • PROCESSOR_HALT_CONTEXT_RETAINED = 0 e PROCESSOR_HALT_CACHE_COHERENT = 1

    Tutti gli stati inattive che perdono il contesto hardware del processore (e quindi usano il protocollo di parcheggio multiprocessore per uscire dallo stato inattiva e restituire il controllo al sistema operativo) non sono stati coerenti con la cache.

Se il parametro Flags contiene una combinazione illegale di bit di flag, ProcessorHalt ha esito negativo e restituisce STATUS_INVALID_PARAMETER.

Il PEP può chiamare questa routine in IRQL <= HIGH_LEVEL.

Requisiti

Requisito Valore
Client minimo supportato Supportato a partire da Windows 10.
Piattaforma di destinazione Windows
Intestazione pepfx.h (includere Pep_x.h)
IRQL <= HIGH_LEVEL

Vedi anche

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE